参考:https://blog.agektmr.com/2021/11/browser-security.html
CPUの構造そのものに存在するハードウェアレベルの脆弱性である。
その内容は正当な権限がないにもかかわらず、同じプロセスで制御されているメモリ領域の値を推測できるというもので、悪意あるプログラムが任意のメモリ領域にアクセスすることが可能となる。
Webだと、悪意あるJavaScriptをロードするだけで、SOP(Same-Origin Policy)を超えて認証情報や個人情報を盗み見られてしまうことになる。
そのため、Spectreの発見以降、ブラウザではSharedArrayBuffer(※)の廃止やperformance.now()の精度を下げる(高精度のタイマーにより効率的に情報を盗みだされてしまうため)などの施策が採られることになった。
※SharedArrayBufferはブラウザが他のオリジンから完全に切り離された安全な環境である(cross-origin isolated)におけるさまざまな条件をクリアするとまもなく使用できるようになるようだ
セキュリティ対策
Spectre による攻撃を防ぐには、オリジンのリソースが、悪意あるオリジンと同じプロセスに取り込まれる前に止める必要がある。
そのためには、下記のようなHTTPレスポンスヘッダーを使用する。
CORP(Cross-Origin-Resource-Policy)
画像や動画、スクリプトやAPIレスポンスなどに、CORPを付与することで、リソースが意図しないオリジンに読み込まれることを防ぐことができる。
# same-originのみ
Cross-Origin-Resource-Policy: same-origin
# same-site(eTLD+1)のみ
Cross-Origin-Resource-Policy: same-site
# あらゆるオリジンからアクセス可能
Cross-Origin-Resource-Policy: cross-site
X-Frame=Options、Content-Security-Policy(CSP)のframe-ancestors
X-Frame=Optionsヘッダー、あるいはContent-Security-Policy(CSP)のframe-ancestors directiveを追加すると、クロスオリジンのiframeの埋め込みを制御することができる。
X-Frame-Options: DENY
Cross-Orogin-Opener-Policy(COOP)
COOPを使用することで、window.open()を使って開かれたウインドウ間のpostMessage() APIを防止し、ブラウザが同一プロセスに展開することを防ぐことができる。
# 同一オリジンであってもpostMessage() が使用できない
Cross-Origin-Opener-Policy: same-origin
# 同一オリジンのpostMessage() が使用できる
Cross-Origin-Opener-Policy: same-origin-allow-popups
X-Content-Type-Options: nosniff
X-Content-Type-Options: nosniff を使用することで、特定ブラウザの脆弱性として知られているContent-Typeヘッダーで示されたMIME-Typeを自動的に変更しないように制御できる。
これにより、同一ページのプロセスにリソースを読み込む手段として応用されてしまうことを防ぐことができる。
X-Content-Type-Options: nosniff