api
OWASP API Top 10に準拠したAPI セキュリティ監査を実施します。ユーザーが「APIセキュリティをチェックしてほしい」「REST APIを監査してほしい」「BOLA脆弱性を見つけてほしい」「一括割り当てをチェックしてほしい」「APIレート制限を分析してほしい」「過度なデータ露出を検出してほしい」と依頼した場合や、「APIセキュリティ」「BOLA」「IDOR」「一括割り当て」「レート制限」「機能レベルの認可破損」「過度なデータ露出」「OWASP API Top 10」に言及した場合に使用します。/sentinel:apiで実行できます。
description の原文を見る
API security audit aligned with OWASP API Top 10. Use when the user asks to "check API security", "audit REST API", "find BOLA vulnerabilities", "check for mass assignment", "analyze API rate limiting", "detect excessive data exposure", or mentions "API security", "BOLA", "IDOR", "mass assignment", "rate limiting", "broken function-level authorization", "excessive data exposure", or "OWASP API Top 10". Invoke with /sentinel:api.
SKILL.md 本文
API Security (API)
OWASP API Security Top 10 (2023)に準拠したREST APIおよびRPC APIのセキュリティ脆弱性を分析します。Broken Object-Level Authorization (BOLA)、マスアサインメント、レート制限の欠落、broken function-level authorization、過度なデータ暴露を含みます。
フレームワークコンテキスト
OWASP API Security Top 10 (2023):
- API1:2023 Broken Object-Level Authorization (BOLA)
- API2:2023 Broken Authentication
- API3:2023 Broken Object Property-Level Authorization
- API4:2023 Unrestricted Resource Consumption
- API5:2023 Broken Function-Level Authorization
- API6:2023 Unrestricted Access to Sensitive Business Flows
- API7:2023 Server-Side Request Forgery
- API8:2023 Security Misconfiguration
- API9:2023 Improper Inventory Management
- API10:2023 Unsafe Consumption of APIs
主要なCWE:
- CWE-639: Authorization Bypass Through User-Controlled Key (BOLA)
- CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes
- CWE-770: Allocation of Resources Without Limits (レート制限)
- CWE-862: Missing Authorization (function-level auth)
- CWE-200: Exposure of Sensitive Information (過度なデータ暴露)
ワークフロー
ステップ1 — APIファイルの特定
以下のファイルパターンを優先します:
- ルート/エンドポイント定義 (
**/routes/**,**/api/**,**/endpoints/**) - コントローラとハンドラ (
**/controllers/**,**/handlers/**,**/views/**) - シリアライザとDTO (
**/serializers/**,**/dto/**,**/schemas/**) - ミドルウェア (
**/middleware/**,**/middlewares/**) - レート制限設定 (
**/config/**,**/limiters/**)
ステップ2 — 利用可能なスキャナの実行
以下が利用可能な場合は実行します:
semgrep scan --config auto --json --quiet <target>— BOLA、マスアサインメント、認可パターンでフィルタリングbandit -r <target> -f json -q— Python APIセキュリティパターンbrakeman -q -f json -o /dev/stdout— Rails マスアサインメント、認可
ステップ3 — 手動コード分析
1. BOLA — Broken Object-Level Authorization (API1:2023)
リソースIDを受け入れ、リクエストユーザーがそのリソースを所有しているか、アクセスを許可されているかを検証しないでデータを返すAPIエンドポイント。
# 脆弱: 所有権の確認がない — 認証されたユーザーは任意の注文にアクセスできる
@app.route('/api/orders/<order_id>')
@require_auth
def get_order(order_id):
return Order.get(order_id) # Missing: verify order belongs to current user
2. マスアサインメント (API3:2023)
リクエストボディのフィールドが、明示的なホワイトリストなしでモデル属性に直接バインドされている。
// 脆弱: 攻撃者はrole、isAdmin、balanceを設定できる
const user = await User.create(req.body); // all fields accepted
// Fix: User.create({ name: req.body.name, email: req.body.email })
3. レート制限の欠落 (API4:2023)
認証、データ集約的な、またはミューテーションエンドポイントにレート制限がない。
// 脆弱: ログイン試行に制限がない
app.post('/api/auth/login', async (req, res) => {
const user = await authenticate(req.body); // no rate limit
...
});
4. Broken Function-Level Authorization (API5:2023)
管理者または特権的なエンドポイントに、認証をチェックしているが認可ロール/権限をチェックしていないため、通常ユーザーがアクセスできる。
# 脆弱: ログインをチェックしているが、管理者ロールをチェックしていない
@app.route('/api/admin/users')
@require_login
def list_all_users():
return User.query.all() # Missing: @require_admin
5. 過度なデータ暴露 (API3:2023)
APIレスポンスが、クライアントが必要としない機密フィールドを含む。
// 脆弱: パスワードハッシュ、内部トークン、個人情報を返す
res.json(await User.findById(req.params.id));
// Fix: res.json({ id: user.id, name: user.name, email: user.email })
6. 入力検証の欠落
APIエンドポイントが、最大長または型検証なしで無制限の入力を受け入れる。
# 脆弱: 検索用語の最大長がない (ReDoS可能性)
results = db.search(req.query.get('q'))
7. APIバージョニング / シャドウエンドポイント (API9:2023)
非推奨のAPIバージョンが依然としてルーティングされ、アクセス可能。以下をチェック:
/api/v1/が現在の/api/v2/の場合でもアクティブ- OpenAPI仕様にない管理者エンドポイント
- 本番環境でアクティブなデバッグエンドポイント
ステップ4 — 検出結果フォーマット
[API-XXX] Title
Severity: CRITICAL/HIGH/MEDIUM/LOW | OWASP API: API1:2023/API3:2023/...
Location: file:line | Confidence: HIGH/MEDIUM/LOW
OWASP APIカテゴリ: [カテゴリ名]
攻撃シナリオ:
1. [攻撃者が細工されたリクエストを送信]
2. [コード内での制御の欠落]
3. [取得されたデータ/アクセス]
エビデンス:
[脆弱なコードスニペット]
修正:
[所有権チェック/ホワイトリスト/レート制限を含む修正されたコード]
CWE: [CWE-XXX] | Sentinel OWASP マッピング: [OWASP 2021 カテゴリ]
重大度ガイダンス
| 重大度 | 基準 |
|---|---|
| CRITICAL | 機密データ (財務、医療、個人情報)のBOLA、ロール/特権フィールドのマスアサインメント |
| HIGH | ユーザースコープのデータのBOLA、管理者エンドポイントの認証欠落、価格/ステータスのマスアサインメント |
| MEDIUM | 認証エンドポイントのレート制限欠落、非重要フィールドの過度なデータ暴露 |
| LOW | 軽微なデータ過剰暴露、レート制限が存在するが寛容すぎる |
Sentinel統合
APIセキュリティ検出結果はSentinelのSAST スキャンを補完します。SentinelのsemgrepルールはAPIハンドラのインジェクションと認証の問題を検出しますが、このスキルは認可ロジック、データ暴露、およびレート制限のチェックを追加し、Sentinelが見落とすものを補います。重複する検出結果をSENTINEL-XXX検出結果にマッピングしてください。API検出結果はOWASP A01 (Broken Access Control)、A04 (Insecure Design)、およびA05 (Misconfiguration)にマッピングされます。
レポートフォーマット
最終的な出力を ${CLAUDE_SKILL_DIR}/../../templates/report.md で定義された標準Sentinel レポート構造に従ってフォーマットしてください。検出結果IDカラムでスキルのドメイン固有の検出結果ID (例: STRIDE-SPOOF-001, RT-SK-001, API-001)を使用してください。最低限、セキュリティスコアカードと検出結果セクションを含めてください。ツール比較を実行していない場合 (AIのみの分析)、Cross-Validation Summaryセクションは省略してください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- 0x1337c0d3
- ライセンス
- MIT
- 最終更新
- 2026/4/20
Source: https://github.com/0x1337c0d3/claude-security / ライセンス: MIT