以下の内容はhttps://cysec148.hatenablog.com/entry/2025/09/15/152108より取得しました。


BugBounty解説:初めてのバグ発見 ― HTTPリクエストスマグリング

Hello there, ('ω')ノ

記事

「Finding My First Bug: HTTP Request Smuggling」 AMAN SINGH (2021年1月)


ねらい

この記事は、筆者が初めてバグバウンティで有効なバグを報告し、\$200を獲得した体験談です。 対象はHTTPリクエストスマグリング(HRS)。 自分のリコン作業 → バージョン特定 → 攻撃リクエスト作成 → 内部リソースアクセス成功という流れを丁寧にまとめています。


ストーリーと実践手順

1) リコン:サブドメインを調査

  • 操作:見つけた全てのサブドメインを訪問。
  • 観察:あるサブドメインは 403 Forbidden を返し、レスポンスヘッダーにWebサーバのバージョン情報が露出。
  • なぜ:古いバージョンが使われていれば既知の脆弱性が狙える。

2) Burpのパッシブスキャンでヒントを得る

  • 操作:BurpSuiteのパッシブスキャナがサーババージョンを検出。
  • 観察:該当バージョンはHRSに脆弱と報告される。
  • なぜ:ツールのヒントは攻撃対象を絞り込む材料になる。

3) HRSの原因を確認

  • サーバ構成:Nginxベースの拡張Webサーバ(古いバージョン)。
  • 問題点:フロントとバックエンドで異なるHTTPヘッダ解釈をしていた。

    • フロント:Content-Length を採用
    • バックエンド:Transfer-Encoding を採用
  • なぜ:この不一致がデシンク攻撃を可能にする。

4) 攻撃リクエストを作成

送信リクエスト例:

POST /i HTTP/1.1
Host: ...
Connection: keep-alive
Content-Length: 55
Transfer-Encoding: chunked

0
GET /publicDocs/ HTTP/1.1
Host: ...
foo: x
  • 意図:

    • フロントは「Content-Length: 55」を読み、リクエストが終了していないと判断。
    • バックエンドは「chunkedエンコーディング」を採用し、残りを次のリクエストと解釈。
    • 結果:GET /publicDocs/密輸リクエストとして処理される。

5) 観察された影響

  • 本来403 Forbiddenになるリソースが、200 OKで表示。
  • スタッフ専用ログインページや内部文書が参照可能に。
  • なぜ:HRSによりフロントエンドのアクセス制御をすり抜けたため。

学びと攻撃者の視点

  1. 小さな情報(サーババージョン露出)から突破口を見つける
  2. Burpのアラートはきっかけにすぎない → 自分で検証して有効性を確認することが大事。
  3. HRSは「解釈のズレ」を突く攻撃 → 特に古いリバースプロキシ環境は要注意。

防御策(開発者・運用者目線)

  • 最新バージョンのWebサーバを使用
  • Content-Length と Transfer-Encoding の併用を禁止
  • リバースプロキシとバックエンドのHTTP実装を統一
  • セキュリティテストでリクエストスマグリングを定期チェック

まとめ

攻撃者の流れはこうでした:

  1. サブドメイン調査 → 古いWebサーバを発見
  2. Burpのヒントで HRS脆弱性を疑う
  3. CL + TEヘッダの競合リクエストを送信
  4. 内部ページへの不正アクセス成功
  5. レポート提出で\$200報奨金獲得

つまり、「小さなバージョン情報の漏洩」から大きな突破口を得られるという好例です。

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/09/15/152108より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14