脆弱性の発見者:NicolaiGrødum(Cisco)
Talos は本日(9 月 6 日)、Microsoft Edge や Google Chrome の旧バージョン(CVE-2017-5033)、および Webkit をベースにしたブラウザ(Apple Safari(CVE-2017-2419)など)で発見された脆弱性の詳細を公開します。脆弱性がエクスプロイトされると、サーバによって設定されたコンテンツ セキュリティ ポリシーがバイパスされ、秘密情報が漏洩する危険性があります。この問題について、Microsoft 社では Microsoft Edge の仕様であるとして、問題の修正を拒否しています。
概要
Web アプリケーションにおける基本的なセキュリティ メカニズムの 1 つは、「同一生成元ポリシー」です。この中では、アクセス可能リソースをアプリケーション コードごとに制限しています。つまり、アクセス可能な Web リソースを、アクセスするデータと同じサーバから発生したコードに機械的に制限しています。
たとえば、サーバ good.example.com から生成されたスクリプトを Web ブラウザ内で実行する場合、同じ源泉(good.example.com)から来たコンテンツにはアクセスできますが、異なる源泉から来たコンテンツ(例:evil.example.com)へのアクセスは制限されます。
しかし、Web アプリケーションで同一生成元ポリシーをバイパスできる脆弱性がこれまでに多数発見されています。特に成功した攻撃手法の 1 つは、クロスサイト スクリプティング(XSS)攻撃です。XSS 攻撃では、ブラウザ内で同一生成元コードを実行している場合にリモート コードが注入されてしまいます。ブラウザにとって、XSS により注入されたコードは源泉が同じ正当なアプリケーションとして映るため、ローカル リソースへのアクセスを許す可能性があります。これにより、秘密データの漏洩や、アプリケーション セッションのハイジャックが引き起こされる危険性があります。
コンテンツ セキュリティ ポリシー(CSP)は XSS 攻撃を防ぐためのメカニズムです。この中では、クライアントサイドの Web アプリケーション コードで正当な源泉として使用されるサーバをホワイトリストに登録します。シスコの研究者は、コンテンツ セキュリティ ポリシーがエクスプロイト(バイパス)され、秘密データが漏洩する危険性のある脆弱性を発見しました。
技術的な詳細:Talos-2017-0306(CVE-2017-2419、CVE-2017-5033)
CSP は「Content-Security-Policy」の HTTP ヘッダーにより定義されます。この HTTP ヘッダーにより源泉のホワイトリストを作成し、ポリシーが許可した源泉からのみリソースを実行するようブラウザに指示します。仮に攻撃者が悪質なスクリプト(<script> タグに挟まれたリモート スクリプト ソース)を挿入し、XSS 攻撃を成功させたとしても、リモート送信元がホワイトリストと一致しないため、ブラウザ上でスクリプトを実行できません。
「Content-Security-Policy」の HTTP ヘッダーは、スクリプト コードに対して CSP を設定する script-src ディレクティブを定義します。例えば、
Content-Security-Policy: script-src 'self' https://good.example.com
の 1 行を追加することで、ブラウザが現在訪れているサーバに加えて、別のサーバ(good.example.com)からもスクリプトを読み込めるようになります。
ただし、Microsoft Edge(現バージョン 40.15063 では未修正)、Google Chrome(修正済み)および Safari(修正済み)には情報漏洩の脆弱性が存在します。この脆弱性により、Content-Security-Policy ヘッダーで指定されたポリシーがバイパスされ、情報が漏えいする危険性があります。
エクスプロイトの手口は、主に次の 3 段階によって起こります。まず、unsafe-inline ディレクティブを介してブラウザの Content-Security-Policy を設定し、インライン スクリプト コードを許可します。次に、window.open() を使用して新しい空白ウィンドウを開きます。最後に、document.write 関数を呼び出して空白ウィンドウのオブジェクトにコードを書き込み、ドキュメントの CSP 制限をバイパスします。
Microsoft Edge や、旧バージョンの Google Chrome/Firefox が影響を受ける理由は、空白(about:blank)ページの源泉が読み込まれたドキュメントと同一になる一方で CSP による制限が取り除かれるためです。
脆弱性の詳細については、TALOS の脆弱性レポート TALOS-2017-0306を参照してください。
ディスカッション
リモート コードを起動してブラウザのサンドボックスをバイパスし、システムが支配される脆弱性と比べれば、今回の情報漏えいの脆弱性は深刻性が低いと思うかもしれません。
しかし XSS 攻撃は深刻な問題であり、秘密データの漏洩や、ユーザ アカウントの乗っ取りにつながる危険性すらあります。コンテンツ セキュリティ ポリシーは XSS 対策を念頭に置いて設計されており、Web ブラウザ上で安全に実行できる(信頼できる)リソースをサーバ上でホワイトリストに登録できる仕組みです。
多くの開発者は CSP を使用することで XSS などの攻撃から保護しており、こうした経由もあってブラウザが CSP をサポートすることは不可欠です。しかし CSP の実装方法は Web ブラウザ間で異なるため、ブラウザ固有のスクリプトによりコンテンツ セキュリティ ポリシーがバイパスされる可能性があります。
そのため、ブラウザを選択する際は、コンテンツ セキュリティ ポリシーを完全にサポートしており、かつ(今回紹介した情報開示の脆弱性も含めて)新たに発見された脆弱性をすべて修正した製品を選ぶようお勧めします。
該当バージョン
Microsoft Edge(現バージョン 40.15063 では未修正)
Google Chrome バージョン 57.0.2987.98 以前 -(CVE-2017-5033)
iOS バージョン 10.3 以前 -(CVE-2017-2419)
Apple Safari バージョン 10.1 以前 -(CVE-2017-2419)
カバレッジ
この悪意ある試行は、以下の Snort ルールにより検出可能です。今後、脆弱性に関する新たな情報が追加されるまでの間は、ルールが追加されたり、現行のルールが変更されたりする場合がありますのでご注意ください。最新のルールの詳細については、FireSIGHT Management Center または Snort.org を参照してください。
Snort ルール:42112
本稿は 2017年9月6日に Talos Group のブログに投稿された「Vulnerability Spotlight: Content Security Policy bypass in Microsoft Edge, Google Chrome and Apple Safari」の抄訳です。