Hello there, ('ω')ノ
HTTPリクエスト・スマグリング(HRS)は、フロントエンドとバックエンドの リクエスト解釈の食い違い を突いて「隠れたリクエスト」を密輸する攻撃です。2005年に最初に報告され、2019年には James Kettle(@albinowax)が DEF CON / Black Hat で再び注目させました。
ここでは、攻撃者がどのように脆弱性を検出するか、そして紹介されている Python ツールがどのように動作するのかを、初心者にもわかりやすく解説します。
なぜ時間遅延で検出できるのか?
攻撃者は「フロントとバックでリクエストの終わりをどう解釈するか」を揺さぶります。その結果、サーバーが次のリクエストを待ち続けて応答が遅れることがあります。これが検出のサインです。
代表的な2つの手法
1. CL.TE(Content-Length と Transfer-Encoding の食い違い)
例リクエスト:
POST / HTTP/1.1 Host: vulnerable-website.com Content-Length: 5 Transfer-Encoding: chunked 1 Z Q
- フロントエンド:Content-Length=5 を信じて「Z」まで処理
- バックエンド:chunked を信じて「Q」を待つ
- 結果:バックエンドが「まだ続きが来るはず」と待ち続け、応答が遅れる
2. TE.CL(Transfer-Encoding と Content-Length の食い違い)
例リクエスト:
POST / HTTP/1.1 Host: vulnerable-website.com Content-Length: 6 Transfer-Encoding: chunked 0 G
- フロントエンド:
0チャンクでリクエスト終了と判断 - バックエンド:Content-Length=6 を信じて「G」を待つ
- 結果:バックエンドが追加データを待ってしまい応答遅延
Python 検出ツールの仕組み
作者は PortSwigger の研究を参考に、自動でこれらの矛盾リクエストを送信し、応答時間を測定するツールを作成しました。
特徴
- 37種類のペイロードを組み合わせて試行
- 単一URL / 複数URLに対応
- リトライ機能(--retry)で再送 → 精度向上
- CL.TE / TE.CL 両方に対応した検出ロジック
インストール手順
git clone https://github.com/anshumanpattnaik/http-request-smuggling.git cd http-request-smuggling pip3 install -r requirements.txt
使い方の例
単一URLをスキャン:
python3 smuggle.py -u https://target.com
複数URLをスキャン:
python3 smuggle.py -urls urls.txt
オプション例:
-t TIMEOUT:応答待ち時間(デフォルト10秒)-m METHOD:GET / POST の切り替え(デフォルトPOST)-r RETRY:再送回数(デフォルト2回)
注意点(攻撃者のリスク)
- 許可なく実行するのは違法:検出用でも不正アクセス禁止法に抵触する可能性がある
- バックエンドを「汚染」するリスク:中途半端なペイロードが残ると、正規ユーザーが攻撃用レスポンスを見てしまう
- 時間ベース検出は誤検知あり:本当に脆弱性があるかは Burp Suite の Turbo Intruder などで確認が必要
まとめ:攻撃者の思考プロセス
- 矛盾を生むリクエストを投げる(CL.TE / TE.CL)
- 応答遅延を観察する(ズレの兆候)
- ペイロードを繰り返し試す(精度を上げる)
- 確実性を高めるために手動ツールで再確認
攻撃者は「応答の遅さ」を弱点発見の指標にします。つまり、防御側もログや遅延を監視すれば、攻撃の兆候を早期に検知できるのです。
Best regards, (^^ゞ