
CVE-2026-74970 · फ़ायरफ़ॉक्स WebRender में Fission साइट आइसोलेशन बाइपास
गंभीरता: मध्यम सुरक्षा। CWE 862 और CWE 284। Firefox 154 और ESR 153.1 में ठीक किया गया। Bugzilla 2056558।
Fission के अंतर्गत प्रत्येक content process एक PipelineId namespace का स्वामी होता है। यह wr::PipelineId के उच्च 32 बिट होते हैं। WebRenderBridgeParent::AddPipelineIdForCompositable GPU process में चलता है। यह root pipeline गार्ड और अपने सेट में सदस्यता की जाँच करता था। इसने कभी यह नहीं जाँचा कि PipelineId namespace भेजने वाले process का है। समान फ़ाइल में image, font और blob key paths पहले से ही इस जाँच को लागू करते हैं। एक समझौता किया गया content process किसी अन्य process namespace में PipelineId पंजीकृत कर सकता है और उस origin की async image pipeline को shared manager में अधिलेखित कर सकता है।
MatchesNamespace जाँच, जिसे resource key paths लागू करते हैं, PipelineId path और RemovePipelineIdForCompositable पर अनुपस्थित है। AddAsyncImagePipeline अद्वितीयता की सुरक्षा केवल MOZ_ASSERT से करता है। रिलीज़ बिल्ड में यह एक no-op है। इसलिए साझा AsyncImagePipelineManager डुप्लिकेट को अस्वीकार करने के बजाय पीड़ित pipeline को चुपचाप अधिलेखित कर देता है।

थ्रेट मॉडल एक समझौता किया गया content process है। PoC एक content side पैच है जो XRE_IsContentProcess द्वारा संरक्षित है। यह PipelineId namespace को फोर्ज करता है। इसके साथ एक परीक्षण पृष्ठ आता है जिसमें एक WebGL canvas और एक cross origin out-of-process 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)
Cross origin rendering confusion और cross tab denial of service। यह Fission साइट आइसोलेशन प्राधिकरण बाइपास है। यह memory corruption नहीं है। Downstream उपभोक्ता null guarded और reference counted हैं, इसलिए यह execution प्रदान नहीं करता।
वही namespace स्वामित्व जाँच लागू करें जो resource key paths उपयोग करते हैं।
if (!MatchesNamespace(aPipelineId)) {
return IPC_FAIL(this, "PipelineId namespace does not belong to the sending process");
}
Abdulaziz Alasaiqah · https://azoz.my/writeups.html