
CVE-2026-74970 · Firefox WebRender における Fission サイト分離バイパス
重大度は中(sec moderate)。CWE 862 および CWE 284。Firefox 154 と ESR 153.1 で修正済み。Bugzilla 2056558。
Fission では、各コンテンツプロセスが PipelineId 名前空間を所有します。これは wr::PipelineId の上位 32 ビットです。WebRenderBridgeParent::AddPipelineIdForCompositable は GPU プロセス内で実行されます。これはルートパイプラインガードと自身のセットへの所属をチェックしていましたが、PipelineId 名前空間が送信プロセスに属しているかどうかはチェックしていませんでした。同じファイル内の image・font・blob キーパスはすでにこのチェックを実施しています。侵害されたコンテンツプロセスは、別のプロセスの名前空間に PipelineId を登録し、共有マネージャ内のそのオリジンの非同期イメージパイプラインを上書きできます。
リソースキーパスが実施する MatchesNamespace チェックが、PipelineId パスと RemovePipelineIdForCompositable に欠落しています。AddAsyncImagePipeline は一意性を MOZ_ASSERT のみで保護しています。これはリリースビルドでは no-op です。したがって、共有の AsyncImagePipelineManager は重複を拒否する代わりに、被害者のパイプラインを静かに上書きします。

脅威モデルは侵害済みのコンテンツプロセスです。PoC は XRE_IsContentProcess でガードされたコンテンツ側パッチです。これは PipelineId 名前空間を偽造します。WebGL キャンバスとクロスオリジンのアウトオブプロセス iframe を持つテストページが付属しています。
apply poc.patch to mozilla-central and build
MOZ_POC_FORGE_WR_NAMESPACE=999999 ./mach run --temp-profile poc.html
リリースビルドで観測されます。
[POC-2056558] ACCEPTED cross-namespace PipelineId: sender-namespace=4 pipeline-namespace=999999 (should have been rejected)
クロスオリジンのレンダリング混乱とクロスタブのサービス拒否。これは Fission サイト分離の認可バイパスです。メモリ破壊ではありません。下流のコンシューマは null ガードされ、参照カウントされているため、コード実行には至りません。
リソースキーパスが使用するのと同じ名前空間所有権チェックを実施します。
if (!MatchesNamespace(aPipelineId)) {
return IPC_FAIL(this, "PipelineId namespace does not belong to the sending process");
}
Abdulaziz Alasaiqah · https://azoz.my/writeups.html