「キャッシュキーインジェクション」と呼ばれる新たなキャッシュポイズニング手法が公表されました。この手法を使えば、攻撃者はアクセス制御を回避し、キャッシュされた機密コンテンツを露出させ、サービス拒否(DoS)状態を引き起こし、さらには脆弱なNginx環境に永続的なクロスサイトスクリプティング(XSS)ペイロードを仕込める可能性があります。
この研究はYesWeHackの研究者Alex Brumen氏によって発表されたもので、キー化されていないHTTP入力に関する従来型のWebキャッシュポイズニングの脆弱性とは視点が異なります。
今回の手法が狙うのは、キャッシュキーそのものの構築方法です。特に、可変長のリクエスト構成要素を区切り文字なしで連結している設定が標的となります。
危険なのは、生成される文字列がハッシュ化されていないことではありません。問題は、隣接する値同士が曖昧な形で結合されてしまう点にあります。
YesWeHackによると、URLパスやAcceptヘッダーなど攻撃者が操作可能なフラグメント間で文字をずらすことで、まったく異なる2つのリクエストから同一の最終キーを生成できるとのことです。
例えば、Accept: */*を伴う/への正規リクエストは、キーの残りの構成要素次第では、Accept: /*を伴う/*へのリクエストと同一の最終キーを生成し得ます。
後者のリクエストによってNginxが攻撃者の意図した応答をキャッシュしてしまった場合、その後正規のリソースへアクセスしたユーザーが、汚染されたコンテンツを受け取ってしまう恐れがあります。
この手法は、保護されたアプリケーションのルートの前段にグローバルな共有キャッシュが置かれている場合に、深刻な影響を及ぼしかねません。概念実証(PoC)では、管理者がlocalhostからのみ許可される/adminへリクエストを送ると、そのレスポンスがまずキャッシュされます。外部の攻撃者はNginxのアクセス制御リストによってブロックされるため、/adminへ直接リクエストを送ることはできません。
しかし攻撃者は、許可されている別のパスへリクエストを送りつつ、保護されたルートの不足部分を隣接するキャッシュキー構成要素に紛れ込ませることが可能です。
この細工されたリクエストが、以前キャッシュされた/adminのレスポンスと衝突すれば、Nginxは元の保護対象ルートに対するアクセス制限を評価することなく、制限付きダッシュボードをキャッシュから配信してしまう可能性があります。これにより、被害者側の操作を一切必要としない「Webキャッシュ詐称(Web Cache Deception)」の状況が生まれます。
研究者らはまた、キャッシュポイズニングによるサービス拒否(CPDoS)の実証にも成功しています。攻撃者は、存在しないパスへのリクエストを、/homeのような正規ページのキャッシュキーと衝突させることが可能です。
Nginxがその結果生じた404レスポンスを保存してしまうと、有効期限切れやパージが行われるまでの間、通常の訪問者は本来のリソースの代わりにキャッシュされたエラーページを受け取ることになります。さらに複雑なバリエーションとして、$scheme$host$request_uriパターンを悪用する手法もあります。
アプリケーションが改ざんされたHostヘッダーを受け入れ、HTTPとHTTPSで同等のコンテンツを配信し、なおかつホスト名をキャッシュ可能なスクリプトソースへ反映させている場合、攻撃者はHTTPとHTTPSのキャッシュエントリ間で衝突を発生させられる可能性があります。
この場合、汚染されたレスポンスが攻撃者の制御下にあるJavaScriptを参照するようになり、問題は永続的XSSへと発展しかねません。
各組織は、カスタムのNginx proxy_cache_keyディレクティブを見直し、明確な境界を設けずに可変長の生の値を連結する設定は避けるべきです。
区切り文字の追加や構造化されたエンコードの利用により、各構成要素の識別性を保つことができます。例えば"$scheme|$host|$request_uri|$http_accept"のようにすれば、隣接するフラグメント間の曖昧さを排除できます。
防御側はさらに、認証済みまたはアクセス制御対象のレスポンスがキャッシュされないようにし、Hostヘッダーを厳格に検証し、HTTPからHTTPSへのリダイレクトを行い、CDNとオリジンキャッシュの挙動に一貫性を持たせる必要があります。
この研究ではさらに、一部の設定においてCloudflareのエッジキャッシュがAuthorizationヘッダーによって回避可能であり、攻撃者が下流のNginxオリジンキャッシュを直接狙える可能性があると警告しています。
16,000以上のSOCチームがANY.RUNを活用し、脅威調査の効率化と手作業の削減を実現しています。貴社のチームでもぜひご検討ください
翻訳元: https://cyberpress.org/new-cache-key-injection-attack/