【活用ガイド】

JVNDB-2020-001007

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

概要

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

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

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

Host ヘッダや X-Forwarded-Host ヘッダ等を使用した攻撃手法がすでに知られていますが、近年、X-Forwarded-Proto や Referer、Upgrade-Insecure-Request、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 サーバに送信される
CVSS による深刻度 (CVSS とは?)

CVSS v3 による深刻度
基本値: 7.2 (重要) [JPCERT/CC値]
  • 攻撃元区分: ネットワーク
  • 攻撃条件の複雑さ: 低
  • 攻撃に必要な特権レベル: 不要
  • 利用者の関与: 不要
  • 影響の想定範囲: 変更あり
  • 機密性への影響(C): 低
  • 完全性への影響(I): 低
  • 可用性への影響(A): なし
CVSS v2 による深刻度
基本値: 5.8 (警告) [JPCERT/CC値]
  • 攻撃元区分: ネットワーク
  • 攻撃条件の複雑さ: 中
  • 攻撃前の認証要否: 不要
  • 機密性への影響(C): 部分的
  • 完全性への影響(I): 部分的
  • 可用性への影響(A): なし
影響を受けるシステム

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

Cloudflare, Inc
  • (複数の製品)

想定される影響

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

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

[Web サーバにおける対策]
HTTP リクエストに含まれる内容を信頼しない。また、レスポンスには適切かつ安全なエンコーディングを用いる

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

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

Cloudflare, Inc アカマイテクノロジーズ
CWEによる脆弱性タイプ一覧  CWEとは?

共通脆弱性識別子(CVE)  CVEとは?

参考情報

  1. JVN : JVNVU#98141012
  2. US-CERT Vulnerability Note : VU#335217
  3. US-CERT Vulnerability Note : Vendor Information of Amazon for VU#335217
  4. US-CERT Vulnerability Note : Vendor Information of Cloudflare for VU#335217
  5. US-CERT Vulnerability Note : Vendor Information of Akamai for VU#335217
  6. 関連文書 : HTTP Cache Poisoning via Host Header Injection
  7. 関連文書 : Practical HTTP Host header attacks
  8. 関連文書 : Practical Web Cache Poisoning
  9. 関連文書 : Host of Troubles Vulnerabilities
  10. 関連文書 : HTTP Request/Response Smuggling
  11. 関連文書 : Cache Poisoning
  12. 関連文書 : Host of Troubles: Multiple Host Ambiguities in HTTP Implementations
更新履歴

  • [2020年01月16日]
      掲載
  • [2020年06月01日]
      タイトル:内容を更新
      概要:内容を更新
      詳細情報:内容を更新
      想定される影響:内容を更新
      対策方法:内容を更新
      ベンダ情報:Cloudflare (Cloudflare response to CPDoS exploits) を追加 
      ベンダ情報:Akamai Technologies (HTTP CACHE POISONING ADVISORY) を追加
      参考情報:US-CERT Vulnerability Note (Vendor Information of Amazon for VU#335217) を追加
      参考情報:US-CERT Vulnerability Note (Vendor Information of Cloudflare for VU#335217) を追加
      参考情報:US-CERT Vulnerability Note (Vendor Information of Akamai for VU#335217) を追加