
WebAssembly (WASM) 🌍, एक अत्याधुनिक बाइनरी निर्देश प्रारूप है, जो आधुनिक वेब ब्राउज़रों में C, C++, Rust, और GO जैसी उच्च-स्तरीय भाषाओं के निर्बाध निष्पादन को सक्षम बनाता है। हालाँकि, CVE-2021-38297 🚩 की खोज ने GO-संकलित WASM बाइनरीज़ के लिए GO की संकलन और लोडिंग प्रक्रिया में एक गंभीर दोष उजागर किया। यह भेद्यता, GO द्वारा प्रदान किए गए JavaScript WASM लोडर (wasm_exec.js) में पाई गई, जो argv तर्क में डेटा के अप्रतिबंधित समावेश की अनुमति देती थी। argv को WASM की रैखिक मेमोरी में संग्रहीत किए जाने के कारण, दुर्भावनापूर्ण हमलावर संभावित रूप से इसका शोषण करके एक बड़े आकार के argv इनपुट के साथ GO-संकलित WASM प्रोग्राम की रैखिक मेमोरी को अधिलेखित कर सकते थे, जिससे अप्रत्याशित और संभावित रूप से खतरनाक परिणाम सामने आते थे। यह भेद्यता GO के 1.17.2 से पहले के संस्करणों में एक महत्वपूर्ण चिंता का विषय थी।
संक्षेप में:
argv चर के माध्यम से टिप्पणियों और मेमोरी एड्रेस 0x5000 पर पोस्ट को संसाधित करता है।toLeetSpeak और processSharedVar जैसे फ़ंक्शन क्रमशः टिप्पणी और पोस्ट सामग्री के लिए उपयोग किए जाते हैं।अपने प्रूफ ऑफ कॉन्सेप्ट में, हम "Vuln-Twitter" प्रस्तुत करते हैं, जो एक नकली सोशल मीडिया प्लेटफ़ॉर्म है जो पोस्ट और टिप्पणियों के माध्यम से उपयोगकर्ता-जनित सामग्री की अनुमति देता है। डेटा संग्रहण के लिए Node.js वेब सर्वर और SQLite का उपयोग करते हुए, Vuln-Twitter का फ्रंट-एंड गतिशील सामग्री रेंडरिंग के लिए wordprocessor.wasm नामक GO WASM मॉड्यूल के साथ सादे JavaScript का लाभ उठाता है। यह मॉड्यूल, विशेष रूप से, toLeetSpeak जैसी विधियाँ शामिल करता है, जो उपयोगकर्ता इनपुट को एक आकर्षक उपयोगकर्ता अनुभव के लिए शैलीबद्ध "LeetSpeak" में बदल देता है।

हमारी खोज सामग्री रेंडरिंग चरण के दौरान शोषण का एक महत्वपूर्ण बिंदु प्रकट करती है, जहाँ प्रत्येक टिप्पणी GO WASM मॉड्यूल द्वारा रूपांतरण से गुजरती है। एक विशेष रूप से तैयार की गई अत्यधिक बड़ी टिप्पणी भेद्यता को ट्रिगर कर सकती है, जिससे बफर ओवरफ्लो होता है जो मूल पोस्ट सामग्री में हेरफेर करता है, जो एक क्लासिक स्टोर्ड XSS हमले वेक्टर का प्रदर्शन करता है। यह भेद्यता न केवल दुर्भावनापूर्ण डेटा हेरफेर की क्षमता को रेखांकित करती है, बल्कि वेब विकास और WASM अनुप्रयोगों के संदर्भ में सुरक्षित प्रोग्रामिंग प्रथाओं के व्यापक निहितार्थों को भी उजागर करती है। ऐसा करने वाले कोड अनुभाग को देखें:

टिप्पणी रेंडर करते समय WASM रैखिक मेमोरी आरेख:

