Shikata Ga Nai

Private? There is no such things.

APIでサポートされているHTTPメソッドの特定 – 攻撃対象の拡大

Hello there, ('ω')ノ

APIエンドポイントがどのHTTPメソッドをサポートしているかを調査することは、攻撃対象(アタックサーフェス)を広げる重要な手法です。特定のエンドポイントに対して、予期しないHTTPメソッドが許可されていると、不正アクセスやデータ改ざんのリスクが生じる可能性があります。


1. HTTPメソッドの基本

APIでは、リソースに対してさまざまなHTTPメソッドを使用できます。代表的なものを以下に示します。

メソッド 説明 セキュリティ上のリスク
GET データを取得する 機密情報がURLに露出する可能性
POST データを作成する 入力検証が不十分だと不正データが登録される
PUT リソースを置き換える 本来変更できないはずのデータを改ざんできる可能性
PATCH リソースを部分更新する 権限チェックが甘いと権限昇格のリスク
DELETE リソースを削除する 予期しないデータ損失
OPTIONS 利用可能なメソッドを取得する APIの情報が漏洩する可能性
HEAD ヘッダーのみを取得する レスポンスサイズから推測攻撃が可能

2. HTTPメソッドの探索方法

(1) Burp SuiteのIntruderを使った総当たりテスト

Burp Suiteの Intruder を利用すると、指定したエンドポイントに対して 複数のHTTPメソッドを試すことが可能 です。

手順:
1. Burp Suiteの Proxy > HTTP history で対象のAPIリクエストを選択。
2. 右クリック → "Send to Intruder" を選択。
3. Attack type を "Sniper" に設定
4. リクエストの "METHOD" を変数(§GET§ など)として設定
5. BurpのデフォルトのHTTPメソッドリストを使用(GET, POST, PUT, DELETE, PATCH, OPTIONS など)。
6. 攻撃を開始し、各メソッドに対するレスポンスの違いを確認

想定外のメソッドが有効になっている場合、そのエンドポイントが攻撃可能か検討する

(2) OPTIONSメソッドを使って許可されているメソッドを取得

OPTIONS メソッドを使うと、APIがどのメソッドを許可しているかを確認できます。

OPTIONS /api/tasks HTTP/1.1
Host: example.com

期待されるレスポンス(許可されているメソッドの一覧)

HTTP/1.1 200 OK
Allow: GET, POST, PUT, DELETE

もしDELETEが許可されていたら、不正なデータ削除の可能性がある

(3) 予期しないメソッドが動作するか手動でテスト

  • POST /api/users/1 → ユーザー情報の書き換えが可能か?
  • DELETE /api/orders/999 → 他人の注文を削除できるか?
  • PATCH /api/admin → 権限昇格のリスクはないか?

3. HTTPメソッドをテストする際の注意点

まずは低リスクなエンドポイントで試す
- いきなり重要なリソース(ユーザーアカウント、支払いデータなど)を変更せず、テスト用のエンドポイントを狙う。

エラーメッセージを分析する
- 405 Method Not Allowed → メソッドが制限されている(ただしバイパスできる可能性あり)。
- 403 Forbidden → 権限が必要な可能性あり(認証情報を変えて試す価値あり)。
- 200 OK → 予期しない動作が可能かもしれない!

レスポンスの違いを詳細に比較する
- PUTDELETE の動作を試した後、実際にデータが変更されているかを確認する。
- レスポンスの長さ(Content-Length)やエラーメッセージを見て、システムの挙動を分析する。


4. まとめ

APIがサポートするHTTPメソッドを特定することで、新たな攻撃ベクターを発見できる
Burp Intruderで複数のメソッドを自動テストし、動作するものを探す
OPTIONSメソッドを利用して、許可されているメソッドを取得
意図しないHTTPメソッドが許可されている場合、データ改ざんや不正削除の可能性がある

HTTPメソッドのテストは、APIの脆弱性を探るための基本的なアプローチです。特に、DELETEが許可されている場合や、PATCH/PUTで制限なしにデータ変更が可能な場合は、重大なセキュリティリスク となるため、慎重に調査しましょう。

Best regrads, (^^ゞ