Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2024-29943-but-with-wasm — CVE-2024-29943, लेकिन wasm के साथ | Kitploit
उपकरण/GitHubGitHub/sneakynachos/cve-2024-29943-but-with-wasm
शोषणशेलकोडवेब सुरक्षाबाइनरी शोषण
GitHubsneakynachos/cve-2024-29943-but-with-wasm

CVE-2024-29943-but-with-wasm

CVE-2024-29943, लेकिन wasm के साथ

रिपॉजिटरी देखें

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
1141 महीना पहलेअभी तक समीक्षित नहीं
साझा करें

CVE-2024-29943, लेकिन wasm के साथ

CVE-2024-29943 के लिए एक एंड-टू-एंड एक्सप्लॉइट चेन जो SpiderMonkey के WebAssembly JIT कोड पेज में f64.const इमीडिएट्स के रूप में शेलकोड तस्करी करके मनमाना नेटिव कोड एक्ज़ीक्यूशन प्राप्त करती है — कोई ROP नहीं, कोई VirtualProtect नहीं, कोई बाहरी टूलचेन नहीं।

2024-03-20 mozilla-central nightly (JavaScript-C126.0a1, linux x86-64, pre-fix) के SpiderMonkey शेल के विरुद्ध सत्यापित रूप से कार्यरत: चेन पूरी तरह चलती है और पेलोड निष्पादित होता है (write(1, "PWNED by wasm!\n"); exit(0)).

भेद्यता

CVE-2024-29943 एक sec-critical IonMonkey रेंज-विश्लेषण बग है जिसका उपयोग Pwn2Own 2024 में Manfred Paul ने किया, जो Firefox < 124.0.1 को प्रभावित करता है (Bugzilla 1886849, CVSS 9.8)।

Object.keys के elidable बनाए जाने के बाद MObjectKeysLength::computeRange ने Object.keys(x).length के लिए गलत इंटीजर रेंज लौटाई (bug 1845728 द्वारा रिग्रेस)। Ion रेंज विश्लेषण ने निष्कर्ष निकाला कि एक लूप काउंटर ऋणात्मक नहीं हो सकता और उन बाउंड चेक्स को हटा दिया जो अभी भी पहुँच योग्य थे, जिससे पर आउट-ऑफ-बाउंड रीड/राइट प्राप्त हुआ।

Uint8Array

चेन

root@kitploit:~
Object.keys range-analysis bug -> OOB r/w on Uint8Array
  -> corrupt adjacent ArrayBuffer -> addrof / fakeobj / arbitrary R/W
    -> instantiate hand-built WASM module (shellcode as f64.const immediates)
      -> WasmInstanceObject -> wasm::Instance -> wasm::Code -> CodeTier
         -> ModuleSegment.bytes_ (the JIT code page, RX)
           -> scan page for marker constant
             -> overwrite FuncExport.eagerInterpEntryOffset_ (plain heap)
                with the shellcode's offset within the page
               -> call the export through the interpreter -> payload runs

दो विवरणों को सीखने में हमें एक-एक सेगफॉल्ट का खर्च आया, इसलिए वे लिख दिए गए हैं:

  1. कोड पेज RX है, RWX नहीं। SpiderMonkey कंपाइलेशन के बाद wasm कोड सेगमेंट को mprotect करता है; इंस्ट्रक्शन्स को इन-प्लेस पैच करने पर फॉल्ट होता है। रीडायरेक्ट हीप-निवासी FuncExport में eagerInterpEntryOffset_ को ओवरराइट करके किया जाता है — इंटरप्रेटर codeBase + offset की गणना करता है और वहाँ जंप करता है।
  2. ट्रिगर कॉल इंटरप्रेटर से आनी चाहिए। टॉप-लेवल कोड प्रिमिटिव-ट्रेनिंग लूप से हॉट होता है और Warp-कंपाइल हो जाता है, जो wasm एक्सपोर्ट्स को JIT-एंट्री पाथ से कॉल करता है और इंटरप्रेटर एंट्री ऑफसेट को कभी नहीं देखता। किसी कोल्ड फंक्शन से कॉल करने पर इंटरप्रेटर पाथ बाध्य होता है।

