HTTPレスポンス分割
(HTTP response splitting から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2026/02/25 08:44 UTC 版)
| HTTP |
|---|
| 主要項目 |
| リクエストメソッド |
| ヘッダーフィールド |
|
| ステータスコード |
|
| 認証方式 |
| セキュリティホール |
HTTPレスポンス分割(英:HTTP response splitting、HTTPレスポンススプリッティング)は、ウェブアプリケーションやその実行環境が入力値を適切に無害化(サニタイズ)できないことに起因する、脆弱性の一形態である。この脆弱性は、クロスサイトスクリプティング攻撃、ユーザー間でのページの改ざん、ウェブキャッシュポイズニング、および同様の攻撃を実行するために悪用される可能性がある。共通脆弱性タイプではCWE-113に分類される。
この攻撃は、攻撃者がアプリケーションに送信した入力フィールドに、復帰(CR、ASCII 0x0D)と改行(LF、ASCII 0x0A)のシーケンス、およびそれに続く攻撃者が用意したコンテンツを含めることで、サーバーのレスポンスのヘッダーセクションに出力させるというものである。HTTP規格(RFC 2616)によれば、各ヘッダーは1つのCRLFで区切られ、レスポンスのヘッダーとボディは2つのCRLFで区切られる。したがって、CRとLFを除去できない場合、攻撃者は任意のヘッダーを設定したり、ボディを制御したり、あるいはレスポンスを2つ以上の別々のレスポンスに分割したりすることが可能になり、これが名称の由来となっている。
対策
一般的な解決策は、LocationやSet-CookieなどのHTTPヘッダーに文字列を含める前に、URLエンコードを行うことである。
サニタイズの典型的な例としては、整数型へのキャストや、強力な正規表現による置換が挙げられる。5.1.2以降のPHP[1]、4.6.0以降のNode.js(以前のバージョンでもサポートされていたが、2016年に保護を回避可能であることが発覚した)[2]、および1.8.4以降のDjangoのようなウェブフレームワーク[3]など、主要なサーバーサイドスクリプト言語やランタイムの多くは、この種の脆弱性に対するHTTPレスポンスのサニタイズをサポートしている。
脚注
- ^ “PHP: PHP 5.1.2. Release Announcement”. The PHP Group. 2026年2月25日閲覧。
- ^ “CVE-2016-5325 | Snyk Vulnerability Database” (英語). Learn more about debian:9 with Snyk Open Source Vulnerability Database. 2026年2月25日閲覧。
- ^ “CVE-2015-5144 | Snyk Vulnerability Database” (英語). Learn more about pip with Snyk Open Source Vulnerability Database. 2026年2月25日閲覧。
外部リンク
- 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
- HTTPレスポンス分割のページへのリンク