Web Cache Deception 攻撃は、静的アセットを指しているように見える URL へユーザーを誘導します。実際には、オリジンから動的でパーソナライズされたコンテンツが返ります。
この攻撃は、オリジンが存在しないパスへのリクエストを親パスと同じものとして扱うときに成立します。たとえば http://www.example.com/newsfeed が認証済みユーザーごとに異なる内容を返す動的ページで、オリジンが /newsfeed/foo.jpg にも同じ応答を返す場合です。パスが .jpg で終わるため、Cloudflare はデフォルトでその応答をキャッシュします。攻撃者が同じ URL にアクセスすると、ユーザーのパーソナライズされたコンテンツのキャッシュコピーを受け取れます。
キャッシュルールを作成 すると、Web Cache Deception 攻撃からユーザーを守れます。このルールでは静的アセットのキャッシュを続けつつ、URL の拡張子と返された Content-Type が一致するかを確認します。
上記のニュースフィードの例では、http://www.example.com/newsfeed がウェブページを出力するスクリプトなら、Content-Type は text/html です。一方、http://www.example.com/newsfeed/foo.jpg の Content-Type は image/jpeg である想定です。Web Cache Deception 攻撃につながる不一致が見つかった場合、Cloudflare はその応答をキャッシュしません。
- 返された
Content-Typeがapplication/octet-streamの場合、拡張子は問いません。このタイプは通常、ブラウザーに表示ではなく保存を指示する信号だからです。 - Cloudflare は、
.jpgをimage/webpとして、.gifをvideo/webmとして配信するケースなど、攻撃になりにくい組み合わせを許可します。 - Cache Deception Armor は Origin Cache Control に依存します。オリジンからの
Cache-Controlヘッダーや Edge Cache TTL の Cache Rule が、この保護を上書きすることがあります。
Cache Deception Armor を有効にするには、まず キャッシュルール を作成します。次の手順に従ってください。
-
Cloudflare ダッシュボードで Cache Rules ページを開きます。
Cache Rules を開く ↗ -
Create rule を選択します。
-
When incoming requests match で ルール式 を定義します。
-
Then の Cache eligibility で Eligible for cache を選択します。
-
ルールに Cache Key 設定を追加し、Cache deception armor をオンにします。
-
保存してデプロイするには Deploy を選択します。まだデプロイしない場合は Save as Draft を選択します。