HTTPレスポンス分割(英:HTTP response splitting、HTTPレスポンススプリッティング)は、ウェブアプリケーションやその実行環境が入力値を適切に無害化(サニタイズ)できないことに起因する、脆弱性の一形態である。この脆弱性は、クロスサイトスクリプティング攻撃、ユーザー間でのページの改ざん、ウェブキャッシュポイズニング、および同様の攻撃を実行するために悪用される可能性がある。共通脆弱性タイプではCWE-113に分類される。
この攻撃は、攻撃者がアプリケーションに送信した入力フィールドに、復帰(CR、ASCII )と改行(LF、ASCII )のシーケンス、およびそれに続く攻撃者が用意したコンテンツを含めることで、サーバーのレスポンスのヘッダーセクションに出力させるというものである。HTTP規格()によれば、各ヘッダーは1つのCRLFで区切られ、レスポンスのヘッダーとボディは2つのCRLFで区切られる。したがって、CRとLFを除去できない場合、攻撃者は任意のヘッダーを設定したり、ボディを制御したり、あるいはレスポンスを2つ以上の別々のレスポンスに分割したりすることが可能になり、これが名称の由来となっている。
対策
一般的な解決策は、LocationやSet-CookieなどのHTTPヘッダーに文字列を含める前に、URLエンコードを行うことである。
サニタイズの典型的な例としては、整数型へのキャストや、強力な正規表現による置換が挙げられる。5.1.2以降のPHP、4.6.0以降のNode.js(以前のバージョンでもサポートされていたが、2016年に保護を回避可能であることが発覚した)、および1.8.4以降のDjangoのようなウェブフレームワークなど、主要なサーバーサイドスクリプト言語やランタイムの多くは、この種の脆弱性に対するHTTPレスポンスのサニタイズをサポートしている。
脚注
外部リンク
Divide and Conquer - HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics. Amit Klein, 2004. HTTP Response Splitting, The Web Application Security Consortium Wapiti Open Source XSS, Header, SQL and LDAP injection scanner LWN article CWE-113: Failure to Sanitize CRLF Sequences in HTTP Headers ('HTTP Response Splitting') HTTP Response Splitting Attack - OWASP CRLF Injection - OWASP