
पूर्ण Firefox चेन: CVE-2026-2796 wasm टाइप कन्फ्यूज़न -> कंटेंट-प्रोसेस RCE, और CVE-2026-2768 पैरेंट-प्रोसेस एस्केप विश्लेषण (दोनों Firefox 148 में ठीक किए गए)
फ़ुल-चेन फ़ायरफ़ॉक्स शोषण अनुसंधान: रेंडरर कोड निष्पादन के लिए एक WebAssembly टाइप कन्फ्यूज़न, जिसे सैंडबॉक्स से बचने के लिए एक पैरेंट-प्रोसेस बग की ओर जोड़ा गया है। दोनों बग Firefox 148 (MFSA-2026-13) में ठीक कर दिए गए थे; यहाँ लक्ष्य Firefox 148-nightly ट्री @ 2fbc0748c4 (2026-01-14) है, जो दोनों फिक्स से पहले का है।
page loads crafted wasm module
│
CVE-2026-2796: Function.prototype.call.bind unwrap skips signature check
│ → i64 ↔ (ref $t) confusion → addrOf/fakeobj
│ → fake WasmArrayObject → arbitrary R/W in the CONTENT process
│ → forged WasmFuncRef → hijack call target ([funcref+0x38])
▼
native code exec INSIDE the sandboxed content process (sbLevel 3)
│ (sandbox blocks exec/fork — need a parent bug)
▼
CVE-2026-2768: forge IndexedDB add/put IPC with out-of-range
mAutoIncrementKeyOffsets (ParamTraits<Key> validates nothing)
│ → parent writes 8 bytes at attacker-controlled offset
▼
memory corruption in the UNSANDBOXED parent process = full escape
| Demo | कहाँ | परिणाम |
|---|---|---|
poc/shell/poc-crash.js | js shell | 0xDEADBEEF को funcref के रूप में डीरेफ़रेंस किया गया → 0xdeadbf2f पर SIGSEGV |
poc/shell/poc-addrof.js | js shell | आर्बिट्ररी R/W सेल्फ-टेस्ट पास होते हैं |
poc/shell/poc-forge.js | js shell | PC नियंत्रण: प्लांट किए गए canary पर क्रैश |
poc/shell/poc-rce.js | js shell | system("id > /tmp/CVE-2026-2796-PWNED; open -a Calculator") — फ़ाइल में uid=501(sid) ... होता है, Calculator खुल जाता है |
poc/browser/stage1-browser.html | Nightly (sbLevel 3 content) | सैंडबॉक्स्ड टैब में आर्बिट्ररी R/W; फोर्ज्ड funcref 0x4141414141414141 पर कूदता है → टैब क्रैश होता है, पैरेंट बचा रहता है |
poc/browser/stage1-browser-cmd.html | Nightly (sbLevel 3 content) | XUL बेस लीक करता है, posix_spawnp (0x187xxxxx) रिज़ॉल्व करता है, और इसे /bin/sh -c "touch /tmp/PWNED-FROM-CONTENT" के साथ कॉल करता है → macOS सैंडबॉक्स exec को अस्वीकार करता है: फ़ाइल नहीं बनती, पेज को कोई नुकसान नहीं — यह प्रमाण कि अकेले कंटेंट RCE ≠ कमांड निष्पादन |
poc/browser/sandbox-proof.html | Nightly (sbLevel 3 content) | सैंडबॉक्स नियमों के भीतर नेटिव exec: getpid() टैब का असली PID लौटाता है (ps से मेल खाता है), और रॉ libc write(1, ...) ब्राउज़र के टर्मिनल लॉग में पहुँचता है — कोई fork/exec नहीं, कोई फ़ाइल नहीं खुलती |
poc/browser/fd3-proof.html | Nightly (sbLevel 3 content) | fd 3 (पैरेंट IPDL सॉकेट) पर 32 रॉ बाइट्स लिखता है: पैरेंट का IPC पार्सर हमलावर के बाइट्स खा जाता है (Message needs unreceived descriptors ... num_handles:33), मैसेज को छोड़ देता है और टैब को मार देता है ("Exiting due to channel error") — वह ट्रांसपोर्ट प्रिमिटिव जिसे स्टेज 2 अच्छी-तरह-निर्मित लेकिन दुर्भावनापूर्ण IndexedDB मैसेज के साथ हथियार बनाता है |
poc/browser/stage2-trigger.html | Nightly | पैरेंट बग पथ की शुद्ध-JS पहुँच (ऑटो-इंक्रीमेंट इंडेक्स कुंजियाँ ) |
स्टेज-2 के रूट-कॉज़ विश्लेषण (फिक्स डिफ्स, IPC सीरियलाइज़ेशन, शोषण रणनीति) के लिए docs/full-escape.md देखें।
# Tree: mozilla-firefox/firefox @ 2fbc0748c4 (2026-01-14, pre-FF148)
# 1) js shell (stage-1 development, unsandboxed):
cd js/src && ../../configure --enable-debug --enable-optimize \
--without-intl-api --enable-project=js && cd _obj && make -j8
# 2) full browser (stage 2). mozconfig:
# export CC=/usr/bin/clang ; export CXX=/usr/bin/clang++
# ac_add_options --enable-application=browser
# ac_add_options --disable-debug --enable-optimize
# ac_add_options --disable-crashreporter --disable-updater --disable-tests
# ac_add_options --enable-sandbox
# ac_add_options --without-wasm-sandboxed-libraries
# requires: node, cbindgen, rustc >= 1.87, macOS CLT SDK
# local build notes:
# - private header sys/fileport.h shim added to objdir dist/include/sys/
# - one compile guard added: NSGlassEffectView (macOS 26 SDK symbol) wrapped
# in #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 260000 in widget/cocoa/
# nsCocoaWindow.mm (build-environment fix, no security impact)
ब्राउज़र PoCs चलाएँ: obj-browser/dist/Nightly.app को ऐसे प्रोफ़ाइल के साथ लॉन्च करें जिसमें browser.dom.window.dump.enabled=true सेट हो, HTML फ़ाइलों को file:// से खोलें, और dump() आउटपुट के लिए stdout देखते रहें। टैब क्रैश पैरेंट लॉग में process <pid> exited on signal 10 के रूप में दिखता है।
WasmArrayObject: numElements @+16, data ptr @+24, inline data @+40.
WasmFuncRef: typeDef ptr @+0x40, call target @+0x38. JSFunction native ptr @+0x20. js शेल: os_system @ base+0x1a9f8, system GOT @ base+0x11d47b0. ब्राउज़र: WebIDL नेटिव कोड पॉइंटर (console.log JSFunction +0x20) से 0xfeedfacf Mach-O मैजिक तक पीछे स्कैन करके XUL बेस पाया गया; _posix_spawnp GOT @ XUL+0x9bb7d30, _getpid GOT @ XUL+0x9bb7600, _write GOT @ XUL+0x9bb87e0. फेक-ऐरे विंडो को आउट-ऑफ-लाइन (malloc'd) ऐरे में होना चाहिए — लंबे स्कैन के दौरान GC द्वारा इनलाइन/नर्सरी ऑब्जेक्ट्स को स्थानांतरित किया जा सकता है।
CVE-2026-2796 के माध्यम से रेंडरर कोड निष्पादन पूरी तरह प्रदर्शित किया गया है (शेल और ब्राउज़र)। CVE-2026-2768 का सैंडबॉक्स-एस्केप विश्लेषण फिक्स डिफ के विरुद्ध स्रोत-सत्यापित है; लाइव एंड-टू-एंड पैरेंट-करप्शन ट्रिगर कार्य प्रगति पर है (docs देखें)। यह शोध रक्षात्मक/शैक्षिक उपयोग के लिए है; वर्तमान रिलीज़ में कमज़ोरियाँ पैच कर दी गई हैं।
e2acef67c5dea6ecकेवल सुरक्षा अनुसंधान, शिक्षा और रक्षात्मक परीक्षण के लिए। उन सिस्टम के विरुद्ध उपयोग न करें जिनके स्वामी आप नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट प्राधिकरण नहीं है।
[1,2,3,4]