Exploitation of CVE-2021-21220
गलत JIT व्यवहार से रिमोट कोड निष्पादन तक
अवलोकन
यह प्रस्तुति CVE-2021-21220 के शोषण की व्याख्या करती है, जो Google Chrome के V8 JavaScript इंजन में एक भेद्यता है, जो अनुकूलन के दौरान गलत JIT कंपाइलर धारणाओं के कारण उत्पन्न हुई है।
प्रस्तुति निम्नलिखित बिंदुओं से गुज़रती है:
- V8 जस्ट-इन-टाइम (JIT) संकलन कैसे करता है
- अनुकूलन के दौरान signed/unsigned प्रकार का भ्रम (type confusion) बग कैसे प्रकट होता है
- यह बग आउट-ऑफ-बाउंड्स (OOB) ऐरे प्रिमिटिव को कैसे जन्म देता है
- हमलावर OOB पहुंच का उपयोग करके पतों को लीक करने और मनमानी मेमोरी लिखने की क्षमता कैसे प्राप्त कर सकते हैं
- WebAssembly (Wasm) नेटिव कोड निष्पादन का लक्ष्य कैसे बनता है
- मौजूदा शमन (mitigations) और आधुनिक ब्राउज़र सुरक्षा उपाय
प्रस्तुति के लक्ष्य
इस प्रस्तुति का लक्ष्य यह दर्शाना है कि एक आधुनिक JavaScript इंजन के भीतर एक सूक्ष्म अनुकूलन गलती कैसे बढ़कर निम्नलिखित में बदल सकती है:
- मेमोरी भ्रष्टाचार
- मनमानी पढ़ने/लिखने की प्रिमिटिव्स
- नेटिव कोड संशोधन
- संभावित रिमोट कोड निष्पादन (RCE)
यह exploit श्रृंखला दर्शाती है कि JIT इंजन प्रदर्शन और सुरक्षा के बीच संतुलन कैसे बनाते हैं, और कैसे गलत अनुकूलन धारणाएँ शोषण योग्य बन सकती हैं।
शामिल विषय
1. V8 आर्किटेक्चर
प्रस्तुति V8 के प्रमुख घटकों से परिचित कराती है:
Ignition Interpreter
- JavaScript बाइटकोड निष्पादित करता है
- रनटाइम फीडबैक एकत्र करता है
- फीडबैक वेक्टर में प्रकार की जानकारी संग्रहीत करता है
TurboFan Optimizer
- रनटाइम फीडबैक से अनुकूलित ग्राफ बनाता है
- अनुमानित धारणाएँ और गार्ड सम्मिलित करता है
- आक्रामक अनुकूलन पास निष्पादित करता है
Machine Code Backend
- नेटिव CPU निर्देश उत्पन्न करता है
- 'हॉट' फ़ंक्शन के लिए अनुकूलित मशीन कोड तैयार करता है
प्रस्तुति में आर्किटेक्चर आरेख दर्शाता है कि JavaScript कैसे इस प्रकार आगे बढ़ता है:
Parsing → Bytecode → Optimization → Execution
2. JavaScript को अनुकूलित करना कठिन क्यों है
JavaScript उच्च-प्रदर्शन निष्पादन के लिए चुनौतीपूर्ण है क्योंकि:
- चर गतिशील रूप से प्रकार बदलते हैं
- ऐरे संरचना और तत्व प्रकार बदलते हैं
+ जैसे ऑपरेटरों के कई अर्थ हो सकते हैं
- रनटाइम जाँच महंगी होती हैं
V8 रनटाइम व्यवहार के बारे में अनुमान लगाकर सामान्य निष्पादन पैटर्न को अनुकूलित करने के लिए JIT संकलन का उपयोग करता है।
3. CVE-2021-21220 का मूल कारण
यह भेद्यता JIT अनुकूलन के दौरान signed बनाम unsigned पूर्णांक बेमेल से उत्पन्न होती है।
प्रदर्शित प्रमुख अवधारणाएँ:
Uint32Array
Word32Xor
- गलत प्रकार प्रसार
ChangeInt32ToInt64
- गलत असेंबली निर्देश चयन
exploit इस मान का दुरुपयोग करता है:
जो 32-बिट पूर्णांक का साइन बिट सेट करता है।
4. अनुकूलन बेमेल
यह भेद्यता इसलिए उत्पन्न होती है क्योंकि TurboFan इसको पूरी तरह से अनुकूलित करके हटा देता है:
इस अनुकूलन के दौरान:
- XOR ऑपरेशन गायब हो जाता है
- प्रकार की जानकारी खो जाती है
- Signed मान unsigned के रूप में व्याख्यायित हो जाते हैं
- JIT व्यवहार इंटरप्रेटर व्यवहार से भिन्न हो जाता है
इसके परिणामस्वरूप गलत मशीन कोड निर्माण और हमलावर-नियंत्रित मान उत्पन्न होते हैं।
5. OOB प्रिमिटिव का निर्माण
exploit गलत JIT परिणाम को ऐरे व्यवहार पर नियंत्रण में परिवर्तित करता है।
प्रस्तुति निम्नलिखित प्रदर्शित करती है:
- गलत अनुकूलित पूर्णांक मान
- नियंत्रण चर
i में रूपांतरण
- वार्मअप और ट्रिगर निष्पादन के बीच बेमेल
Array.shift() लंबाई अंडरफ़्लो
- OOB-सक्षम ऐरे का निर्माण
दिखाई गई महत्वपूर्ण exploit अवधारणाएँ:
- वार्मअप अनुकूलन
- अनुमानात्मक अनुकूलन
- प्रकार भ्रम
- ऐरे लंबाई भ्रष्टाचार
6. आउट-ऑफ-बाउंड्स एक्सेस
जब ऐरे की लंबाई -1 हो जाती है, हमलावर को प्राप्त होता है:
- आउट-ऑफ-बाउंड्स रीड
- आउट-ऑफ-बाउंड्स राइट
- पड़ोसी V8 हीप ऑब्जेक्ट्स तक पहुंच
फिर exploit निम्नलिखित प्रदर्शित करता है:
- पॉइंटर लीक
- ऑब्जेक्ट पता खोज
- ओवरलैपिंग ऐरे
- कच्चे V8 पॉइंटर निष्कर्षण
7. WebAssembly दुरुपयोग
प्रस्तुति बताती है कि हमलावर कैसे लक्षित कर सकते हैं:
- WebAssembly संकलित कोड पेज
- V8 द्वारा उत्पन्न नेटिव निष्पादन योग्य मेमोरी
हमले का प्रवाह:
- एक Wasm फ़ंक्शन बनाएँ
- निष्पादन योग्य मेमोरी का पता लगाएँ
- संकलित मशीन कोड को अधिलेखित करें
- Wasm को पुनः निष्पादित करें
- मनमाना नेटिव निष्पादन प्राप्त करें
यह दर्शाता है कि JavaScript इंजन बग प्रक्रिया-स्तरीय कोड निष्पादन में कैसे परिवर्तित हो सकता है।
सुरक्षा उपाय और शमन
अंतिम अनुभाग आधुनिक ब्राउज़र सुरक्षा उपायों को शामिल करता है:
संपीड़ित पॉइंटर
प्रत्यक्ष पॉइंटर जोखिम और हीप की भविष्यवाणी को कम करते हैं।
पॉइंटर इनडायरेक्शन
कच्चे मेमोरी पतों तक सीधी पहुंच को रोकते हैं।
हीप सैंडबॉक्सिंग
मेमोरी क्षेत्रों को अलग करते हैं और exploit के प्रभाव को कम करते हैं।
W^X (Write XOR Execute)
पेजों को एक साथ लिखने योग्य और निष्पादन योग्य होने से रोकते हैं।
प्रस्तुति में साइन-एक्सटेंशन समस्या के समाधान को दर्शाने वाला वास्तविक V8 पैच diff भी शामिल है।
मुख्य निष्कर्ष
यह प्रस्तुति दर्शाती है कि:
- छोटी अनुकूलन गलतियाँ गंभीर भेद्यताएँ बन सकती हैं
- JIT कंपाइलर हमले की सतह की जटिलता को काफी बढ़ा देते हैं
- रनटाइम अनुमान खतरनाक असंगतियाँ उत्पन्न कर सकता है
- WebAssembly शोषण के परिदृश्य को बदल देता है
- आधुनिक ब्राउज़रों को कई स्तरित सुरक्षा उपायों की आवश्यकता होती है
चर्चित प्रौद्योगिकियाँ
- JavaScript
- Google V8 इंजन
- TurboFan
- Ignition
- WebAssembly (Wasm)
- JIT संकलन
- मेमोरी भ्रष्टाचार
- आउट-ऑफ-बाउंड्स एक्सेस
- ब्राउज़र शोषण
शैक्षिक उद्देश्य
यह सामग्री कड़ाई से केवल निम्नलिखित के लिए है:
- सुरक्षा अनुसंधान
- शैक्षिक प्रदर्शन
- ब्राउज़र आंतरिक कार्यप्रणाली सीखना
- भेद्यता विश्लेषण
इस जानकारी का उपयोग उन प्रणालियों के विरुद्ध न करें जिनके स्वामी आप नहीं हैं या जिनके परीक्षण की अनुमति आपके पास नहीं है।
संदर्भ