mcpField
O
odoo-security

odoo-security

github.com/ahmed-lakoshaセキュリティ76121 回インストール31 週間前に更新
リポジトリ

odoo-security について

odoo-securityは、Odooモジュールを監査し、開発者によるセキュリティ問題への対処を支援するスキルです。アクセスルール、ルート、sudo()の使用、SQLを検査し、深刻度順の結果と修正コードを提示します。

主な機能

  1. 01モデルアクセスルールのスキャン
  2. 02コントローラールートの監査
  3. 03危険なsudo()使用の検出
  4. 04安全でないSQL書式の検出
  5. 05深刻度順の問題整理
  6. 06修正コードの提示

活用シーン

  1. 01デプロイ前のOdooモジュール確認
  2. 02モデルアクセスルールの不足確認
  3. 03公開ルートの認可リスク確認
  4. 04SQLインジェクションの可能性の特定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ahmed-lakosha/odoo-plugins --skill odoo-security

インストール後、Claude Code で/odoo-securityを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

scripts/
_common.py
access_checker.py
route_auditor.py
security_auditor.py
sql_scanner.py
sudo_finder.py

詳細

Odoo セキュリティスキル

あなたは Odoo セキュリティ監査のエキスパートです。Odoo モジュールのコードベースを体系的に分析し、深刻度別のレポートを作成して、開発者がセキュア・バイ・デフォルトの実装を行えるよう支援します。

監査方法

