
मोज़िला के जावास्क्रिप्ट इंजन में WebAssembly उपयोग-के-बाद-मुक्त (use-after-free) भेद्यता का पुनरुत्पादन, जो एक निर्धारित (deterministic) रेस कंडीशन प्रदर्शित करता है और एक नियंत्रित प्रूफ-ऑफ-कॉन्सेप्ट प्रदान करता है।
एक साधारण प्रजनन नहीं। बेसलाइन के लिए यहाँ कुछ समायोजन आवश्यक थे।
Mozilla इस समस्या को WebAssembly use-after-free के रूप में वर्णित करता है। सार्वजनिक फिक्स
9823b5c86ffa सटीक ट्रैपिंग wasm::Code को JitActivation में जीवित रखता है।
परीक्षण एक बुरे-हस्ताक्षर क्रॉस-इंस्टेंस टेल कॉल करता है। एक Debugger अनवाइंड हुक टेबल के अंतिम लक्ष्य संदर्भ को साफ़ करता है और एक सिकुड़ता GC को बल देता है जबकि इंजन ट्रैप को संभालता है। टेल कॉल में प्रवेश करने से पहले, Wasm एक सामान्य JavaScript इम्पोर्ट को आमंत्रित करता है जो मार्कर को प्रिंट करता है।
9b564f641a42: स्थिति 139 (SIGSEGV)।9823b5c86ffa: PASS: trap handled after target release प्रिंट करता है और
0 से बाहर निकलता है।poc-controlled.js लक्ष्य के साझा-स्टब आवंटन को 144 इम्पोर्ट के साथ विस्तारित करता है।
इसका स्टेल थ्रो कंटिन्यूएशन चार निष्पादन योग्य पृष्ठों में से एक के अंदर उतरता है। एक पूर्व-निर्मित लेज़ी-टियर वाहक चार-पृष्ठ अनुकूलित कोड खंड में 6,000 अद्वितीय SIMD स्थिरांक एम्बेड करता है। अपवाद अनवाइंड के दौरान, GC लक्ष्य को जारी करता है और सिंक्रोनस टियरिंग उस छेद को पुनः उपयोग करता है। हर 64 बाइट्स पर एक syscall रनवे UAF NACHOS प्रिंट करता है और exit_group(0) को आमंत्रित करता है।
चलाएँ:
js --wasm-compiler=baseline+ion \
--setpref=wasm_lazy_tiering_level=9 \
--setpref=wasm_lazy_tiering_synchronous=true \
--more-compartments poc-controlled.js
स्रोत-निर्मित Linux x86-64 प्री-फिक्स शेल पर देखी गई विश्वसनीयता: 3/3
रन ने मार्कर प्रिंट किया और 0 से बाहर निकले। मिलान किया गया फिक्स्ड शेल सामान्य
RuntimeError: indirect call signature mismatch उठाता है और इसे प्रिंट नहीं करता।
नियंत्रित PoC रेस को नियतात्मक बनाने के लिए केवल-शेल Debugger और GC फ़ंक्शन का उपयोग करता है। यह jsshell में मूल नियंत्रण स्थापित करता है, न कि वेब पेज से डिलीवरी या Firefox सामग्री सैंडबॉक्स से पलायन।
समतुल्य डिबग शेल के साथ चलाएँ:
js --wasm-compiler=baseline --more-compartments poc.js
यह जीवनकाल प्रतिगमन साक्ष्य है, न कि मेमोरी प्रिमिटिव या शोषण। मार्कर दोनों बिल्ड पर दिखाई देता है और UAF के परिणामस्वरूप नहीं होता।