mcpField
A
api-security-testing

api-security-testing

github.com/mn-youssefセキュリティ4993 回インストール20 週間前に更新
リポジトリ

api-security-testing について

REST、GraphQL、gRPC、WebSocket の API を OWASP API Top 10 に沿って評価するセキュリティテストスキルです。API への直接リクエストで認可やリソース制限を確認し、再現可能な証拠を記録します。

主な機能

  1. 01OWASP API Top 10 に沿ったテスト
  2. 02API 仕様から操作を洗い出す
  3. 03オブジェクト・フィールド・機能の認可確認
  4. 04レート・サイズ・クエリ制限のテスト
  5. 05過剰なデータがないか生レスポンスを確認
  6. 06リクエスト・レスポンス・影響を記録

活用シーン

  1. 01ユーザーアカウント間の認可を評価
  2. 02GraphQL のイントロスペクションとクエリ制限を確認
  3. 03未記載または古い API エンドポイントを発見
  4. 04API レスポンスのフィールド露出を確認

インストール

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

$npx skills add https://github.com/mn-youssef/security-skills --skill api-security-testing

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

同梱ファイルreferences/api-attacks.md

詳細

API セキュリティテスト(発見/悪用 — OWASP API Top 10)

概要

現代のアプリは API ファーストであり、API の不具合は Web ページとは異なります。不具合は表示処理ではなく、オブジェクト/フィールドごとの認可やリソース制限にあります。UI を完全に迂回し、API を直接テストしてください。

基本原則: UI はクライアントの 1 つにすぎません。攻撃者は API に直接リクエストを送ります。各エンドポイント、フィールド、メソッドは、それぞれ個別に認証・認可と制限を適用する必要があります。フロントエンドは何も保護しません。

適用する場合/スキップする場合

  • 適用する場合: REST、GraphQL、gRPC、WebSocket など、プログラムから利用できる API をアプリが公開している場合。SPA やモバイルクライアントの背後にある API も含みます。
  • スキップする場合: 誰も呼び出せる API がなく、サーバー側で HTML を生成するだけのアプリの場合 → 該当なし。
  • 該当しない場合: 「api-security-testing: N/A — no API surface」と報告して終了します。

⚠️ 認可

自分が所有またはテストを許可された API を対象にしてください。状態が変化するテストには、テストアカウントと非本番環境を使用してください。

まず仕様を取得する

API 契約を取得し、そこに記載された操作と UI から判明したすべての操作をテストします。

  • OpenAPI/Swagger(/swagger、/openapi.json、/api-docs)、GraphQL のイントロスペクション、gRPC リフレクション、Postman コレクション、プロキシ経由でのモバイルアプリの通信。
  • 文書化されたエンドポイントと、アプリが実際に呼び出すエンドポイントの差分を確認します。文書化されていないエンドポイントは大きな手がかりです。

OWASP API Top 10 — チェックリスト

#リスクテスト
API1BOLA(オブジェクト認可)アカウント間でオブジェクト ID を入れ替えます → access-control-testing を参照
API2認証の不備脆弱なトークン/JWT/キー → authentication-testing を参照
API3BOPLA(プロパティ認可)読むべきでないフィールドを読み取る(過剰なデータ露出)/書き込むべきでないフィールドを書き込む(マスアサインメント)
API4リソース消費の制限不足レート/サイズ/ページ数の制限がない、コストの高いクエリ、コスト/DoS
API5BFLA(機能認可)一般ユーザーとして管理者/特権操作を呼び出す
API6ビジネスフローへの無制限なアクセス人間のペースで行うことを想定したフローを自動化する(買い占め、スパム)
API7SSRFサーバーが指定した URL を取得する → file-upload-and-ssrf を参照
API8設定ミス詳細すぎるエラー、制限の緩い CORS、セキュリティヘッダーの不足
API9インベントリ管理の不備/v2 と並存する旧 /v1、ステージング API、文書化されていないエンドポイント
API10サードパーティ API の安全でない利用アプリが外部 API の応答を無条件に信頼する

REST、GraphQL、gRPC、WebSocket の手順については、references/api-attacks.md を参照してください。

UI と比べて過剰なデータ露出

API は多くの場合、UI に表示される以上のデータを返します(passwordHash や内部フラグ、他のユーザーのフィールドを含むユーザーオブジェクト全体など)。表示されたページではなく、生の JSON 応答を確認してください。

GraphQL 固有のポイント(重要度が高い)

  • イントロスペクションが有効 → スキーマ全体を把握できます。取得してください。
  • バッチ処理/エイリアス → レート制限を回避し、1 つのリクエストでブルートフォース攻撃を実行できます。
  • クエリの深さ/複雑さ → 再帰的にネストされたクエリによる DoS。
  • フィールドレベルの認可 → あるクエリで保護されているフィールドが、別の経路/ミューテーションから露出することがあります。

出力

検出事項ごとに、エンドポイント/操作、メソッド、使用したアカウント、生のリクエスト/応答、該当する API Top 10 の分類、影響を記載します。BOLA/BFLA の検出事項は通常、High~Critical です。

引き継ぎ

詳細な認可テスト → access-control-testing;認証/JWT → authentication-testing;フローの悪用 → business-logic-testing;再現 → active-pentest;修正 → security-hardening。

よくある間違い

  • UI 経由でしかテストしない — API を直接呼び出してください。そこが実際の攻撃対象です。
  • 生の JSON ではなく、表示されたページを確認する — 過剰なデータ露出は生の JSON に隠れています。
  • GraphQL のイントロスペクション/バッチ処理や gRPC リフレクションを忘れる — API の全体像を把握できます。
  • 古い API バージョンを無視する — /v1 には /v2 の修正が反映されていないことがよくあります。

コメント