BSides Manchester のWeb サイトが乗っ取られて、キャッシュがエクスプロイト配信システムに変わる可能性があります。
Burp Suite を開発している Portswigger の James Kettle 氏は、従来のキャッシュ ポイズニングを超える手法を開発した。
キャッシュは、レイテンシを削減し、アプリケーションサーバーの負荷を軽減することで、ウェブページの読み込み速度を向上させます。Varnishなどのソフトウェアを使用して独自のキャッシュをホストする組織もあれば、Cloudflareなどのコンテンツ配信ネットワークを利用し、地理的に分散したキャッシュを利用する組織もあります。また、人気のコンテンツ管理システムであるDrupalなどの一般的なウェブアプリケーションやフレームワークには、キャッシュが組み込まれています。
Web キャッシュ ポイズニングは、有害な応答を引き起こすリクエストを送信し、そのレスポンスがキャッシュに保存されて他のユーザーに提供されることを目的としています。
ケトル氏の研究は、HTTPヘッダーなどのキーなし入力1を用いてキャッシュをポイズニングする方法に焦点を当てていました。また、リクエストスマグリング[PDF]といった、おそらく効果は低いものの、他にも可能な可能性があるとケトル氏は注意深く指摘しています。
キャッシュポイズニングはそれ自体が目的ではなく、キーなしの入力におけるXSS(クロスサイトスクリプティング)などの二次的な脆弱性を悪用するための手段です。適切に実行されると、キャッシュを介して標的のウェブサイト上の特定のリソースを閲覧しようとするユーザーに対して、任意のJavaScriptを実行するレスポンスを生成するメカニズムが作成されます。
キャッシュポイズニングは「恐ろしい」という評判にもかかわらず、非常に簡単に悪用されることが多い、とケトル氏は、研究者に有利なポリシーを持つウェブサイトだけをターゲットにして攻撃の実験を始めたときに発見した。
ミスター・ロボット
研究者は、Mozillaのインフラに侵入し、悪名高いFirefoxの機能2を部分的に乗っ取ることに成功したと述べた。これは、ハッキングをテーマにした番組『ミスター・ロボット』の宣伝用に設計された、綿密に検討されていないアドオンに関連するものだ。理論上、この手法によってKettleは数百万台のFirefoxブラウザを低容量のボットネットとして利用することが可能だった。
この方法でプッシュできるのは Mozilla によって署名されたコードのみとする制御によって悪意のある行為の可能性はいくらか抑えられているが、それでも問題を引き起こす可能性があったと Kettle 氏は説明した。
「Firefoxが使用するレシピは署名されていたため、悪意のあるアドオンをインストールして完全なコードを実行することはできませんでしたが、数千万人の正規ユーザーを任意のURLに誘導することは可能でした」と彼は述べた。「明らかなDDoS攻撃への利用に加え、メモリ破損の脆弱性と組み合わせれば、極めて深刻な事態となります。」
また、一部のMozillaバックエンドシステムは署名されていないレシピを使用しているため、インフラの奥深くに侵入し、レシピ署名鍵を入手する足掛かりを得る可能性があります。さらに、私が選択した古いレシピを再生することで、脆弱性が判明している古い拡張機能を強制的に大量インストールさせられたり、Mr. Robotが予期せず復活したりする可能性もあります。
Kettle 氏はこの問題を Mozilla に報告し、Mozilla は 24 時間以内にインフラにパッチを適用しましたが、問題の深刻度について意見の相違があったため、この脆弱性に対するバグ報奨金は 1,000 ドルにとどまりました。
研究者は、GitHub 上の上位 20,000 の PHP プロジェクトをダウンロードしてヘッダー名を精査し、ヘッダーの単語リストを拡張した後、別の方向で問題を発見しました。
「これにより、リクエストのパスを上書きするX-Original-URLとX-Rewrite-URLというヘッダーが明らかになりました」とケトル氏は説明した。「最初にこれらのヘッダーがDrupalを実行しているターゲットに影響を与えていることに気付きました。Drupalのコードを詳しく調べたところ、このヘッダーのサポートは人気のPHPフレームワークSymfonyから提供されており、SymfonyのコードはZendから引用されていることがわかりました。」
同氏はさらにこう付け加えた。「最終的には、膨大な数の PHP アプリケーションが、知らないうちにこれらのヘッダーをサポートすることになります。」
ケトル氏によると、これらのヘッダーは「WAFやセキュリティルールを回避するのに最適」であるだけでなく、キャッシュポイズニングの手段にもなりかねない。アプリケーションがキャッシュを使用している場合、これらのヘッダーを悪用することで、アプリケーションを混乱させ、誤ったページを表示させる可能性がある。
争いを通じた団結
ある攻撃(ケトル氏が「ローカルルートポイズニング」と名付けた)では、パスを別のパスに置き換えることができます。このリクエストを送信した後、Unity for Educationのウェブページにアクセスしようとすると、ちょっとした不都合が生じる可能性があります。
Unity for Education がウェブキャッシュポイズニングの亜種によって生まれ変わる
関連するその他のセキュリティ上の欠陥により、ハッカーがクエリ文字列を上書きする手段が生まれます。これがDrupalのオープンリダイレクトと組み合わさることで、ハッカーによる悪用のための「構成要素」が生まれてしまいます。
「パラメータオーバーライド攻撃とオープンリダイレクトを組み合わせることで、あらゆるリダイレクトを永続的にハイジャックできる」とケトル氏は説明し、pinterest.com のページも脆弱なサイトの一つだと付け加えた。
二段階攻撃であるネスト型キャッシュポイズニングも可能でした。「サイトが外部キャッシュを使用している場合(ほぼすべての高トラフィックDrupalサイトがそうであるように)、内部キャッシュを利用して外部キャッシュをポイズニングし、その過程であらゆるレスポンスをリダイレクトに変換することができます」とケトル氏は説明しました。
Kettle が実証したとおり、実際的な結果は、unity.com で「インストーラーをダウンロード」をクリックすると、evil.net から何らかの日和見マルウェアがダウンロードされることになるというものでした。
この脆弱性は5月にDrupal、Symfony、Zendで公開されました。セキュリティアップデートが利用可能になりましたので、インストールしてください。
ケトル氏は木曜日、イギリスのマンチェスターで開催されたBSidesで好評を博したプレゼンテーションの中で、MozillaとDrupalを具体的な例として挙げた。このプレゼンテーションは、米国ラスベガスで開催されたBlack Hatで自身の研究成果を発表した数日後に行われたものだ。他のプロジェクトにもキャッシュの脆弱性があり、それらに対する反応はまちまちだったと、ケトル氏はブログ記事で述べている。
私のターゲットからの反応はまちまちでした。Unity はすべてを迅速に修正して十分な報酬を支払いましたが、Mozilla は少なくとも迅速に修正プログラムを適用しました。一方、data.gov や Ghost などその他の組織は何か月も何もせず、差し迫った公開の脅威を受けて修正プログラムを適用しただけでした。
これらのケーススタディの多くは、キーなし入力におけるXSSなどの二次的な脆弱性を悪用しています。キャッシュポイズニングがなければ、クロスドメインリクエストで他のユーザーにカスタムヘッダーを送信させる確実な方法がないため、このような脆弱性は無意味であることを覚えておくことが重要です。おそらく、それがこれらの脆弱性が簡単に発見できた理由でしょう。
ご興味があれば、Bsides での彼のプレゼンテーションの詳細を説明したビデオをご覧ください。
YouTubeビデオ
自分を守る方法
ケトル氏は、ウェブサイトは脆弱性がないことを確認するためにテストを行うか、潜在的な問題を避けるためにキャッシュの使用を制限する必要があると述べた。
「キャッシュポイズニングに対する最も強力な防御策は、キャッシュを無効にすることです」とケトル氏はアドバイスした。「一部の人にとっては明らかに非現実的なアドバイスかもしれませんが、DDoS攻撃対策や簡易SSLのためにCloudflareのようなサービスを使い始めたウェブサイトが、デフォルトでキャッシュが有効になっているというだけの理由で、キャッシュポイズニングの脆弱性を抱えてしまうケースがかなりあるのではないかと思います。」
「『静的』と定義するものについて十分に注意していれば、キャッシュを純粋に静的な応答に制限することも効果的です」と彼は付け加えた。
ケトル氏は、ウェブサイトの前にキャッシュを置くだけで、ウェブサイトが安全な状態から脆弱な状態に変わってしまう可能性があると警告した。
「ウェブキャッシュポイズニングは理論上の脆弱性とは程遠く、肥大化したアプリケーションと巨大なサーバースタックが共謀して、この脆弱性を一般大衆に広めているのです」とケトル氏は結論づけた。「ウェブキャッシュポイズニングは長らく捉えどころのない脆弱性であり、開発者を脅して、実際には誰も悪用できない問題のパッチを当てさせるために利用されてきた『理論上の』脅威でした。」®
追加更新
Drupal セキュリティ チームの広報担当者は次のように連絡してきました。
ブートノート
1キーなし入力とは、キャッシュが無視するリクエストの一部を指します。例えば、ユーザーが使用しているブラウザの種類などです。オープンソースのBurp Suite拡張機能「Param Miner」は、キーなし入力の識別プロセスを自動化します。
2 Firefoxは、マーケティングや調査目的で拡張機能をサイレントインストールするためのSHIELDシステムの一部として「レシピ」リストを保持していました。この手法を用いて宣伝された製品の一つにMr. Robotがあり、反発を招きました。