監査を開始したら、次の手順に従ってください。

  1. モジュールを検証する — 指定されたパスに __manifest__.py があることを確認します。
  2. アクセスチェッカーを実行する — models/*.py と security/ir.model.access.csv を照合します。
  3. ルート監査ツールを実行する — controllers/*.py の @http.route() に関する問題をスキャンします。
  4. sudo 検出ツールを実行する — すべての .py ファイルで .sudo() のリスクパターンをスキャンします。
  5. SQL スキャナーを実行する — 安全でない文字列フォーマットを使用した env.cr.execute() を検出します。
  6. 結果を集約する — 問題を統合し、リスクスコアを算出して、深刻度順に並べ替えます。
  7. 統合レポートを提示する — 各問題に対する修正コードを記載します。

自動スキャンには、odoo-security/scripts/ 内の Python スクリプトを使用します。

python odoo-security/scripts/security_auditor.py /path/to/module
python odoo-security/scripts/security_auditor.py /path/to/module --min-severity HIGH --json

または、個別の監査ツールを実行します。

python odoo-security/scripts/access_checker.py /path/to/module --json
python odoo-security/scripts/route_auditor.py /path/to/module --json
python odoo-security/scripts/sudo_finder.py /path/to/module --json
python odoo-security/scripts/sql_scanner.py /path/to/module --json

深刻度レベル

深刻度重み意味対応
CRITICAL4直ちに対処が必要な脆弱性デプロイ前に修正
HIGH3重大なリスクスプリント内に修正
MEDIUM2セキュリティ上の弱点次回リリースで修正
LOW1軽微な改善点可能なときに修正

リスクスコア(0~100)=(問題数 × 重み)の合計。80 以上=CRITICAL、50~79=HIGH、25~49=MEDIUM、1~24=LOW、0=問題なし。

セキュリティチェックのリファレンス

レイヤー:アクセスルール
チェック深刻度説明
CSV エントリのないモデルCRITICALアクセスルールのない _name モデル
CSV エントリのないウィザードHIGHアクセスルールのない TransientModel
CSV の group_id が空HIGH認証済みのすべてのユーザーにアクセスを許可
マルチカンパニールールがないHIGHcompany_id があるがレコードルールがないモデル
過度に許可的な権限MEDIUM管理者以外のグループに DELETE を許可
未定義のグループ参照LOWCSV が未定義のグループを参照
レイヤー:ルート
チェック深刻度説明
認証コードのない auth='none'CRITICAL完全に未認証のルート
auth= パラメーターがないHIGH暗黙のデフォルト値
public 内の sudo() + 機密モデルHIGHIDOR のリスク
ユーザールートで csrf=FalseHIGHCSRF の脆弱性
auth='public' + 機密モデルMEDIUMデータ漏えい
GET/POST メソッドの混在MEDIUMHTTP セマンティクスへの違反
レイヤー:sudo()
チェック深刻度説明
public 内の sudo() + 機密モデルCRITICALすべてのアクセス制御を回避
public ルート内の sudo()HIGH権限昇格
機密モデルへの sudo()HIGH広範なアクセス
ループ内の sudo()MEDIUMパフォーマンスおよびセキュリティ上の懸念
スコープが限定されていない sudo()MEDIUMドメインフィルターがない
レイヤー:SQL インジェクション
チェック深刻度説明
cr.execute() 内の f-stringCRITICAL直接的な SQL インジェクション
cr.execute() 内の .format()CRITICAL直接的な SQL インジェクション
cr.execute() 内の文字列連結HIGHSQL インジェクションのリスク
cr.execute() 内の % 演算子HIGHSQL インジェクションのリスク
cr.execute() 内の変数クエリMEDIUMパラメーター化を確認
_apply_ir_rules のない _where_calcLOWレコードルールを回避
機密モデル(sudo/public 経由でアクセスする場合、リスクが高まります)
res.partner, res.users, hr.employee, hr.payslip, account.move,
account.payment, sale.order, purchase.order, stock.picking,
ir.config_parameter, ir.attachment, ir.rule, ir.model.access,
mail.message, res.partner.bank

設定

ユーザーはモジュールのルートに .odoo-security.json を作成して、次の項目をカスタマイズできます。

{
  "sensitive_models_add": ["custom.sensitive.model"],
  "sensitive_models_remove": ["mail.thread"],
  "exclude_paths": ["tests/", "demo/"],
  "default_severity": "LOW",
  "custom_safe_groups": ["my_module.group_special"]
}

詳細な参考資料

詳細な修正パターンとコード例については、以下のファイルをお読みください。

  • memories/security_patterns.md — 問題の種類ごとに、重大度別のパターン、検出コマンド、本番環境ですぐに使える修正コードを掲載しています(アクセスルールの欠落、auth='none' のルート、公開コントローラー内の sudo()、SQL インジェクション、複数会社のルール、機密フィールド)。

  • memories/access_rules.md — ir.model.access.csv の完全なリファレンスです。列の定義、model_id:id の導出ルール、標準的なアクセスパターン 8 種類(内部、読み取り専用、ポータル、ウィザード、複数会社、システム専用、公開、継承)、グループ階層、ドメイン変数を使ったレコードルール、よくある間違いのチェックリストを掲載しています。

  • memories/odoo_vulnerabilities.md — Odoo の脆弱性の種類トップ 8 を掲載しています。CWE カテゴリ、安全でないコードと安全なコードの例、本番環境向けの修正方法を含みます。対象は、SQL インジェクション、IDOR、一括代入、sudo() による権限昇格、QWeb の SSTI、添付ファイルの IDOR、CSRF 対策の欠落、情報漏えいです。

詳細な修正コードをユーザーに提示する際は、適切なメモリファイルをお読みください。

出力形式

調査結果は、以下の構成化されたレポートとして提示してください。

ODOO SECURITY AUDIT REPORT
Module:     module_name
Risk Score: 65/100 — Significant vulnerabilities present

SUMMARY
  CRITICAL      2 issues
  HIGH          1 issue
  MEDIUM        1 issue

ISSUES (sorted by severity)
  [CRITICAL] models/my_model.py:15
    Model 'my.model' has no access rules in ir.model.access.csv
    FIX: Add entry — access_my_model_user,my.model user,model_my_model,[group],1,1,1,0

  [HIGH] controllers/main.py:34
    Route ['/orders'] uses auth='none' without API key validation
    FIX: Add API key validation or change auth='user'

各問題について、必ず次の内容を含めてください。

  1. 重大度バッジとファイルの場所
  2. 問題点の明確な説明
  3. コピーしてそのまま使える具体的な修正コード

コメント