公開日:2020/01/15 最終更新日:2020/02/06

JVNVU#98141012
複数の CDN サービスプロバイダに HTTP キャッシュポイズニングの影響を受ける問題

概要

コンテンツデリバリネットワーク (CDN) は、バックエンドに置かれた Web サーバのコンテンツを配信するためのプロキシサーバのネットワークであり、効率的な配信のために、コンテンツを一時的なローカルストレージにキャッシュします。
プロキシサーバやバックエンドの Web サーバによる HTTP ヘッダの処理を悪用し、遠隔から細工した HTTP ヘッダを使用して任意のコンテンツを CDN のキャッシュに注入する攻撃を HTTP キャッシュポイズニングと呼びます。
CDN のキャッシュに悪意あるコンテンツが注入されると、対象の Web サイトへのアクセスに対して悪意あるスクリプトが配信され、閲覧者の環境で実行される可能性があります。

影響を受けるシステム

CDN にホストされている Web コンテンツ

詳細情報

CDN は高可用性、高パフォーマンスのサービスを提供するために、HTTP キャッシングソフトウェアが動作する複数のプロキシサーバからなるネットワークを構成しており、バックエンドに置かれた Web サーバのコンテンツを Web サイト閲覧者(Web クライアント)からネットワーク的に近いプロキシサーバ経由で配信します。この配信処理においては、HTTP リクエストに含まれる HTTP ヘッダを解釈して、プロキシサーバのローカルキャッシュまたはバックエンドの Web サーバから適切なコンテンツを選択し、配信します。

バックエンドにある Web サーバの処理と HTTP キャッシングソフトウェアの処理の組み合わせによっては、細工された HTTP ヘッダを含む HTTP リクエストを送信された場合に、悪意あるコンテンツがレスポンスに混入する可能性があります。
これによって、閲覧者の環境で意図しないスクリプトを実行させる等の攻撃が可能となります。

Host ヘッダや X-Forwarded-Host ヘッダ等を使用した攻撃手法がすでに知られていますが、近年、X-Forwarded-Proto や Referer、Upgrade-Insecure-Requests、X-DNS-Prefetch-Control 等新しい HTTP ヘッダが使用されるようになったことに加え、クラウド CDN サービスが拡大したことにより、よりスケールが大きく、長期的な影響を及ぼす攻撃が可能になっています。

攻撃に用いられる可能性のあるヘッダの例としては以下のようなものがあります:

  • Content-Security-Policy-Report-Only
  • Forwarded
  • Server-Timing
  • Set-Cookie
  • Strict-Transport-Security
  • X-Forwarded-Proto
  • Location
  • Accept-Language
  • Cookie
  • X-Forwarded-For
  • X-Forwarded-Host
  • Referer
  • Max-Forwards

このような攻撃が可能となる状況として、少なくとも以下の2つが挙げられます。
  1. 一部の HTTP ヘッダは、リバースプロキシや CDN によって生成もしくは変更されるものと想定して、バックエンドの Web サーバがその値を信頼してそのまま受け入れてしまう
  2. 一部の HTTP ヘッダは、CDN による無害化が行われずに Web サーバに送信される

想定される影響

細工された HTTP ヘッダを含む HTTP リクエストを処理することで、CDN のキャッシュが汚染され、Web サイト閲覧者に悪意あるコンテンツが配信される可能性があります。

対策方法

CDN における対策

  1. バックエンドの Web サーバへ HTTP リクエストを転送する前に、HTTP ヘッダに対して適切な検証処理および無害化処理を行う
  2. CDN が生成したり検証したりすると期待されている一部の HTTP ヘッダが外部からの HTTP リクエストに含まれている場合には、適切な無害化処理を施す
Web サーバにおける対策
HTTP リクエストに含まれる内容を信頼しない。また、レスポンスには適切かつ安全なエンコーディングを用いる

CDN における回避策
悪意あるコンテンツの配信を防ぐため、HTTP リクエストのヘッダに不審な内容が含まれていたらキャッシュしない

Web サーバにおける回避策
悪意あるコンテンツの配信を防ぐため、動的に生成したコンテンツが CDN にキャッシュされないよう、Cache-Control や Expiry ヘッダなどを活用して、CDN にキャッシュされることを防ぐ

参考情報

  1. CERT/CC Vulnerability Note VU#335217
    Multiple caching service providers are vulnerable to HTTP cache poisoning
  2. 15KB Of Fame
    HTTP Cache Poisoning via Host Header Injection
  3. Skeleton Scribe
    Practical HTTP Host header attacks
  4. PortSwigger Research
    Practical Web Cache Poisoning
  5. Host of Troubles
    Host of Troubles Vulnerabilities
  6. OWASP Periodic Table of Vulnerabilities - HTTP Request/Response Smuggling
    HTTP Request/Response Smuggling
  7. OWASP Cheat Sheet Series
    Cross Site Scripting Prevention
  8. Host of Troubles: Multiple Host Ambiguities in HTTP Implementations
    The ACM Digital Library

JPCERT/CCからの補足情報

JPCERT/CCによる脆弱性分析結果

CVSS v3 CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
基本値: 7.2
攻撃元区分(AV) 物理 (P) ローカル (L) 隣接 (A) ネットワーク (N)
攻撃条件の複雑さ(AC) 高 (H) 低 (L)
必要な特権レベル(PR) 高 (H) 低 (L) 不要 (N)
ユーザ関与レベル(UI) 要 (R) 不要 (N)
スコープ(S) 変更なし (U) 変更あり (C)
機密性への影響(C) なし (N) 低 (L) 高 (H)
完全性への影響(I) なし (N) 低 (L) 高 (H)
可用性への影響(A) なし (N) 低 (L) 高 (H)
CVSS v2 AV:N/AC:M/Au:N/C:P/I:P/A:N
基本値: 5.8
攻撃元区分(AV) ローカル (L) 隣接 (A) ネットワーク (N)
攻撃条件の複雑さ(AC) 高 (H) 中 (M) 低 (L)
攻撃前の認証要否(Au) 複数 (M) 単一 (S) 不要 (N)
機密性への影響(C) なし (N) 部分的 (P) 全面的 (C)
完全性への影響(I) なし (N) 部分的 (P) 全面的 (C)
可用性への影響(A) なし (N) 部分的 (P) 全面的 (C)

謝辞

関連文書

JPCERT 緊急報告
JPCERT REPORT
CERT Advisory
CPNI Advisory
TRnotes
CVE
JVN iPedia

更新履歴

2020/01/31
タイトル、概要、詳細情報、想定される影響、対策方法を更新しました。ベンダ情報を追加しました。
2020/02/06
詳細情報で例示したヘッダ名の誤記を修正しました。