Claude Codeの42CrunchプラグインでOpenAPIの監査と修正を回す
42Crunchプラグインは、OpenAPI仕様の監査、BOLA/BFLAのライブスキャン、同意つきの修正を1つのループで回します。導入、スキルの使い分け、認証情報、つまずきを扱います。
42Crunchプラグイン(42crunch-api-security-testing)は、OpenAPI仕様のセキュリティ監査と修正をClaude Codeの中で回すためのプラグインです。監査、ライブスキャン、修正、再検証の順にループを組み、OWASP API Securityのリスク(BOLA/BFLAを含む)に沿った指摘を返します。
この記事では、5つのスキルの役割、導入と認証情報の置き場所、監査結果の読み方、修正の同意ゲート、ライブスキャンの前提、つまずきやすい点を順に扱います。
5つのスキルが「監査→スキャン→修正→再検証」を分担する
プラグインを入れると、次の5つのスキルが使えるようになります。スラッシュコマンドでも呼べますし、「42crunchの監査を回して」のような自然文でも起動します。
| スキル | 役割 |
|---|---|
/42crunch-setup | 役割42c-ast バイナリの導入と認証情報の設定(初回のみ) |
/42crunch-audit | 役割OpenAPI仕様の静的監査。スコアつきの指摘とAI修正 |
/42crunch-scan | 役割稼働中のAPIに対する適合性・認可スキャン(BOLA/BFLA) |
/42crunch-api-security-testing | 役割監査とスキャンを1セッションで通す |
/generate-oas | 役割ソースコードやPostman/Insomniaのコレクションから openapi.json を生成 |
名前の割に、中身は2段構えです。静的な監査はOpenAPIファイルだけで動き、ライブスキャンは起動済みのAPIサーバーを必要とします。仕様書の段階で潰せる問題と、実際に動かして初めて分かる認可の穴を、別のスキルとして分けています。
導入から最初の監査まで
マーケットプレイスの追加とプラグインの導入は、Claude Code CLIから行います。READMEは、マーケットプレイスの追加とプラグインの導入にCLIが必要だと明記しています。
claude plugin marketplace add https://github.com/42Crunch-AI/claude-plugins
claude plugin install 42crunch-api-security-testing@42crunch-marketplaceセッションの中なら、/plugin marketplace add と /plugin install に同じ引数を渡します。VS Code拡張では /plugin でプラグインマネージャーを開き、MarketplacesタブにリポジトリURLを貼って追加します。インストール先のスコープ(User・Project・Local)は導入時に選びます。スコープの違いはプラグインとマーケットプレイスの解説にまとめています。
導入後の流れはREADMEのクイックスタートに沿うと次の5手です。
導入から最初の修正までの流れ
- 1
環境を整える
「set up 42crunch」と伝えます。
42c-astの取得と認証情報の設定が走ります。 - 2
監査を回す
「run a 42Crunch audit」と伝えます。OpenAPIファイルが無ければ、ソースコードからの生成を提案されます。
- 3
指摘を読む
重大度ごとに整理された指摘が出ます。この時点ではまだ何も書き換わりません。
- 4
修正に同意する
変更を加える前に必ず同意を求められます。同意すると修正して再監査します。
- 5
ライブスキャンを回す
「run a conformance scan」と伝えると、起動中のサーバーに対する検査に進みます。
認証情報は3つの方式から選ぶ
42Crunchのアカウントは必須です。READMEが挙げる選択肢は次のとおりです。
- Starter(無料トライアル)
- トークン方式の有料プラン(IndividualとIndividual Pro)
- APIキーを使うPlatformアカウント(Team 10、Team 25、Enterprise)
/42crunch-setup はこの方式の違いに合わせて設定を進めます。認証情報は、macOS/Linuxなら ~/.42crunch/conf/env、Windowsなら %APPDATA%\42Crunch\conf\env に保存されます。macOS/Linuxでは権限が 600 になります。
| 変数 | 内容 | 方式 |
|---|---|---|
API_KEY | 内容Platformトークン(api_* または ide_*) | 方式Platform |
PLATFORM_HOST | 内容プラットフォームのベースURL | 方式Platform |
TRIAL_TOKEN | 内容Starter・Individual・Individual Proのアクセストークン(Base64) | 方式Token |
SCAN42C_HOST | 内容スキャン対象URLの上書き | 方式両方 |
TRIAL_TOKEN は名前に「トライアル」と付いていますが、有料のトークンプランにも使います。READMEによると、後方互換のために変数名を残してあるためです。ファイルはスキルの実行中に手で編集しない、とも書かれています。入力した資格情報は、あとから平文で表示されません。
監査の結果は4つの層に分かれる
/42crunch-audit は、OpenAPI仕様に0〜100のセキュリティスコアをつけます。指摘は重要度の高い順に4層に分類されます。
指摘の4層
SQG-Blocking
Security Quality Gateを通すために必ず直す項目です。
Security
修正が推奨される項目です。
Data Validation
情報として表示される項目です。
Spec Conformance
OAS形式の不備で、スコアやSQGの対象外です。
注意したいのは、合否の基準が方式で変わる点です。Platform方式では、プラットフォームのポリシーに設定されたSQGのしきい値が適用されます。トークン方式には自動のSQGゲートがなく、セッションごとに目標スコアと、ブロック扱いにする重大度を自分で決めます。
つまり、同じ仕様書でも「通った」の意味が方式によって違います。チームで基準をそろえたいなら、Platform方式のポリシーに寄せるのが素直です。トークン方式で使うなら、目標スコアを CLAUDE.md に書いておくとセッションをまたいでぶれません(書き方は後述)。
修正は同意ゲートを通ってから適用される
このプラグインの設計で特徴的なのは、書き換えの前に毎回同意を取る点です。監査が終わると指摘の一覧が出て、そのあとの同意ゲートで、どの修正を適用するかを選びます。修正後は再監査して、SQGを通ったかを確認します。
RECIPES.mdは、よくある使い方を言い回しつきで7つ挙げています。うち、修正の進め方に関わる3つを抜き出します。
| やりたいこと | 伝える内容の例 | 起きること |
|---|---|---|
| 結果だけ見たい | 伝える内容の例「Audit my API and show me the findings, but don't apply any fixes」 | 起きること指摘を表示し、修正は適用しない |
| 前回の報告書から直したい | 伝える内容の例「Fix the audit issues in report.json for openapi.json」 | 起きること監査を飛ばし、既存の報告書を読んで修正に進む |
| 監査とスキャンを通したい | 伝える内容の例「Run audit and scan」 | 起きること監査のあと、スキャン用の許可確認を挟んで通しで実行 |
報告書から直すレシピでは、42c-ast audit run が出したJSON、または42Crunchの拡張機能の監査結果をJSONで書き出したものを渡せます。この場合は監査をやり直さないので、最終サマリーにスコアの増減は出ません。直したあとにSQGを通ったか確かめたいときは、改めて監査を回します。
レビュー前の下見にも向いています。チームで指摘を見てから直すかどうかを決めるなら、「修正はまだ適用しない」と最初に伝えておけば、同意ゲートでレビューのみとして扱われます。
OpenAPIがまだ無いときは generate-oas から始める
仕様書がないプロジェクトでは、/generate-oas で openapi.json を作れます。入力の組み合わせは4通りです。
- コードベースだけ: ルート、パラメーター、リクエスト/レスポンスのスキーマ、認証ミドルウェア、データモデル、サーバー設定を読み取る
- Postmanコレクションだけ: v2.0/v2.1のコレクション(環境ファイルは任意)から、パス、メソッド、ヘッダー、認証方式を取り出し、
{{variableName}}の変数を解決する - Insomniaコレクションだけ: v4(JSON)またはv5(JSONかYAML)のエクスポートが対象。サンプルのレスポンスが含まれないため、レスポンスの形は暫定になる
- コードベースとコレクションの併用: コードベースを構造の基準にし、コレクションの実例の値で補強する。コードから漏れたエンドポイントの発見にも使う
READMEが対応フレームワークとして挙げるのは、Express、Fastify、NestJS、FastAPI、Flask、Django、Spring Boot、Gin、Rails、ASP.NET Coreなどです。スキーマは components/schemas に集約され、書き出す前にセルフレビューが入ります。
生成の直後に監査まで続けるなら、「Generate an OpenAPI spec from my code and then audit it」のように一続きで頼むのがRECIPES.mdの6番目のレシピです。生成した仕様は監査で最初の点数がつくので、まず現状を知る使い方になります。
ライブスキャンは稼働中のAPIが前提になる
/42crunch-scan は、静的な監査では見えない認可の穴を、実際にリクエストを送って調べます。検出するのはBOLA(オブジェクトレベルの認可不備)とBFLA(機能レベルの認可不備)、それに適合性(仕様と実際の挙動のずれ)です。結果は3層で出ます。
- 認可の失敗: BOLA/BFLAが確認されたもの
- SQG-Blockingの適合性違反: 必ず直す項目
- 参考としての適合性違反: レビュー用に表示
実行前の確認がいくつか挟まります。対象URLを確認し、到達できるかを調べ、操作・認証方式・BOLAの候補をOpenAPIから分析して、スキャンの内容をプレビューします。その後、まず正常系の検証実行を行い、本格的なファジングスキャンの前にもう一度同意を求めます。
対象URLはOpenAPIの servers[0] から取るのが既定です。ステージング環境などへ向けたいときは、環境変数 SCAN42C_HOST で上書きします。
export SCAN42C_HOST=https://staging.example.com
claude上のURLは例です。サーバーが起動していないと、スキャンの段階で止まります。通しで回すRecipe 4でも、第2フェーズの前に到達確認が入ります。
修正の同意はここでも別に取られます。OpenAPI側の契約の更新と、サーバー側のコード変更が、それぞれ同意の対象です。トークン方式ではSQGの自動判定がないため、全指摘が参考情報として並び、何を直すかは自分で決めます。
既存のlintとはどう使い分けるか
OpenAPIの検査には、ルールセットを自分で書くリンタという選択肢もあります。SpectralでOpenAPIをlintする設定は、編集のたびにhookで検証させる構成です。42Crunchのプラグインは、指摘がOWASP API Securityの観点で分類され、0〜100のスコアとSQGで合否が決まる点が違います。
| 観点 | Spectralのlint | 42Crunchプラグイン |
|---|---|---|
| ルールの出どころ | Spectralのlint自分たちで書く | 42Crunchプラグイン42Crunch側の監査 |
| 結果の形 | Spectralのlintルールごとの警告・エラー | 42CrunchプラグインスコアとSQG、4層の分類 |
| 実行中のAPIの検査 | Spectralのlintなし | 42Crunchプラグイン/42crunch-scan で可能 |
| 必要なもの | Spectralのlint手元のlintツール | 42Crunchプラグイン42Crunchアカウントと 42c-ast |
両者は競合するというより、層が違います。命名や書式の社内規約はSpectralのルールに、セキュリティの評価は42Crunchに任せる、という分担が考えられます。両方をCIに載せるかどうかは、各ツールの運用に合わせて決める話です。
セキュリティ系プラグインの審査という視点では、スキル・プラグインのセキュリティスキャンの記事も参考になります。このプラグインも、スキルに加えて外部のバイナリ(42c-ast)を取得して使うため、導入前に提供元と中身を見る対象になります。
CLAUDE.mdに目標を書いて、セッションをまたいで保つ
トークン方式では基準がセッションごとの口頭の約束になるため、プロジェクトの CLAUDE.md に残しておくと再現しやすくなります。次は書き方の一例です(スコアの値は例で、プラグインの既定ではありません)。
## API セキュリティ
- OpenAPI は `openapi.json` が正。変更したら 42Crunch の監査を回す
- 目標スコアは 90 以上、SQG-Blocking は 0 件にする
- 修正は指摘を見せてから適用する。仕様書以外のコードは勝手に変えない
- ライブスキャンの対象は `SCAN42C_HOST` で指す検証環境だけにするプロジェクトスコープでプラグインを入れると、有効化の設定は .claude/settings.json に入り、コミットすればメンバーにも伝わります。ただしダウンロードまでは共有されないため、各メンバーが一度 claude plugin install 42crunch-api-security-testing@42crunch-marketplace --scope project を実行します。42c-ast の導入と認証情報は、人ごとの手元の作業として残ります。
つまずきやすい点
導入後に止まりやすい箇所
バイナリが見つからない
「binary not found」「42crunch not working」と伝えると、
/42crunch-setupのトリガーになります。42c-astは~/.42crunch/bin/に置かれ、初回利用時の取得と更新は自動です。スキャンが始まらない
対象サーバーが起動しているか、
servers[0]かSCAN42C_HOSTのURLに到達できるかを見ます。到達確認が失敗するとスキャンに進めません。修正後のスコアが出ない
既存の報告書から修正した場合は、監査を再実行していないのでスコアの増減がありません。再度の監査で確かめます。
TRIAL_TOKENに有料トークンを入れてよいか
READMEでは、Starter・Individual・Individual Proのトークンをこの変数に入れる設計です。変数名は後方互換のために残されています。
まとめ
42Crunchプラグインの中心は、監査で仕様書の穴を点数にし、同意を挟んで直し、必要なら稼働中のAPIにスキャンをかける、という一周です。仕様書がなければ /generate-oas から入れます。
最初の一歩としては、手元のOpenAPIに対して「修正はまだ適用しない」と伝えて監査を回し、スコアと指摘の層を眺めるところが軽いでしょう。ライブスキャンは、その仕様書がある程度きれいになってから、検証環境に向けて回す順序になります。