CRLF インジェクション
CRLF インジェクション とは何ですか?
CRLF インジェクションHTTP ヘッダ・ログファイル・その他のテキストプロトコルへ CR/LF を注入して新たな行を偽造し、意味を改変する攻撃。
CRLF インジェクションは、多くのテキストベース・プロトコルで行末を示す CR(0x0D)と LF(0x0A)バイト列の特殊な意味を悪用します。アプリケーションが検証されていないユーザ入力を HTTP レスポンスヘッダ、ログ、SMTP コマンド、LDAP クエリへ反映する場合、攻撃者は CRLF と追加コンテンツを挿入してヘッダを偽造する、レスポンスを分割する、ログを隠す、コマンドを密輸するといった攻撃が可能となります。Web では HTTP レスポンス分割が最も危険で、共有キャッシュ汚染、任意 Cookie 設定、レスポンスボディへの XSS 注入につながります。対策にはヘッダに渡る入力からの CR/LF 拒否、自動エスケープを行う上位 API、厳格なログエンコーダの利用などがあります。
● 例
- 01
Set-Cookie: id=foo%0d%0aSet-Cookie: admin=true — CRLF で 2 つ目の Cookie を追加。
- 02
Location: /redir%0d%0aContent-Length:0%0d%0a%0d%0a<html>... — HTTP レスポンス分割。
● よくある質問
CRLF インジェクション とは何ですか?
HTTP ヘッダ・ログファイル・その他のテキストプロトコルへ CR/LF を注入して新たな行を偽造し、意味を改変する攻撃。 サイバーセキュリティの 攻撃と脅威 カテゴリに属します。
CRLF インジェクション とはどういう意味ですか?
HTTP ヘッダ・ログファイル・その他のテキストプロトコルへ CR/LF を注入して新たな行を偽造し、意味を改変する攻撃。
CRLF インジェクション はどのように機能しますか?
CRLF インジェクションは、多くのテキストベース・プロトコルで行末を示す CR(0x0D)と LF(0x0A)バイト列の特殊な意味を悪用します。アプリケーションが検証されていないユーザ入力を HTTP レスポンスヘッダ、ログ、SMTP コマンド、LDAP クエリへ反映する場合、攻撃者は CRLF と追加コンテンツを挿入してヘッダを偽造する、レスポンスを分割する、ログを隠す、コマンドを密輸するといった攻撃が可能となります。Web では HTTP レスポンス分割が最も危険で、共有キャッシュ汚染、任意 Cookie 設定、レスポンスボディへの XSS 注入につながります。対策にはヘッダに渡る入力からの CR/LF 拒否、自動エスケープを行う上位 API、厳格なログエンコーダの利用などがあります。
CRLF インジェクション からどのように防御しますか?
CRLF インジェクション に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
CRLF インジェクション の別名は何ですか?
一般的な別名: 改行コードインジェクション, ログインジェクション。
● 関連用語
- vulnerabilities№ 495
HTTP レスポンス分割
ユーザー入力中の信頼できない CR/LF 文字によって、サーバーが攻撃者の制御する追加 HTTP レスポンスを送出してしまうインジェクション脆弱性。
- vulnerabilities№ 139
キャッシュ汚染
共有キャッシュに悪意あるレスポンスを保存させ、以降の他ユーザーに攻撃者のコンテンツを配信する攻撃。
- attacks№ 240
クロスサイトスクリプティング(XSS)
他のユーザーが閲覧するページに悪意あるスクリプトを注入し、当該サイトのオリジンとして被害者のブラウザで実行させる Web 脆弱性。
- attacks№ 202
コマンドインジェクション
ユーザー入力をサニタイズせずに OS シェルへ渡し、攻撃者が指定したコマンドをアプリケーションに実行させる攻撃。
- appsec№ 538
入力検証
アプリケーションが処理する前に、信頼できないすべての入力が期待する型・長さ・範囲・形式・値集合に合致しているかをサーバー側で確認する処理。
- attacks№ 759
オープンリダイレクト
リクエストパラメータで指定された URL を検証せずユーザーを転送してしまう脆弱性で、フィッシングや認証情報窃取キャンペーンに悪用される。