Eiji Kitamura氏は先頃、Googleのweb.dev Liveでの講演で、ブラウザがクロスオリジンリソースを処理する方法を規定する新しいCOOPおよびCOEPポリシーを公開した。新しいオープナ (COOP) および組み込み (COEP) ポリシーは、以前は無効にされていた強力な機能 (SharedArrayMemoryBufferなど) を復元しながら、Spectre攻撃から保護するクロスオリジン分離環境をセットアップする。
Kitamura氏は新しいポリシーの背景にある動機を述べた:
一部のWebAPIは、Spectreのようなサイドチャネル攻撃のリスクを高めます。そのリスクを軽減するために、ブラウザはクロスオリジン分離と呼ばれるオプトインベースの分離環境を提供します。クロスオリジンの分離状態では、Webページは次のような特権機能を使用できます:
SharedArrayBuffer
(WebAssembly Threadsが必要)performance.measureMemory()
- JS Self-Profiling API
したがって、新しいポリシーにより、開発者は、Spectreに照らして、実際上2018年の初めに無効にされたスレッド間の共有メモリと高分解能な計時タイマを使用できる。
トップレベルのドキュメントの場合、開発者は2つのヘッダーを設定して、サイトをクロスオリジンで分離し、前述の特権機能を有効にする必要がある:
Cross-Origin-Opener-Policy (COOP)
に値としてsame-origin
(攻撃からオリジンを保護する)Cross-Origin-Embedder-Policy (COEP)
に値としてrequire-corp
(犠牲者をオリジンから保護する)
crossOriginIsolatedプロパティは、window
スコープとworker
スコープで使用できる (現在、Firefoxでのみ実装されている) :
if (crossOriginIsolated) {
// Post SharedArrayBuffer
} else {
// Do something else
}
新しいポリシーはChromeおよびFirefoxデスクトップブラウザで使用できるが、Safariではワーカ間の共有メモリは当分の間無効化が継続されるだろう。
COOPを使用すると、トップレベルのドキュメントで、ウィンドウとブラウジングコンテキストグループ内の他のドキュメントとの間の関連付け (ポップアップとオープナの間など) を解除できる。そうすることで、異なるブラウジングコンテキストのウィンドウ間の直接DOMアクセスが防止される。
すべてのトップレベルナビゲーションで、ブラウザは、ナビゲーションを開始したドキュメント (リンクをたどるかポップアップを開くことによって) とナビゲーションのターゲットの間でCross-Origin-Opener-Policy
ヘッダの値を比較する。少なくとも1つのドキュメントがCOOPを設定している場合、ドキュメントのCOOP値が同じでないか、ドキュメントのオリジンが一致しない場合、ブラウザは新しいブラウジングコンテキストグループを作成してドキュメント間のリンクを切断する。これにより、プロセス全体攻撃 (Spectreなど) 、クロスウィンドウ攻撃、およびその他のサイドチャネル攻撃が防止される。
Kitamura氏は述べる:
Cross-Origin-Opener-Policyにsame-originが設定されている場合、ドキュメントから開かれたクロスオリジンウィンドウはオープナのDOMにアクセスできないため、window.openerはnullを返します。
これは、ドキュメントがクロスオリジンウィンドウからの分離を実現する方法です。
COEPは、適切なCORPまたはCORSヘッダーを設定することにより、ドキュメントがロード許可を明示的に付与するリソースのみをロードできるようにする。COEP要求をiframeに設定すると、リソースの読み込み制限がすべての子孫コンテキストに再帰的に伝播される。
(出典: web.dev)
新しいクロスオリジンポリシーオプションが徐々に採用されるにつれ、Kitamura氏はCDN所有者に、サーバにCORPをより大規模にデプロイし、CORPの説明にリンクするように促した:
時間の経過とともに、ブラウザはページにクロスオリジン分離をオプトインすることを要求し始めます […]。これを念頭に置いて、
Cross-Origin-Embedder-Policy
の使用は時間の経過とともに増加する可能性が高いため、サーバーを構成する際にはCross-Origin-Resource-Policy
を考慮することが重要になります。
Kitamura氏はさらに、新しいCOEPおよびCOOPポリシーと既存のポリシー (CORS、CORPなど) との関連について説明する。オンラインで利用可能なフルトークには、クロスオリジン分離に関連する動機と動作についての豊富な説明とイラストが含まれている。
web.dev LIVEは、Googleが主催する3日間のオンラインコミュニティイベントで、ウェブ開発の現状に取り組んでいる。イベントの2020年版は6月末に開催された。記録されたすべてのセッションはすでに利用可能である。