WASM-JIT-पेज शेलकोड तकनीक WasmBlazeFox से है; यह रेपो प्रदर्शित करता है कि यह तकनीक मूल 2018 ट्रेनिंग बग के स्थान पर एक आधुनिक, शिपिंग-ब्राउज़र बग के साथ संयोजित होती है।

फ़ाइलें

  • poc.js — रेंज-विश्लेषण बग के लिए न्यूनतम ट्रिगर।
  • exploit.js — पूरी चेन: प्रिमिटिव्स + WASM JIT शेलकोड स्टेज।
  • gen_wasm.py — शेलकोड एम्बेड करने वाले WASM मॉड्यूल को असेंबल करता है और कॉन्स्टेंट राउंड-ट्रिप को सत्यापित करता है। भिन्न पेलोड उपयोग करने के लिए python3 gen_wasm.py mysc.bin। डिफ़ॉल्ट पेलोड एक शुद्ध-सिसकॉल write(1, "PWNED by wasm!\n"); exit(0) प्रमाण है जिसे किसी सिंबल रिज़ॉल्यूशन की आवश्यकता नहीं (इसलिए यह बेयर jsshell में भी काम करता है)। क्लासिक libxul-आधारित system("gnome-calculator") पेलोड के लिए, WasmBlazeFox ex6 देखें।
  • test.gdb — किसी दिए गए बिल्ड पर ऑब्जेक्ट-मॉडल ऑफसेट प्राप्त करने के लिए ब्रेकपॉइंट्स और ptype /o हेल्पर्स।

पुनरुत्पादन

  1. एक भेद्य शेल प्राप्त करें: gecko-dev @ afbdf6822c9e9f9b6d44b9ea6904cb10878126b1 (Firefox ~124, pre-124.0.1), Linux x86-64 बिल्ड करें — या एक pre-fix nightly jsshell लें, जैसे archive.mozilla.org/pub/firefox/nightly/2024/03/2024-03-20-21-16-35-mozilla-central/jsshell-linux-x86_64.zip।
  2. चलाएँ:
    root@kitploit:~
    LD_LIBRARY_PATH=<jsshell dir> ./js --no-threads --ion-offthread-compile=off \
        --spectre-mitigations=off poc.js      # trigger only (segfault)
    LD_LIBRARY_PATH=<jsshell dir> ./js --no-threads --ion-offthread-compile=off \
        --spectre-mitigations=off exploit.js  # full chain ("PWNED by wasm!")
    

--spectre-mitigations=off आवश्यक है क्योंकि बाउंड-चेक एलिमिनेशन इंडेक्स मास्किंग के अक्षम होने पर निर्भर करता है (Bugzilla कमेंट्स देखें)।

नोट्स

  • हाइजैक से ठीक पहले wasm एक्सपोर्ट को ठीक एक बार कॉल किया जाता है ताकि फंक्शन बेसलाइन टियर में रहे, जहाँ f64.const इमीडिएट्स कोड सेगमेंट में इनलाइन एमिट होते हैं। Ion कंपाइलेशन उन्हें कॉन्स्टेंट-फोल्ड कर सकता है।
  • ऑफसेट (WASM_INSTANCE_OFF_CODE = 0xa8, MetadataTier.funcExports + 448, FuncExport + 8, आदि) भेद्य कमिट के हेडर्स से प्राप्त किए गए थे और 2024-03-20 nightly jsshell के विरुद्ध पुष्ट किए गए; अन्य बिल्ड्स के लिए test.gdb से पुनः प्राप्त करें।

संदर्भ

  • https://bugzilla.mozilla.org/show_bug.cgi?id=1886849
  • https://nvd.nist.gov/vuln/detail/CVE-2024-29943
  • https://www.mozilla.org/security/advisories/mfsa2024-15/
  • https://github.com/bjrjk/CVE-2024-29943
  • https://doar-e.github.io/blog/2018/11/19/introduction-to-spidermonkey-exploitation/
टूल डाउनलोड करें