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つが挙げられます。
- 一部の HTTP ヘッダは、リバースプロキシや CDN によって生成もしくは変更されるものと想定して、バックエンドの Web サーバがその値を信頼してそのまま受け入れてしまう
- 一部の HTTP ヘッダは、CDN による無害化が行われずに Web サーバに送信される
細工された HTTP ヘッダを含む HTTP リクエストを処理することで、CDN のキャッシュが汚染され、Web サイト閲覧者に悪意あるコンテンツが配信される可能性があります。
CDN における対策
- バックエンドの Web サーバへ HTTP リクエストを転送する前に、HTTP ヘッダに対して適切な検証処理および無害化処理を行う
- CDN が生成したり検証したりすると期待されている一部の HTTP ヘッダが外部からの HTTP リクエストに含まれている場合には、適切な無害化処理を施す
HTTP リクエストに含まれる内容を信頼しない。また、レスポンスには適切かつ安全なエンコーディングを用いる
CDN における回避策
悪意あるコンテンツの配信を防ぐため、HTTP リクエストのヘッダに不審な内容が含まれていたらキャッシュしない
Web サーバにおける回避策
悪意あるコンテンツの配信を防ぐため、動的に生成したコンテンツが CDN にキャッシュされないよう、Cache-Control や Expiry ヘッダなどを活用して、CDN にキャッシュされることを防ぐ
ベンダ | リンク |
Akamai Technologies, Inc. | Vendor Information of Akamai for VU#335217 |
HTTP CACHE POISONING ADVISORY | |
Amazon | Vendor Information of Amazon for VU#335217 |
Cloudflare | Vendor Information of Cloudflare for VU#335217 |
Cloudflare response to CPDoS exploits |
-
CERT/CC Vulnerability Note VU#335217
Multiple caching service providers are vulnerable to HTTP cache poisoning -
15KB Of Fame
HTTP Cache Poisoning via Host Header Injection -
Skeleton Scribe
Practical HTTP Host header attacks -
PortSwigger Research
Practical Web Cache Poisoning -
Host of Troubles
Host of Troubles Vulnerabilities -
OWASP Periodic Table of Vulnerabilities - HTTP Request/Response Smuggling
HTTP Request/Response Smuggling -
OWASP Cheat Sheet Series
Cross Site Scripting Prevention -
Host of Troubles: Multiple Host Ambiguities in HTTP Implementations
The ACM Digital Library
攻撃元区分(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) |
攻撃元区分(AV) | ローカル (L) | 隣接 (A) | ネットワーク (N) |
---|---|---|---|
攻撃条件の複雑さ(AC) | 高 (H) | 中 (M) | 低 (L) |
攻撃前の認証要否(Au) | 複数 (M) | 単一 (S) | 不要 (N) |
機密性への影響(C) | なし (N) | 部分的 (P) | 全面的 (C) |
完全性への影響(I) | なし (N) | 部分的 (P) | 全面的 (C) |
可用性への影響(A) | なし (N) | 部分的 (P) | 全面的 (C) |
- 2020/01/31
- タイトル、概要、詳細情報、想定される影響、対策方法を更新しました。ベンダ情報を追加しました。
- 2020/02/06
- 詳細情報で例示したヘッダ名の誤記を修正しました。