
CVE-2026-78938 के लिए मूल-कारण विश्लेषण और कार्यशील शोषण, एक V8 TurboFan प्रकार भ्रम जो संपीड़ित हीप के भीतर मनमाने ढंग से पढ़ने/लिखने की ओर ले जाता है। इसमें क्रैश PoC और रनटाइम-संबोधित प्रिमिटिव शामिल हैं।
CVE-2026-78938 का रूट-कॉज़ विश्लेषण और एक्सप्लॉइट, जो V8 के TurboFan लोड एलिमिनेशन में एक टाइप कन्फ्यूजन है, जिसे Chrome 152.0.7977.64 (V8 15.2.124.18) में ठीक किया गया था। यह बग वाइल्ड में एक्सप्लॉइट किए जाने की सूचना दी गई थी।
एक्सप्लॉइट बग को आउट-ऑफ-बाउंड Float64Array में बदल देता है और वहाँ से addrof / fakeobj और V8 कंप्रेस्ड हीप पर आर्बिट्रेरी रीड/राइट में। प्रारंभिक राइट के बाद सब कुछ रनटाइम पर स्थित होता है — R/W स्टेज में कोई हार्डकोडेड हीप ऑफसेट नहीं हैं।
50597b0bb48a — "[compiler] Invalidate tracked fields on CheckMaps with instance migration"macOS arm64 पर दोनों संस्करणों के स्थानीय रूप से निर्मित d8 के विरुद्ध परीक्षण किया गया।
| फ़ाइल | यह क्या है |
|---|
pocs/crash.js | न्यूनतम ट्रिगर। कमजोर बिल्ड पर SIGBUS, पैच किए गए पर क्लीन एग्ज़िट। |
pocs/rw_final.js | पूर्ण एक्सप्लॉइट, स्टेज 1: ट्रिगर + OOB ऐरे। फ्रोज़न — नीचे "Reproducing" देखें। |
pocs/logic_final.js | पूर्ण एक्सप्लॉइट, स्टेज 2: addrof/fakeobj/आर्बिट्रेरी R\W, स्टेज 1 द्वारा रनटाइम पर लोड किया गया। |
WRITEUP.md | पूर्ण रूट-कॉज़ विश्लेषण और एक्सप्लॉइटेशन नोट्स। |
दोनों d8 संस्करण बनाएं (सटीक कमिट और GN आर्ग्स के लिए WRITEUP.md देखें), फिर रेपो रूट से:
# क्रैश PoC: vuln पर SIGBUS, patched पर क्लीन
out/vuln/d8 --allow-natives-syntax --homomorphic-ic --max-valid-polymorphic-map-count=4 pocs/crash.js
out/patched/d8 --allow-natives-syntax --homomorphic-ic --max-valid-polymorphic-map-count=4 pocs/crash.js
# पूर्ण R/W: vuln पर काम करता है, patched पर क्लीनली बेल आउट करता है
out/vuln/d8 --allow-natives-syntax --homomorphic-ic --max-valid-polymorphic-map-count=4 pocs/rw_final.js
कमजोर बिल्ड पर अपेक्षित आउटपुट:
[+] OOB Float64Array len=0x7f000004
[+] after write: victim2.z = 2.5
[+] fakeobj(hn|1) typeof=number
[+] ALL PRIMITIVES VERIFIED
दो चीजें मायने रखती हैं:
--homomorphic-ic --max-valid-polymorphic-map-count=4 पॉलीमॉर्फिक मैप फीडबैक को आकार देते हैं ताकि ऑप्टिमाइज़्ड कोड में माइग्रेशन पथ लिया जाए। इनके बिना ट्रिगर चुपचाप कुछ नहीं करता।pocs/rw_final.js बाइट-फ्रोज़न है। एकमात्र भ्रष्ट करने वाला राइट हीप-रिलेटिव ऑफसेट पर उतरता है जो इस बात पर निर्भर करता है कि विक्टिम ऐरे कहाँ आवंटित है, जो बदले में स्क्रिप्ट के सटीक बाइट्स और पथ पर निर्भर करता है। फ़ाइल को संपादित करना (या इसका नाम बदलना) बेक्ड ऑफसेट को अमान्य कर देता है; WRITEUP.md दस्तावेज़ित करता है कि पुनः-कैलिब्रेट कैसे करें। pocs/logic_final.js ट्रिगर फायर होने के बाद लोड होता है, इसलिए इसे स्वतंत्र रूप से संपादित किया जा सकता है।pocs/rw_final.js में एकल राइट ऑफसेट है, उपरोक्त कारणों से।यह रिपॉजिटरी शैक्षिक और रक्षात्मक अनुसंधान उद्देश्यों के लिए है। बग वर्तमान Chrome में पैच किया गया है; विवरण V8 सोर्स ट्री में सार्वजनिक हैं।