security-review (everything-claude-code)
認証、ユーザー入力、シークレット、API エンドポイント、決済をセキュリティチェックリストで確認します。
ECC セキュリティレビュー:仕込まれた脆弱性の発見は通常の Codex と変わらず、トークンもほぼ同じです。
Codex CLI · gpt-6-astra
24.9 / 30
スキルなしに対するリフト:-0.16 · 状況次第 · 18 実行
状況次第:リフト -0.16 が +1.0 未満。推奨には合計 22/30、出力品質 3.5、リフト +1.0 が必要です。
SOTA
合格Codex でテスト済み。
カバー対象 Codex, Claude Code
Codex CLI 0.166(SOTA ティア):採点対象 18 実行。当ティアのルールでは、ここでの合格は Claude Code もカバーします。第2ティアについては何も述べません。
スコア
各ディメンションは 0〜5 点で、6 つの合計が 30 点満点の合計スコアになります。すべてのディメンションで 5 が最良です。コスト 5 は低コストで高速、インストール 5 は簡単であることを意味します。
- トリガーの信頼性
- 5.0
- スキルなしに対するリフト
- 1.8
- 出力品質
- 4.1
- トークンと時間のコスト
- 5.0
- インストールと移植性
- 4.0
- 安全性
- 5.0
セキュリティレビュー
安全静的スキャン:CRITICAL 5 / HIGH 6 / MEDIUM 4。手動レビュー:ネットワーク無効のサンドボックスで実行しても安全(スキャナの指摘は確認済み)。クリーンなスキャン結果はスキルの安全性を証明しません。
インストール
npx skills@latest add affaan-m/everything-claude-code --skill security-review
固定コミット: b38be6a7f6350964d59328b52f0624e1d1d552d1
テスト済み: 2026-11-02
テスト内容
- 小規模サービスモジュールのレビュー — マージする前に orders_service.py をセキュリティレビューしてください。見つけた問題を重大なものから順に列挙してください。ファイルは変更しないでください。
- 認証ヘルパーのレビュー — auth_handlers.py をセキュリティレビューしてください。ログインフローのために今書いたところです。問題を重大なものから順に列挙してください。ファイルは変更しないでください。
- アップロードエンドポイントのレビュー — upload_api.py をセキュリティレビューしてください。脆弱性を重大なものから順に列挙してください。ファイルは変更しないでください。
長所
- スキルは名前を出さずとも採用されました:スキルあり群 6/6 実行でスキルファイルが読み込まれました。
- トークンのオーバーヘッドなし:スキルなしの 1.03 倍。
短所
- スキルなしに対する有意なリフトなし(-0.16、ノイズの範囲内)。
- 一文プロンプトは 4.29、スキルありは 4.06(-0.23)。
- テスト上の注意:タスク t1 にはセキュリティ問題ではない仕込み項目が 3 つ含まれ、最高でも検出率は 3.1 付近で頭打ちになります。
- タスク・群ごとに n=2。1 ポイント未満の差はノイズです。
レビュー
Mac テストマシン上で Codex CLI 0.166(gpt-6-astra、低推論)、実行ごとに新規の一時プロジェクトと一時 HOME/TMPDIR/キャッシュを使用、スキルをインストール(スキルあり群)、スキルなし(対照群)、またはスキルの中核要件をプロンプト末尾に付けた一文に圧縮(一文プロンプト群)、タスクごとに各群 2 実行、ネットワーク無効、/tmp への書き込みはブロック。プロンプトはスキル名に一切言及しません(以下で注記する表現を除く)。それぞれに 8 つの問題が仕込まれた 3 つの小さなファイル(サービスのモジュール、認証ヘルパー、アップロードのエンドポイント)と、読み取り専用の「問題を重大なものから順に列挙する」指示。オーダーサービスにはセキュリティ上の欠陥ではない問題が 3 つ含まれます(オフバイワンの境界、リソースリーク、float での金額)。セキュリティレビューではこれらをスキップすることが期待されるため、そのタスクではセキュリティレビュアーは最大でも 8 件中 5 件しか見つけられず、スコアは 3.1 付近で頭打ちになります。
3群の比較
| 群 | 平均スコア(0〜5) | 1実行あたりのトークン |
|---|---|---|
| スキルなし | 4.22 | 60k |
| 一文プロンプト | 4.29 | 44k |
| スキルあり | 4.06 | 62k |
Codex CLI で 18 実行を計測し、LLM 判定なしのルールベースのチェックで採点。合計 24.9 / 30、判定は 状況次第。
開示事項 タスク t1 にはセキュリティ問題ではない仕込み項目が3つ含まれており、これにより達成可能な最良の検出率は 3.1 前後に頭打ちになります。
判定:状況次第(24.9 / 30)。 ソース:affaan-m/everything-claude-code、skills/security-review、コミット b38be6a に固定。インストール:npx skills@latest add affaan-m/everything-claude-code --skill security-review。ライセンス: MIT(リポジトリの LICENSE)。
概要
affaan-m/everything-claude-code(ECC)の security-review スキルは、認証の追加、ユーザー入力の処理、シークレットの扱い、API エンドポイントの作成、決済の実装を行う際のセキュリティチェックリストです。SKILL.md は約 1,800 語の Markdown で(シークレット管理、入力検証、SQL インジェクション、認証と認可、XSS、CSRF、レート制限、機微データの露出、依存関係のセキュリティ。短い良い/悪いコード例とデプロイ前チェックリスト付き)、クラウドインフラのセキュリティに関する追加の Markdown ファイルが 1 つあります。スクリプトはありません。
テスト方法
Mac テストマシン上で Codex CLI 0.166(gpt-6-astra、低推論)、実行ごとに新規の一時プロジェクトと一時 HOME/TMPDIR/キャッシュを使用、スキルをインストール(スキルあり群)、スキルなし(対照群)、またはスキルの中核要件をプロンプト末尾に付けた一文に圧縮(一文プロンプト群)、タスクごとに各群 2 実行、ネットワーク無効、/tmp への書き込みはブロック。プロンプトはスキル名に一切言及しません(以下で注記する表現を除く)。
それぞれ 8 つの仕込み問題を含む 3 つの小さなファイル(サービスのモジュール、認証ヘルパー、アップロードエンドポイント)と、「問題を深刻なものから順に列挙する」という読み取り専用の要求です。注文サービスには、セキュリティ上の欠陥ではない問題が 3 つ含まれます(オフバイワンの境界、リソースリーク、float による金額)。セキュリティレビューではこれらをスキップすることが期待されるため、そのタスクでセキュリティレビュアーが見つけられるのは最大 8 件中 5 件で、スコアは 3.1 付近が上限です。
- 小さなサービスモジュールのレビュー — マージ前に orders_service.py をセキュリティレビューしてください。見つけた問題を深刻なものから順に列挙してください。ファイルは変更しないでください。
- 認証ヘルパーのレビュー — auth_handlers.py をセキュリティレビューしてください。ログインフロー用に今書いたものです。問題を深刻なものから順に列挙してください。ファイルは変更しないでください。
- アップロードエンドポイントのレビュー — upload_api.py をセキュリティレビューしてください。脆弱性を深刻なものから順に列挙してください。ファイルは変更しないでください。
採点はプログラム的(隠しテスト/仕込み問題の検出/制約チェック/該当する場合はレンダリング+OCR)で、実行ごとに 0〜5 点。スコアはどの LLM 判定者も決めていません。
結果
第 3 の群に与えた一文プロンプト:"セキュリティチェックリストに照らしてコードをチェックしてください:ハードコードされたシークレット、未検証の入力、SQL/コマンドインジェクション、壊れた認証と認可、安全でないファイルアップロード、エラーやログ内の機微データ、レート制限の欠如。各指摘に正確な行番号を付けること。"
| タスク | 対照群スコア | 一文プロンプト | スキルあり | 対照群トークン | 一文プロンプトトークン | スキルありトークン | スキルの読み込み |
|---|---|---|---|---|---|---|---|
| t1-orders | 2.89 | 3.12 | 2.42 | 60k | 44k | 72k | 2/2 |
| t2-auth | 4.77 | 5.0 | 4.77 | 59k | 44k | 61k | 2/2 |
| t3-upload | 5.0 | 4.77 | 5.0 | 59k | 44k | 51k | 2/2 |
平均スコア:スキルなし 4.22 に対しスキルあり 4.06(差 -0.16)。1実行あたりのトークン:60k に対し 62k(1.03 倍)。所要時間 38 秒に対し 44 秒。一文プロンプト群:4.29(一文プロンプトに対するスキルの上乗せ:-0.23、スキルなしに対する一文プロンプトの上乗せ:+0.08)。一文プロンプトのトークンは 1実行あたり 44k で、スキルは一文プロンプトの 1.40 倍のトークンを消費します。
何が起きたか
- 利益なし。平均スコアはスキルなし 4.22、一文のセキュリティチェックリスト 4.29、スキルあり 4.06。仕込み問題の検出は、1実行あたりスキルなし 8 件中 4.8、一文プロンプト 4.9、スキルあり 4.5 でした。
- スキルは注文サービスのタスクでやや劣っていました:平均 2.4 で、対照群 2.9、一文プロンプト 3.1(1実行あたり 2〜3 件の仕込み項目を検出。他の群は 3〜4 件)。これは n=2 ではノイズの範囲内です。
- 認証ヘルパーとアップロードエンドポイントでは、すべての群が 8 件中 7〜8 件の仕込み問題を見つけました。どちらも典型的な教科書的欠陥(md5、パストラバーサル、pickle、コマンドインジェクション)で、素の Codex はすでに知っています。
- スキルは 6/6 実行で読み込まれました。コストは 1実行あたり 62k トークンで、対照群 60k(1.03 倍)、一文プロンプト 44k(1.41 倍)です。一文プロンプトの実行が最も安価でした。回答前に読む量が少なかったためです。
- 採点の注意:項目は正規表現で照合されるため、言い回しが異なる指摘は見落としとして数えられることがあります。
ディメンション別スコア
| ディメンション | スコア | 理由 |
|---|---|---|
| 1_出力品質 | 4.06 | スキルありの平均スコア 4.06/5(プログラム的チェック。タスク別の表を 参照)。 |
| 2_スキルなしに対するリフト | 1.84 | スキルなし 4.22 に対して -0.16 ポイント(タスクごとに n=2。約 1 ポ イント未満の差はノイズ)。 |
| 3_トリガー | 5.0 | スキルあり群 6/6 実行でスキルファイルが読み込まれました。 |
| 4_指示の移植性 | 4 | プレーンな Markdown のチェックリスト。例は主に JS/TS と Supabase 向 けで、他のスタックには類推でしか適用できません。 |
| 5_効率性 | 5 | トークン 1.03 倍(1実行あたり 62k に対し 60k)、時間 1.17 倍(44 秒に対し 38 秒)。 |
| 6_安全性と衛生 | 5 | Markdown のみ。スキャナのヒットはチェックリスト内のコード例 (process.env、fetch、テンプレート文字列)です。 |
本テストの限界
- 教科書的な欠陥を含む小さな単一ファイルのレビュー 3 件です。より微妙な問題(ビジネスロジックの認可、競合状態、サプライチェーン)は仕込んでいません。
- スキルのクラウド/インフラのチェックリストとデプロイ前リストは実行していません。テストにインフラファイルがないためです。
- 検出のみです。誤検出や修正助言の品質は採点していません。
- タスク・群ごとに n=2。1 ポイント未満の差はノイズです。
- ルールベースの採点はチェックが検出できるものだけを測ります。センスや、結果が最善かどうかは判定できません。
セキュリティ
security.md を参照。スキャン:CRITICAL 5 / HIGH 6 / MEDIUM 4。判定:実行しても安全(ネットワーク無効のサンドボックス)。クリーンなスキャン結果はスキルの安全性を証明しません。
結論
妥当なチェックリストですが、素の Codex は同じ教科書的な脆弱性をすでに見つけます。同じカテゴリを列挙した一文も、約 70% のトークンで同程度の結果を出しました。この種のコードレビューでは、スキルは測定できる何も追加しません。一貫したチェックリストを望むチームのプロンプトとしては役立つかもしれません。
トランスクリプト
実行ログ:security-review (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 列:タスク、群-回、スコア(0-5)、トークン、秒、合格したチェック、エージェントが開いたスキルファイル。 t1-orders control-1: スコア 3.12, トークン 60493, 秒 36.1, チェック 1/2, 開いたファイルなし t1-orders control-2: スコア 2.66, トークン 60831, 秒 41.9, チェック 1/2, 開いたファイルなし t1-orders oneliner-1: スコア 3.12, トークン 44382, 秒 32.3, チェック 1/2, 開いたファイルなし t1-orders oneliner-2: スコア 3.12, トークン 44393, 秒 35.0, チェック 1/2, 開いたファイルなし t1-orders treatment-1: スコア 2.19, トークン 73335, 秒 69.3, チェック 1/2, 開いたファイル security-review t1-orders treatment-2: スコア 2.66, トークン 72383, 秒 54.7, チェック 1/2, 開いたファイル security-review t2-auth control-1: スコア 4.53, トークン 59839, 秒 37.6, チェック 2/2, 開いたファイルなし t2-auth control-2: スコア 5.0, トークン 59894, 秒 37.4, チェック 2/2, 開いたファイルなし t2-auth oneliner-1: スコア 5.0, トークン 44259, 秒 36.9, チェック 2/2, 開いたファイルなし
18 実行、3 成果物
サンプル出力
SOTA · With the skill: final message (t1-orders, run 1, Codex)
Found six security issues, ordered by severity. Exposure depends on how callers expose these functions; no caller code was provided. 1. **High — SQL injection** — [orders_service.py:9](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:9) `order_id` is interpolated directly into SQL. An input such as `0 OR 1=1` bypasses the intended lookup condition; crafted `UNION` queries could extract other database data. Bind `order_id` as a parameter. 2. **High — Missing cancellation authorization** — [orders_service.py:13](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:13) `current_user` is never used. Anyone able to invoke this function can cancel another user’s order by supplying its ID. Enforce ownership or an authorized administrative role before updating it. 3. **High — Arbitrary file overwrite through exports** — [orders_service.py:39](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:39) `open(path, "w")` immediately truncates any accessible target and follows symlinks. If callers control `path`, they can overwrite files with the service’s permissions—even before the query succeeds. Use server-generated filenames within a controlled export directory and prevent traversal and symlink escapes. 4. **High — Cross-user order export** — [orders_service.py:40](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:40) The export accepts any `user_id` without checking the requester’s identity or permissions. A caller can export another customer’s records. Derive the user ID from authenticated context and explicitly authorize administrative exports. 5. **High if valid — Embedded payment credential and credential logging** — [orders_service.py:4](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:4), [orders_service.py:48](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:48) A live-looking API key is embedded in source and would be printed after successful gateway calls. Its validity is unverified; the current gateway stub always raises. If real, rotate it, load its replacement from secret storage, and remove credential logging. 6. **Medium — Untrusted payment values lack validation** — [orders_service.py:31](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:31), [orders_service.py:45](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:45) Totals trust supplied prices and quantities, while `charge` accepts an amount without matching it to the stored order. If client-controlled, these permit manipulated totals or underpayment. Retrieve authoritative prices, validate quantities and amounts, and compute the charge server-side. No files were changed. This was a static review; the sandbox blocked the attempted in-memory verification.