इस भेद्यता का और अधिक अन्वेषण करने के इच्छुक उत्साही और शोधकर्ताओं के लिए, हम GO के एक विशिष्ट भेद्य संस्करण का उपयोग करके शोषण वातावरण को पुन: उत्पन्न करने के विस्तृत चरण प्रदान करते हैं। यह व्यावहारिक दृष्टिकोण भेद्यता की कार्यप्रणाली और संभावित शमन रणनीतियों की गहरी समझ की सुविधा प्रदान करता है।
नोट: इसे पुन: उत्पन्न करने के लिए आपको स्थानीय रूप से go संस्करण go1.17.1 स्थापित करना होगा, जो इस परिदृश्य में उपयोग किया गया भेद्य संस्करण है। विशिष्ट go संस्करण स्थापित करने के तरीके के लिए आप आधिकारिक go दस्तावेज़ देख सकते हैं।
अब उपरोक्त परिदृश्य को पुन: उत्पन्न करने का प्रयास करें:
git clone [email protected]:gkrishnan724/CVE-2021-38297.git && cd vuln-twitternpm install चलाएँnpm run resetDB चलाएँ जो डेटाबेस को कुछ पोस्ट और टिप्पणियों के साथ प्रारंभ करेगा।npm run dev चलाएँ जो स्थानीय सर्वर शुरू करेगा, ब्राउज़र में localhost:3000 खोलें और आपको एक लॉगिन पेज दिखाई देना चाहिए।अब, एक दुर्भावनापूर्ण खाते से लॉगिन करें, क्रेडेंशियल का उपयोग करें उपयोगकर्ता नाम: I_CANT_HACK, पासवर्ड: hacker, एक बार लॉग इन करने के बाद, आपको कुछ पोस्ट के साथ फ़ीड देखने में सक्षम होना चाहिए।
यह पोस्ट काफी दिलचस्प लगती है:
Amazon: ready 4 black friday? https://www.amazon.com/blackfriday
क्या होगा यदि उपरोक्त तकनीक का उपयोग करके, हम Amazon.com की पोस्ट को अधिलेखित करके एक दुर्भावनापूर्ण लिंक की ओर इंगित कर सकें?
exploit.txt फ़ाइल देखें, इसमें वह टिप्पणी है जो "A" की पैडिंग से भरी हुई है ताकि हम एड्रेस 0x5000 तक सब कुछ अधिलेखित कर दें, अंत में आप पाठ ready for black friday? https://evil.com/blackfriday देख सकते हैं। यदि हम इस पाठ को कॉपी करके उपरोक्त पोस्ट पर टिप्पणी करते हैं। हमें मूल पोस्ट को उपरोक्त पाठ के साथ अधिलेखित करने में सक्षम होना चाहिए।
इसे स्वयं आज़माएँ और देखें :)

इस भेद्यता की गंभीरता को स्वीकार करते हुए, हम एक व्यापक पैचिंग रणनीति भी रेखांकित करते हैं, जो जोखिम को कम करने के लिए GO के एक अद्यतन और सुरक्षित संस्करण का उपयोग करती है। यह अनुभाग डेवलपर्स और सिस्टम प्रशासकों के लिए ऐसी भेद्यताओं के विरुद्ध अपने अनुप्रयोगों को मजबूत करने के लिए एक मार्गदर्शिका के रूप में कार्य करता है, जो नियमित सॉफ़्टवेयर अद्यतनों और सतर्क सुरक्षा प्रथाओं के महत्व पर जोर देता है।
इस एप्लिकेशन में, मैंने एक पैच स्क्रिप्ट भी प्रदान की है, जो go के एक नए संस्करण का उपयोग करती है:
npm run patchServer चलाएँयह नए संस्करण के साथ go फ़ाइल को पुन: संकलित करना चाहिए और पैच संस्करण के साथ सर्वर शुरू करना चाहिए
अब आपको ध्यान देना चाहिए कि पोस्ट अधिलेखित नहीं हो रही है और यदि आप कंसोल का निरीक्षण करते हैं, तो हमें इसके बजाय एक त्रुटि दिखाई देती है Argument length too long।

CVE-2021-38297 के शोषण और शमन के माध्यम से हमारी यात्रा WASM के माध्यम से वेब वातावरण में उच्च-स्तरीय प्रोग्रामिंग भाषाओं के एकीकरण द्वारा प्रस्तुत चुनौतियों और अवसरों में मूल्यवान अंतर्दृष्टि प्रदान करती है। यह सॉफ़्टवेयर विकास में सुरक्षा प्रथाओं की एक आलोचनात्मक जांच को प्रेरित करता है, भेद्यता प्रबंधन के लिए एक सक्रिय दृष्टिकोण और सुरक्षित कोडिंग मानकों को अपनाने पर बल देता है। हमारी समझ के आधार पर हम सोचते हैं कि GO रैखिक मेमोरी लेआउट नीचे दर्शाया गया है:

