BurpSuiteで検証する
2. POSTメソッドに変更後、Transfer-Encodingヘッダ・ボディ を追記し、パラメータが反映されている事を確認します。
3. Transfer-Encodingヘッダの値 chunkedの前に環境文字を入れます。
(環境文字は参考記事から探して挿入してください。)
4. POSTリクエストの後にGETリクエストを追記し、ヘッダを追加します。
後半のリクエストは別のクライアントに出力される事を考えて影響のないヘッダにします。
5. タブグループを作成します。
左から順に、[先ほどのPOSTリクエスト]→[通常のGETリクエスト] に並べます。
6. Send ボタンのプルダウンメニューから Send group in sequence (single connection) を選択します。
7. 送信すると、2件リクエストが送信されます。
2件目のリクエストでは、リクエストしていないヘッダーがサーバーでは認識されている事が確認できます。
ほか検証方法
今回は追加ヘッダーで検証しましたが、以下の検証方法があります。
- 存在しないメソッドでリクエストする
- URLパラメータを追加する
本番環境で実施すると、他ユーザのレスポンスに影響します。こうした検証は検証用の環境でのみ行うようにしましょう。
対策方法
当脆弱性の対策方法は BurpSuite解説 Client-side desync attacks を参照ください。
参考記事
HAProxy HTTP request smuggling (CVE-2019-18277)
https://nathandavison.com/blog/haproxy-http-request-smuggling
HTTP Desyncを理解するためにラボ環境を構築して実験してみた
https://dev.classmethod.jp/articles/http-request-smuggling-with-haproxy/