mitm-find-auth について
mitmproxyの通信ログから認証上の問題を調べるセキュリティテスト用スキルです。疑わしいフローを種類と深刻度ごとに整理し、検出内容の記録を支援します。
主な機能
- 01通信ログの認証パターン検索
- 02リセットトークンの挙動確認
- 03ロールとアクセス制御の確認
- 04セッションとJWTの分析
- 05深刻度別の検出内容整理
活用シーン
- 01記録したログイン・ログアウトの監査
- 02パスワードリセット要求の確認
- 03ロールを変更できるかの検証
- 04ログアウト後のトークン有効性確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ instavm/ security-skills --skill mitm-find-authインストール後、Claude Code で/mitm-find-authを入力して読み込まれたか確認します。
詳細
認証の脆弱性を探す
次の対象について、mitmproxy のダンプ(log.txt)を分析します:$ARGUMENTS
必要条件:現在のディレクトリに
log.txtが必要です。見つからない場合は、先にトラフィックをキャプチャしてください:mitmdump --set flow_detail=3 2>&1 | tee log.txt
価値の高い認証パターン(HackerOne の実際のバグ報奨金レポート 783 件に基づく)
1. パスワードリセットトークンの問題
バグ報奨金の実例:
- メールアドレス変更後もリセットリンクが期限切れにならない
- リセットトークンを複数回再利用できる
- パスワード変更後もリセットトークンが有効
- 予測可能または連番のリセットトークン
検索パターン:
grep -iE '(reset|forgot|recover|password).*token' log.txt
grep -iE 'token=[a-zA-Z0-9]{10,}' log.txt
2. ロールの操作による権限昇格
実例:
- リクエスト内の
role=userをrole=adminに変更する isAdmin=falseをisAdmin=trueに変更する- ユーザーのトークンで管理者用エンドポイントにアクセスする
- 他の管理者になりすまして招待を送信する
検索パターン:
grep -iE '(role|permission|privilege|isAdmin|is_admin|user_type|account_type)[=:]["'\'']?\w+' log.txt
3. 無効化後のコメント/操作
実例:
- 動画でコメントが無効化された後もコメントを編集できる
- アカウント停止後も操作を実行できる
- 権限の取り消し後もリソースにアクセスできる
検索パターン:
grep -iE '(edit|update|delete|modify).*comment' log.txt
grep -iE 'action=(edit|delete|update)' log.txt
4. ファイル/リソースのアクセス制御
実例:
- 変換によって非公開ファイルが公開状態になる
- 認可なしで請求書のドキュメントにアクセスできる
- 予測可能な URL で非公開の添付ファイルをダウンロードできる
検索パターン:
grep -iE '(download|file|document|attachment|invoice|receipt)' log.txt
grep -iE '\.(pdf|doc|xlsx?|csv)' log.txt
5. セッション/トークンの脆弱性
確認するパターン:
- Session token in URL (session_id=xxx in query params)
- JWT with weak/no signature (alg: none attack)
- Token doesn't change after password change
- Token valid after logout
- Predictable session tokens
検索パターン:
grep -iE 'session[_-]?(id|token)=' log.txt
grep -oE 'eyJ[a-zA-Z0-9_-]+\.eyJ[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]*' log.txt # JWT
脆弱性のカテゴリと深刻度
| カテゴリ | 深刻度 | 確認する内容 |
|---|---|---|
| 認証なしでの管理者アクセス | CRITICAL | トークンなしで管理者用エンドポイントが 200 を返す |
| パスワードリセットトークンの悪用 | HIGH | 期限切れまたは無効化されないトークン |
| 権限昇格 | HIGH | 変更可能なロールパラメーター |
| セッション固定 | HIGH | URL 内のセッション ID、変更されないトークン |
| 機密性の高いエンドポイントの認証欠如 | HIGH | 認証なしでの個人情報/金融データへのアクセス |
| 認証コンテキストを介した IDOR | MEDIUM | 別のユーザーとして実行される操作 |
| トークンエントロピーの弱さ | MEDIUM | 短い、または予測可能なトークン |
| レスポンス操作を介した認証バイパス | MEDIUM | クライアント側の認証チェック |
テスト方法
ステップ 1:認証フローをマッピングする
# Find login/auth endpoints
grep -iE '(login|signin|authenticate|oauth|token|session)' log.txt
# Find logout endpoints
grep -iE '(logout|signout|revoke)' log.txt
# Find password flows
grep -iE '(password|reset|forgot|recover|change)' log.txt
ステップ 2:トークン構造を分析する
# Extract bearer tokens
grep -oE 'Bearer [a-zA-Z0-9._-]+' log.txt | sort -u
# Extract cookies
grep -oE 'Cookie:.*' log.txt | head -20
# Check for JWT
grep -oE 'eyJ[a-zA-Z0-9_-]+\.eyJ[a-zA-Z0-9_-]+' log.txt
ステップ 3:トークンの有効性をテストする
# Test if token works after logout (replay attack)
curl -H "Authorization: Bearer OLD_TOKEN" "https://target.com/api/profile"
# Test with modified role
curl -X POST "https://target.com/api/update" -d '{"role":"admin"}'
# Test admin endpoint with user token
curl -H "Authorization: Bearer USER_TOKEN" "https://target.com/api/admin/users"
ステップ 4:パスワードリセットフローを確認する
# Test reset token reuse
curl "https://target.com/reset?token=USED_TOKEN"
# Test reset token after email change
# (token from old email should be invalid)
実際の攻撃シナリオ
シナリオ 1:リセットトークンを介したアカウント乗っ取り
1. Attacker requests password reset for victim
2. Victim changes email before using reset link
3. Old reset link still works → Attacker takes over account
シナリオ 2:リクエスト操作を介した権限昇格
1. User captures their profile update request
2. Adds "role": "admin" or "isAdmin": true
3. Server doesn't validate, grants admin access
シナリオ 3:アクションのリプレイを介した BOLA
1. User A creates comment on their post
2. User B captures edit request: POST /edit_comment?id=123
3. User B replays with different comment_id → edits User A's comment
出力形式
## AUTH Finding: [Brief Description]
**Endpoint**: `METHOD https://target.com/path`
**Type**: [Password Reset|Privilege Escalation|Session|Access Control]
**Severity**: [CRITICAL|HIGH|MEDIUM|LOW]
**Vulnerable Flow**:
1. Step one
2. Step two
3. Exploit step
**Evidence**:
[Request/response snippets]
**Impact**:
- Account takeover
- Unauthorized access
- Data exposure
**Test Command**:
curl -X METHOD 'https://target.com/...' -H '...'
**Remediation**:
- Invalidate tokens on sensitive actions
- Server-side role validation
- Rate limit sensitive endpoints
無視する誤検知
- 意図的に認証なしで公開されているエンドポイント
- 読み取り専用の公開データエンドポイント
- ヘルスチェック/ステータスエンドポイント
- 静的アセットのエンドポイント
- 無効なトークンに対して一般的なエラーを返すエンドポイント
コメント
Markdown 対応