Tech

Claude Security プラグインを試してみた

投稿日:

はじめに

2026年7月22日に、Anthropic 公式の Claude Security プラグイン がベータ版として公開されました。実際に使ってみた結果をまとめたいと思います。

Claude Security プラグインとは

Claude Security プラグインは、ローカルの Claude Code セッション内で、コードの脆弱性をマルチエージェントでスキャンする Anthropic 公式のプラグインです。複数のClaudeエージェントがチームとして動き、スキャンは大きく4つの段階で進みます。

公式の説明と実行結果から自分なりに理解すると、以下の様になっているようです。

  • アーキテクチャのマッピング — スキャン対象リポジトリのコード構造をコンポーネントに分けて把握します。
  • 脅威モデルの構築 — そのコードベースで何が攻撃対象になりうるかを整理します。
  • 脆弱性のハント — コンポーネントごとにエージェントを割り当て、並列で脆弱性を探索します。
  • 検出結果の検証 — 挙がった候補を、探索したエージェントとは別の独立したエージェントが1件ずつレビューし、通過したものだけでレポートを作成します。

導入

  • 前提条件
    • Claude Code v2.1.154 以降 + 有料プラン(スキャンが dynamic workflows を使うため)
    • Python 3.9.6 以降が python3 として PATH が通っていること
    • 差分スキャンとパッチ生成には Git が必要
  • インストール手順(公式マーケットプレイスから)

できること

プラグインが追加するコマンドは /claude-security の1つだけです。このコマンドを実行するとメニューが開き、以下3つの中から選択して実行されます。最初にスキャン(全体 or 一部)して脆弱性の検出を行ったら、次にパッチファイルを生成してコードに適用するという流れです。

  • Scan codebase(全体スキャン) — コードベース全体をスキャンします。
  • Scan changes(差分スキャン) — ブランチやPRの差分、コミット指定など、変更部分だけをスキャンします。
  • Suggest patches(パッチ生成) — 検出された問題の修正案を .patch ファイルとして提示します。自動適用はされず、人間が明示的に適用します。

また、 /claude-security scan my branch や「scan commit abc1234」のように自然言語で直接指示することもできます。

実際に動かしてみる(検証)

意図的に脆弱なコードをテスト用Laravel/Reactリポジトリに仕込み、検出できるかを検証したいと思います。

脆弱性のあるコードを3箇所仕込み、それぞれ、「仕込んだコード」「検出結果」「生成されたパッチ」をまとめます。

因みに、このテスト用リポジトリには、検証対象ファイル数が200近くあったのですが、FableでMax 5x プランで全体スキャンした所、5時間リミットに20分くらいで到達してしまいました。。。

スキャン実行前にも大量のトークンを消費すると注意換気がされました。(その時はFableを使っていたので余計にトークン消費していたかもしれない)

検証時は仕込んだコードを含む一部ファイルのみの、一部スキャンとしています。

検証1: SQLインジェクション

注文検索のエンドポイントです。検索キーワードと並び順を、クエリパラメータからそのままSQL文に埋め込んでいます。 ?keyword=nope' or '1'='1 を渡すと、条件に一致しないはずの注文まで全件返ってきます。

検証2: XSS

フロント表示で、クエリパラメータの値を、エスケープせずにそのまま描画しています。サーバー側(Blade)とクライアント側(React)の両方にを用意しています。 {!! !!}dangerouslySetInnerHTML も、フレームワーク標準のエスケープを自分で無効化するものです。 <script>alert(1)</script> などの悪意あるscriptがそのまま実行されます。

検証3: 認可不備

注文の請求情報を返すエンドポイントです。前提として、 orders テーブルは user_id を持っており、注文には必ず持ち主がいます。ルート側は auth ミドルウェアを通しているので、ログインしていない人はアクセスできません。

問題のあるコントローラ側です。URLで受け取ったIDの注文をそのまま返していて、ログイン中のユーザーがその注文の持ち主かどうかを確認していません。

つまり、ログインさえしていれば {orderId} を他人の注文IDに差し替えるだけで、その人の氏名・メールアドレス・請求額が読めてしまいます。「ログインしているか」は見ているのに、「その人が見てよいデータか」を見ていない、という抜けです。

SQLの組み立ても危険な出力もなく、コードだけを眺めても不備と分からないのが、前の2つとの違いです。

スキャン結果

スキャンが終わると CLAUDE-SECURITY-<timestamp>/ というディレクトリが作られ、mdファイルで結果が生成されます。

詳細は省きますが、仕込んだ脆弱性はすべて検出されていました

パッチ生成

メニューから Suggest patches を選び、レポートのどの検出を直すかを指定するとパッチが生成されます。

生成されたパッチは、先ほどのディレクトリに patches/F.patch として検出ごとに1ファイルずつ、変更内容の説明メモとセットで置かれます。

検証3で仕込んだ認可不備(F1)に対して生成されたパッチが、こちらです。

引数に $request を追加してログインユーザーのIDを取得し、そのIDの注文だけに絞り込んでから取得する修正になっています。他人の注文は「見つからない」扱いになるので、IDを変えながら他人の請求書を覗く、という手が使えなくなります。

手動でパッチ適用します。

さいごに

  • 一部スキャンからパッチ生成/適用が完了するまで3h近く掛かりました。大きいリポジトリの全スキャンとなると、結構な時間が掛かると予想されるのでプロジェクトの節目のタイミング等に行なう感じになるかと思います。

blog-page_footer_336




blog-page_footer_336




-Tech
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

Bluetooth Low Energy(BLE)とは? Bluetoothの開発が初めての人向け!

1 はじめに2 Bluetoothの規格2.1 Bluetooth Classic2.2 BLE(Bluetooth Low Energy)3 BLEの役割4 サービスとキャラクタリスティック4.1 ...

【Unity】URP対応のAssetのPrefabがピンク色になる件

1 はじめに2 レンダリングパイプラインとは2.1 ビルトインレンダリングパイプライン2.2 ユニバーサルレンダリングパイプライン3 URPの設定手順3.1 URPのインストール3.2 URPのアセッ ...

[C#]Genericsの使い方をまとめてみた。その2

1 はじめに2 Genericsの構文3 型パラメーター4 制約条件5 規定値6 さいごに7 おすすめ書籍 はじめに こんにちはsuzukiです。ブログを書いているときAndroid10が発表され、ア ...

ReactNative開発のスタート、シミュレータでのデバッグ

1 はじめに2 改めてシミュレータの起動3 表示内容を変更してみる3.1 App.js3.2 表示テキストの変更3.3 シミュレータの更新「command + R」4 デバッグメニュー4.1 Real ...

Github CopilotのCustom Agentを試してみた

1 はじめに2 Custom Agentとは2.1 Custom Agentのファイル2.2 Custom Agentの書き方3 テンプレート3.1 Context7-Expert3.2 beast ...

フォロー

blog-page_side_responsive

2026年8月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。