analyzing-code-security について
開発者向けの手動コードセキュリティレビュー用スキルです。敵対的な視点で信頼境界を越える入力を追跡し、検出事項を CWE に対応付けます。
主な機能
- 01攻撃対象領域の把握
- 02ソースからシンクへのデータフロー追跡
- 03信頼境界での検証確認
- 04OWASP・CWE チェックリスト参照
- 05悪用可能性を評価した CWE 付き検出事項
活用シーン
- 01API エンドポイントやファイルパーサーのレビュー
- 02信頼できない入力から重要操作までの追跡
- 03認可と検証の経路の評価
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ bitwarden/ ai-plugins --skill analyzing-code-securityインストール後、Claude Code で/analyzing-code-securityを入力して読み込まれたか確認します。
同梱ファイルreferences/framework-checklists.mdreferences/vulnerability-patterns.md
詳細
セキュリティレビューのワークフロー
手動でセキュリティコードレビューを行う際は、以下の手順に従ってください。
- 攻撃対象領域を特定します。 エントリーポイントを特定します。API エンドポイント、メッセージハンドラー、ファイルパーサー、ユーザー向けフォームなどが該当します。ルート定義とコントローラーの登録を読み、全体像を把握します。
- ソースからシンクまでのデータフローを追跡します。 信頼できない入力(HTTP パラメーター、ヘッダー、リクエストボディ、ファイルアップロード、外部 API のレスポンス)が、すべての変換処理を経て、危険な操作(データベースクエリ、コマンド実行、HTML レンダリング、ファイルシステムへのアクセス)に至るまでを追跡します。
- 信頼境界を越える箇所を確認します。 データが信頼境界(クライアント→サーバー、サービス→サービス、ユーザー入力→データベース)を越えるすべての箇所で、検証、認証、認可が確実に行われていることを確認します。
- フレームワークのチェックリストを適用します。 OWASP Web/API/Mobile Top 10 と CWE Top 25 については、
references/framework-checklists.mdを参照してください。該当する各カテゴリを、レビュー対象のコードに照らして確認します。 - 攻撃者の視点で考えます。 仮説(例:「SSO を回避できる」「他のユーザーの保管庫にアクセスできる」)を立て、悪用可能にする条件を逆方向にたどって特定します。
- 検出事項を CWE ID に対応付けます。 すべての検出事項に、具体的な CWE 識別子、コードの位置、悪用可能にするデータフローを含める必要があります。
- 実際の悪用可能性に基づいて分類します。 実際に悪用可能な脆弱性と理論上のリスクを区別します。それに応じて優先順位を付けつつ、両方を記録します。
主な脆弱性カテゴリ
Bitwarden のスタック全体で、特によく見られるカテゴリは次のとおりです。
- インジェクション(CWE-89、CWE-78、CWE-77)— サニタイズされていない入力が、SQL クエリ、OS コマンド、LDAP クエリに渡されることです。必ずパラメーター化クエリを使用し、文字列の連結は避けてください。
- アクセス制御の不備(CWE-862、CWE-287、CWE-306)— 認可チェックの欠落、IDOR、権限昇格です。あらゆる層で、オブジェクトごとの所有権チェックとロールの適用を確認してください。
- XSS(CWE-79)— ユーザー入力がエンコードされずに HTML にレンダリングされることです。Angular では、信頼できないコンテンツに対して
innerHTMLとbypassSecurityTrust*を使用しないでください。 - SSRF(CWE-918)— サーバー側リクエストでユーザーが制御する URL が使われることです。許可するホストのリストと照合して検証してください。
- 安全でないデシリアライズ(CWE-502)— 信頼できない入力に対して型処理が有効になっていることです。JSON.NET では
TypeNameHandling.Allの使用を避けてください。 - パストラバーサル(CWE-22)— ユーザーが指定したパスがファイルシステム操作に渡されることです。パスを正規化し、ベースディレクトリに対して検証してください。
- 暗号化の失敗 — 脆弱なアルゴリズム、ハードコードされたキー、予測可能な IV などです。承認済みのアルゴリズムについては、
reviewing-security-architectureスキルを参照してください。
すべての OWASP および CWE カテゴリを網羅したフレームワークのチェックリストについては、references/framework-checklists.md を参照してください。
C#、TypeScript、SQL の正しい/誤ったコード例については、references/vulnerability-patterns.md を参照してください。
攻撃者の視点によるレビュー
セキュリティコードレビューでは、攻撃者の視点で考えてください。これは、コードの強化を目指す通常のコードレビューとは異なります。
攻撃者の視点で考える方法:
- 仮説を立てます — 例:「SSO を回避できる」「他のユーザーの保管庫にアクセスできる」「メンバーから管理者に昇格できる」
- 逆方向にたどります — 攻撃を成功させるには、どのような条件が必要でしょうか。その条件を偽装できるでしょうか。
- 前提を疑います — その認可チェックには必ず到達するでしょうか。ミドルウェアが失敗したらどうなるでしょうか。トークンが無効ではないものの、不正な形式だったらどうなるでしょうか。
- 障害時の動作を考慮します — 処理が失敗したとき、どうなるでしょうか。フェイルオープン(安全ではない状態)になるでしょうか、それともフェイルクローズ(安全な状態)になるでしょうか。
重要なルール
- 認可の前に認証します。 ユーザーが主張どおりの人物であることを必ず確認してから、許可されている操作を確認します。「内部」エンドポイントでも認証チェックを省略してはいけません。
- 信頼境界で検証します。 データが信頼境界を越えるすべての箇所(クライアント→サーバー、サービス間、ユーザー入力→データベース)で検証が必要です。クライアント側の検証だけを信用してはいけません。
- 検出事項を CWE ID に対応付けます。 すべての検出事項に、証拠となる具体的な CWE 識別子を含めます。証拠には、コード上の場所と、それを悪用可能にするデータフローが必要です。
- 理論より実用性を重視します。 このシステムで実際に悪用可能な脆弱性と、理論上のリスクを区別します。それに応じて優先順位を付けつつ、両方を記録します。
- チェーン全体を確認します。 脆弱性はシンクだけではありません。ソース(ユーザー入力)から、すべての変換処理を経て、シンク(危険な操作)に至るまで追跡します。サニタイズによってチェーンが断たれている場合は、悪用できません。
追加リソース
参考ファイル
詳細なチェックリストやコード例については、以下を参照してください。
references/framework-checklists.md— OWASP Web Top 10、API Top 10、Mobile Top 10(2024)、CWE Top 25 の参照表references/vulnerability-patterns.md— C#/.NET、TypeScript/Angular、SQL の正しいコード例と誤ったコード例
コメント
Markdown 対応