BurpのScan実行結果に「HTTP request smuggling」なる脆弱性が存在した。初耳なので調べるナッシー!
概要
PHPの一部バージョンでApacheとの接続にApache2hanlerを用いている場合に存在する脆弱性
リクエストヘッダに特定のヘッダを付与すると、レスポンスボディにリクエストボディの文字列が付与されてしまう脆弱性
リクエストボディにscriptタグを記載することで標的に任意のjsを実行させることができる。
脆弱性番号: CVE-2018-17082
詳細
リクエストヘッダに「Transfer-Encoding: chunked」と「Content-Length:${任意の数字}」を付与すると、レスポンスボディにリクエストボディの内容が反射されてしまう。
このリクエストボディにscriptタグを用いてjavascriptを記載することで、任意のjavascriptを標的に実行させることができる。
Transfer-Encoding: chunkedとは?
HTTPでデータのサイズがわからない場合にチャンクとして分割して送ることを示す
Content-Lengthとは?
ボディのバイト長
攻撃手法
この脆弱性がどうやって攻撃に利用されるかよくわからないッシー!
ユーザーが自分でリクエストヘッダを弄る状況が考えられないし、他者にヘッダを強制されるとは思えない
攻撃原理
リクエストボディに相反するTransfer-Encoding: chunkedとContent-Lengthを同時に指定すると、RFCでは「Transfer-Encoding」を優先する事になっているが、実装ミスでそうでないためこの脆弱性が産まれた
ソースコードベースの解説
該当issueを見つけたけど理解不能ナッシー!
対策
主にphpのアップデート
参考リンク
徳丸さんの動画がすごいわかりやすかったナッシー!
https://yamory.io/blog/about-http-request-smuggling/
https://www.youtube.com/watch?v=VUBR1rVAquw
https://wa3.i-3-i.info/word16371.html