कार्नेगी मेलन विश्वविद्यालय के छात्रों के रूप में, CVE-2021-38297 की हमारी जाँच साइबर सुरक्षा पर व्यापक शैक्षणिक और व्यावसायिक चर्चा में योगदान करती है, जो सॉफ़्टवेयर सुरक्षा पर उभरती प्रौद्योगिकियों के निहितार्थों पर एक व्यावहारिक केस स्टडी प्रदान करती है। हमारी प्रस्तुति सामग्री, समीक्षा के लिए उपलब्ध, हमारे निष्कर्षों और कार्यप्रणालियों को और स्पष्ट करती है, जो साइबर सुरक्षा समुदाय के बीच संवाद और सहयोग को आमंत्रित करती है।
यह प्रोजेक्ट सहयोगी अनुसंधान और शैक्षणिक जांच का प्रमाण है, जिसका नेतृत्व छात्रों और शोधकर्ताओं की एक समर्पित टीम द्वारा किया गया है:
यह प्रूफ ऑफ कॉन्सेप्ट एक सोशल मीडिया एप्लिकेशन, Vuln-Twitter को प्रदर्शित करता है, जो कई उपयोगकर्ताओं को सामग्री और टिप्पणियाँ पोस्ट करने की अनुमति देता है। Node.js पर निर्मित वेब-सर्वर, पोस्ट और टिप्पणी डेटा संग्रहीत करने के लिए SQLite का उपयोग करता है।
फ्रंट-एंड wordprocessor.wasm नामक GO WASM मॉड्यूल के साथ सादे JS का उपयोग करता है। यह मॉड्यूल toLeetSpeak जैसी विधियों को उजागर करता है, जो इनपुट स्ट्रिंग्स को "LeetSpeak" में बदल देता है (उदाहरण के लिए, "Hello!" "h3ll0!" बन जाता है)।
GO WASM मॉड्यूल LeetSpeak में पोस्ट और टिप्पणियों को रेंडर करने में सहायता करते हैं।
फ्रंट-एंड रेंडरिंग प्रक्रिया के दौरान, सर्वर से पोस्ट और टिप्पणियाँ प्राप्त करते समय, प्रत्येक टिप्पणी GO WASM मॉड्यूल का उपयोग करके "LeetSpeak" में रेंडरिंग से गुजरती है। प्रत्येक पोस्ट की टिप्पणी GO WASM मॉड्यूल लोड करने के बाद argv चर के भाग के रूप में पारित की जाती है।
इसके अलावा, GO मॉड्यूल में processSharedVar() नामक एक विधि मौजूद है, जो एड्रेस 0x5000 पर स्थित स्ट्रिंग को पढ़ने और उसे सरलीकृत भाषण में बदलने के लिए डिज़ाइन की गई है (उदाहरण के लिए, "How are you?" "How r u?" बन जाता है)। मूल पोस्ट को इस विधि द्वारा एक्सेस करने के लिए रैखिक मेमोरी में स्पष्ट रूप से 0x5000 में जोड़ा जाता है, जिससे पोस्ट सामग्री में परिवर्तन होता है।
CVE-2021-38297 और इसके व्यापक निहितार्थों में गहराई से उतरने में रुचि रखने वालों के लिए, हम आधिकारिक सुरक्षा बुलेटिन से लेकर तकनीकी ब्लॉग और शैक्षणिक पेपर तक, संसाधनों और पठन सामग्री की एक चयनित सूची प्रदान करते हैं। ये सामग्रियाँ भेद्यता, सॉफ़्टवेयर सुरक्षा पर इसके प्रभाव, और वेब अनुप्रयोगों की सुरक्षा और अखंडता सुनिश्चित करने के चल रहे प्रयासों में व्यापक अंतर्दृष्टि प्रदान करती हैं।
मूल विकास रिपॉजिटरी : https://github.com/gkrishnan724/CVE-2021-38297