WebGL の脆弱性について

no extension

先月の話になるが, WebGL の脆弱性が公開された。

US-CERT でも警告を発している。

“US-CERT is aware of reports indicating that WebGL contains multiple significant security issues. The impact of these issues includes arbitrary code execution, denial of service, and cross-domain attacks. WebGL is a new web standard that is enabled by default in Firefox 4 and Google Chrome and is included in Safari.
US-CERT encourages users and administrators to review the Context report and update their systems as necessary to help mitigate the risks.”
(via WebGL Security Risks

WebGL というのは 3D のグラフィック表現をブラウザ上で可能にするための標準技術で, HTML5 の canvas 要素内で動作する。 今回懸念されている問題は大きく3つある。

  • 任意のコードの実行(arbitrary code execution)
  • サービス拒否(denial of service; DoS)
  • クロスドメイン攻撃(cross-domain attacks)

このうちサービス拒否とクロスドメイン攻撃については,報告を行った Context Information Security 社で実証コードがあるということらしい。 これらの問題が厄介なのは WebGL の仕様上の欠陥を含んでいる点だ。

これに対し,WebGL の管理団体である Khronos Group は

「WebGLの管理団体Khronos Groupはこの問題について、DoSなどの攻撃についてはOpenGL規格の拡張機能「GL_ARB_robustness」で対応済みだと説明した。 この拡張機能は一部のGPUベンダーに採用されているが、他社にも採用が広がることを期待するとしている。 WebブラウザではWebGLコンテンツを有効にする前にGL_ARB_robustness拡張の存在をチェックすることができ、近いうちにWebGLでもこれが実装モードになる見通しだとした。
 クロスドメイン問題については、「Cross Origin Resource Sharing」(CORS)を選択できるようにするなど、悪用を防ぐ仕組みについてWebGL作業部会で検討すると表明した。」
(via 3D表示規格の「WebGL」に深刻なセキュリティ問題、主要ブラウザに影響

また WebGL を実装している Mozilla Firefox は 6/21 にも公開予定の Firefox 5 でこの問題に対処するとしている(6/19 現在では Firefox 5 のリリース候補版が公開中)。

「Mozilla ではこの問題を認識しており、6 月 21 日公開予定の次期バージョン Firefox 5 で修正を行います。 これは Firefox 固有の実装問題であり、WebGL 仕様の問題ではありません。Firefox 5 が公開されるまでの間、ユーザは Firefox 5 のリリース候補版 を利用するか、WebGL 機能を一時的に無効化することで、自分自身の身を守ることができます。」
(via WebGL グラフィックスのメモリ漏えい問題

引用のとおり Mozilla プロジェクトではこれを「Firefox 固有の実装問題であり、WebGL 仕様の問題ではありません」としているが,実際には Mozilla プロジェクトで把握している問題点は「ユーザの個人情報や機密情報のスクリーンショットを、攻撃者がキャプチャできてしまいます」(=クロスドメイン攻撃)のみのように見える。 他の DoS 等についてどのように認識しているかは分からない。

一方,自社のブラウザに WebGL を実装していない Microsoft では, WebGL をセキュリティ的に有害な技術だと非難している。

「Microsoftは、5月にContext Information Security社が発表した2つの報告書を調査した。 これは、WebGLに重大な脆弱性があることを指摘したもので、調査の結果としては、WebGLをブラウザーがサポートすることにより、ハードウエアの機能が直接ウェブの危険にさらされることになり、特権昇格で済むレベルの攻撃がリモートコード実行にまで至る可能性があると指摘している。
 また安全性を保証するには、サードパーティーのドライバーなどに依存せざるを得ないが、ドライバーは年に一度程度しかアップデートされないことが多く、セキュリティアップデートのスピードに追いつくことができないとも指摘。 また、これらの脆弱性により、DoS攻撃の脅威にさらされるともしている。」
(via 米Microsoft、3D技術のWebGLは「セキュリティ的に有害な技術」と懸念を表明

Mozilla プロジェクトと Microsoft の主張が噛み合っていない(ように見える)のは, Mozilla プロジェクトがクロスドメイン攻撃を指して「Firefox 固有の実装問題」としているのに対し, Microsoft は任意のコードの実行や DoS を特に問題視している点にある。 Context report もどちらかというと Microsoft 寄りの立場で,

「高性能な3DコンテンツがWeb上で利用可能になることについては、一定の需要があるでしょうが、WebGLは、十分に安全にサポートするために必要なインフラクトラクチャを、十分考慮していないかたちで規定されています。 セキュリティ問題を緩和する方法の開発として、検証レイヤーの導入とドライバ ブラックリストは有効であると分かっています。 しかしながら、これはWebGLを安全にする責務を、ハードウェア製造者に押しつけています。 おそらく最適解は、これらを考慮に入れた上で、3Dグラフィックスの仕様をゼロから作り上げることでしょう。」
(via WebGLの(実質的に)仕様上の脆弱性について(日本語訳)

と結んでいる。

Context report が言うように全面的に仕様を見直したほうがいいのか, WebGL の部分的な修正で済むのか分からないが,小手先の部分最適化はしばしば将来に禍根を残す。 ここは徹底的に議論して本当に最適な解を探っていただきたいところである。

WebGL を実装しているサイトはまだ多くない(つか,ほとんどない?)と思うのだが,とりあえず懸念がなくなるまで WebGL を無効にしておきたい人は以下の操作で WebGL を無効にできる。

Firefox の場合:
about:config の webgl.disabled を true にする。
Chrome の場合:
起動オプションに --disable-webgl をつける。

Opera は正式版では WebGL は実装されてない(のかな?)。 Safari は 9 で WebGL が実装されているそうだが,これは開発版かな?

ところで Google Chrome はこの件について反応がないように思えるがどうなってるんだろう。 ただ,この件とは関係ないが, Google は

「HTTPSを使って通信を暗号化しているWebページが、スクリプトやCSS、プラグインリソースなどを安全ではないHTTPを介して読み込むことにより発生する状態を「スクリプト混合の脆弱性」と定義」
(via Google Chromeの開発者版で「スクリプト混合の脆弱性」をブロック

し, Chrome の開発バージョンからスクリプト混合を排除する措置をとるようなので,ついでにこっちも(クロスドメイン攻撃については)対応してくれないかなぁ,と期待するのだがどうだろう。