Shikata Ga Nai

Private? There is no such things.

HTTP Request Smuggling(リクエストスマグリング)診断マニュアル

Hello there, ('ω')ノ

🎯 1. HTTPリクエストスマグリングとは?

HTTP Request Smuggling(リクエストスマグリング)とは、 複数のサーバ(リバースプロキシとアプリケーションサーバなど)がHTTPリクエストを異なる解釈で処理することを悪用し、 不正なリクエストをすり抜けさせる攻撃手法です。

主に次のような構成で発生: [クライアント] → [リバースプロキシ] → [Webアプリ]


🧨 2. 攻撃で可能になること

攻撃例 内容
🔐 セッションの乗っ取り 他ユーザのリクエストに割り込む
🛑 リクエスト偽造(内向き攻撃) 管理者リソースへのアクセス
🕵️‍♂️ キャッシュポイズニング プロキシのキャッシュを操作し全ユーザに影響
⏱️ DoS攻撃 パイプライン処理が壊れてリクエスト停止

🧭 3. 対象となる構成・条件

要素 説明
リバースプロキシ(例:Apache, Nginx) フロントエンド
アプリケーションサーバ(例:Tomcat, IIS, Node.js) バックエンド
両者でリクエストの解釈が異なる場合に発生
Transfer-EncodingContent-Length が両方使われているときが狙い目

🛠️ 4. 診断手順(基本)

Step 1️⃣:リクエストをBurpなどで観察

POST リクエストを中心に、ヘッダに Content-LengthTransfer-Encoding が使われているか確認

Step 2️⃣:ヘッダをクラフトしてテスト

→ 複数の解釈をさせるために、意図的に不整合なヘッダを送る


🧪 5. 基本的な攻撃パターン

▶️ 「CL.TE」パターン(Content-Length優先 → Transfer-Encoding誤解釈)

POST / HTTP/1.1
Host: vulnerable.site
Content-Length: 44
Transfer-Encoding: chunked

0

GET /admin HTTP/1.1
Host: vulnerable.site

→ プロキシは Content-Length を使い、後ろの GET /admin を次のリクエストとして送信 → バックエンドは Transfer-Encoding: chunked を解釈し、リクエストを“ねじ込まれる”


▶️ 「TE.CL」パターン(Transfer-Encoding優先 → Content-Length誤解釈)

POST / HTTP/1.1
Host: vulnerable.site
Transfer-Encoding: chunked
Content-Length: 6

3
abc
0

GET /admin HTTP/1.1
Host: vulnerable.site

→ バックエンドは chunked で切り分け、残りを次のリクエストとして扱う → 割り込まれたリクエストが実行される


🧰 6. 使用ツール

ツール 用途
Burp Suite Professional 自動スキャン・リクエスト分割テスト(最強)
Turbo Intruder(Burp拡張) 精密タイミングテストにも対応
smuggler.py(by James Kettle) CLIで自動スキャン可能

🔍 7. 脆弱性確認のサイン

サイン 内容
レスポンスに他人のデータ セッション汚染の可能性
2つ目のリクエストの結果が返ってくる リクエスト分割成功
レスポンス遅延(タイムベーステスト) サーバが処理を待っている証拠

🔐 8. 防御されているか確認すべきポイント

対策 チェック方法
不正ヘッダを正しく拒否 Transfer-Encoding + Content-Length の併用で 400 が返るか
どちらか一方のヘッダのみ許可 明示的なポリシーがあるか確認
Webサーバとアプリケーションサーバのバージョン 古いものは解釈不一致が起きやすい

✅ 9. チェックリスト(診断者向け)

項目 内容
Content-LengthTransfer-Encoding が併用されているか
レスポンスのタイミングが通常より遅いか
意図的にリクエスト構造を壊しても通るか
バックエンドが異常なリクエストを正常と解釈していないか

📌 見つけやすいヒント

  • リバースプロキシ + バックエンド構成(特にAWS ELB、Cloudflare、Nginx+Node.jsなど)
  • HTTPヘッダに Transfer-Encoding: chunked がある
  • 複数リクエストを1つにまとめると動きが変わる

補足: この脆弱性は特にバグを悪用するための構造理解が求められるため、 最初は Burpの自動診断機能(Professional)を活用し、ペイロード構造を学ぶのがおすすめです。

Best regards, (^^ゞ