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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
उपकरण/GitHubGitHub/gkrishnan724/cve-2021-38297
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणCTFपेपर और शोधलर्निंग और शिक्षाबाइनरी शोषणलैब और अभ्यास
GitHubgkrishnan724/cve-2021-38297

CVE-2021-38297

CVE2021-38297 GO WASM बफर-ओवरफ्लो के शोषण के लिए एक प्रूफ ऑफ कॉन्सेप्ट परिदृश्य

रिपॉजिटरी देखें
812 साल पहलेअभी तक समीक्षित नहीं

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

सभी देखें →

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

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

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

सभी उपकरण देखें →
साझा करें

CVE-2021-38297 का शोषण: GO Wasm बफर ओवरफ्लो में भेद्यता

भेद्यता का अवलोकन

WebAssembly (WASM) अधिकांश आधुनिक वेब ब्राउज़रों में निष्पादन योग्य एक बाइनरी निर्देश प्रारूप के रूप में कार्य करता है। यह C, C++, Rust, और GO जैसी विभिन्न उच्च-स्तरीय भाषाओं के लिए संकलन लक्ष्य के रूप में कार्य करता है, जिससे इन भाषाओं में कोड लिखा जा सकता है और WASM में संकलित किया जा सकता है।

CVE-2021-38297, GO के संकलन और GO-संकलित WASM बाइनरी के लोडिंग में एक महत्वपूर्ण बग को उजागर करता है। यह भेद्यता GO द्वारा प्रदान किए गए JS wasm लोडर (wasm_exec.js) में मौजूद है, जो argv तर्क में अप्रतिबंधित डेटा के साथ WASM बाइनरी लोड करने में सक्षम बनाता है। चूंकि argv WASM के रैखिक मेमोरी में संग्रहीत होता है, दुर्भावनापूर्ण अभिनेता अत्यधिक बड़े argv इनपुट के साथ GO-संकलित WASM प्रोग्राम के रैखिक मेमोरी को अधिलेखित करने के लिए इसका शोषण कर सकते हैं।

यह भेद्यता GO संस्करण 1.17.2 से पहले के संस्करणों में मौजूद थी।

असुरक्षित एप्लिकेशन: Vuln-Twitter

यह प्रूफ ऑफ कॉन्सेप्ट एक सोशल मीडिया एप्लिकेशन, Vuln-Twitter को प्रदर्शित करता है, जो कई उपयोगकर्ताओं को पोस्ट और टिप्पणियां करने की अनुमति देता है। Node.js पर बनाया गया वेब-सर्वर, पोस्ट और टिप्पणी डेटा संग्रहीत करने के लिए SQLite का उपयोग करता है।

फ्रंट-एंड सादे JS के साथ wordprocessor.wasm नामक एक GO WASM मॉड्यूल का उपयोग करता है। यह मॉड्यूल toLeetSpeak जैसी विधियों को उजागर करता है, जो इनपुट स्ट्रिंग्स को "LeetSpeak" में बदलता है (उदाहरण के लिए, "Hello!" "h3ll0!" बन जाता है)।

GO WASM मॉड्यूल पोस्ट और टिप्पणियों को LeetSpeak में प्रस्तुत करने में सहायता करते हैं।

Vuln ट्विटर UI

बफर ओवरफ्लो का शोषण

फ्रंट-एंड रेंडरिंग प्रक्रिया के दौरान, जब सर्वर से पोस्ट और टिप्पणियां प्राप्त होती हैं, प्रत्येक टिप्पणी GO WASM मॉड्यूल का उपयोग करके "LeetSpeak" में रेंडर होती है। प्रत्येक पोस्ट की टिप्पणी GO WASM मॉड्यूल लोड करने के बाद argv चर के भाग के रूप में पारित की जाती है।

इसके अलावा, GO मॉड्यूल में एक विधि processSharedVar() मौजूद है, जो पते 0x5000 पर स्थित स्ट्रिंग को पढ़ने और इसे सरलीकृत भाषण में बदलने के लिए डिज़ाइन की गई है (उदाहरण के लिए, "How are you?" "How r u?" बन जाता है)। मूल पोस्ट को स्पष्ट रूप से रैखिक मेमोरी में 0x5000 पर जोड़ा जाता है ताकि इस विधि द्वारा एक्सेस किया जा सके, जिससे पोस्ट की सामग्री बदल जाती है।

ऐसा करने वाले कोड अनुभाग को देखें:

रेंडरिंग लॉजिक

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

रेंडरिंग लॉजिक मेमोरी

शोषण तकनीक

संक्षेप में:

  1. फ्रंट-एंड प्रत्येक पोस्ट और उसकी टिप्पणियों को रेंडर करता है।
  2. रेंडर करते समय, GO WASM मॉड्यूल लोड होता है, argv चर के माध्यम से टिप्पणियों को संसाधित करता है और मेमोरी पते 0x5000 पर पोस्ट करता है।
  3. टिप्पणी और पोस्ट सामग्री के लिए क्रमशः toLeetSpeak और processSharedVar जैसे फ़ंक्शन का उपयोग किया जाता है।

argv में आकार जांच की कमी को ध्यान में रखते हुए, CVE-2021-38297 के आधार पर, एक संभावित खतरा उत्पन्न होता है। यदि कोई दुर्भावनापूर्ण उपयोगकर्ता किसी ऐसी पोस्ट पर अत्यधिक बड़ी टिप्पणी करता है जो उनकी नहीं है, तो यह टिप्पणी रेंडरिंग के दौरान argv के माध्यम से पारित हो जाएगी। चूंकि कोई आकार सीमा नहीं है, पते 0x5000 (मूल पोस्ट का प्रतिनिधित्व करने वाली) पर सामग्री अधिलेखित होने के लिए संवेदनशील हो जाती है।

इस दोष का शोषण करके, एक दुर्भावनापूर्ण उपयोगकर्ता प्रभावी रूप से मूल पोस्ट सामग्री को बदल देता है, जो एक Stored XSS हमले के समान है। इसके बाद, जब अन्य लोग पेज देखते हैं, तो बदली गई सामग्री प्रदर्शित होती है, जो सभी के रेंडरिंग पर लागू साझा फ्रंट-एंड लॉजिक द्वारा कायम रहती है, जिसके परिणामस्वरूप अधिलेखित पोस्ट सभी को दिखाई देती है।

शोषण प्रवाह

शोषण का पुनरुत्पादन

नोट: इसे पुन: प्रस्तुत करने के लिए आपको स्थानीय रूप से go संस्करण go1.17.1 स्थापित करना होगा, जो इस परिदृश्य में उपयोग किया जाने वाला असुरक्षित संस्करण है। आप विशिष्ट go संस्करण स्थापित करने के तरीके के बारे में आधिकारिक go दस्तावेज़ देख सकते हैं।

अब ऊपर दिए गए परिदृश्य को पुन: प्रस्तुत करने का प्रयास करते हैं:

  1. पूरे एप्लिकेशन को सेटअप करने के लिए पहले प्रोजेक्ट को क्लोन करें: git clone [email protected]:gkrishnan724/CVE-2021-38297.git && cd vuln-twitter
  2. सभी निर्भरताओं को स्थापित करने के लिए npm install चलाएं
  3. npm run resetDB चलाएं जो डेटाबेस को कुछ पोस्ट और टिप्पणियों के साथ प्रारंभ करेगा।
  4. 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 के नए संस्करण का उपयोग करती है:

  1. टारगेट npm run patchServer चलाएं

यह go फ़ाइल को नए संस्करण के साथ पुनर्संकलित करेगा और पैच संस्करण के साथ सर्वर शुरू करेगा

अब आप देखेंगे कि पोस्ट अधिलेखित नहीं हो रही है और यदि आप कंसोल देखते हैं, तो हमें एक त्रुटि Argument length too long दिखाई देती है।

पैच

निष्कर्ष

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

हमारी समझ के आधार पर हमें लगता है कि GO रैखिक मेमोरी लेआउट नीचे दर्शाया गया है:

GO मेमोरी लेआउट

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

प्रस्तुति स्लाइड्स

हम कार्नेगी मेलॉन विश्वविद्यालय के छात्र हैं और हमने अपनी एक कक्षा (18-739D Hacking101) में इस CVE प्रूफ-ऑफ-कॉन्सेप्ट को प्रस्तुत किया था। आप हमारी स्लाइड-डेक यहां देख सकते हैं: GOWasm.pptx

क्रेडिट और योगदान

  • Gopala Krishnan (@gkrishnan724)
  • Zhejia Yang (@zildjianpoi)
  • Shubham Kulkarni (@shubhamkulkarni97)
  • Paras Saxena
  • Anisha Nilakantan

स्रोत

  • https://www.ibm.com/support/pages/security-bulletin-ibm-event-streams-affected-potential-buffer-overflow-golang-cve-2021-38297-0
  • https://vulmon.com/vulnerabilitydetails?qid=CVE-2021-38297&scoretype=cvssv3
  • https://pedromarquez.dev/blog/2023/2/node_golang_wasm
  • https://nvd.nist.gov/vuln/detail/CVE-2021-38297
  • https://github.com/golang/go/issues/48797
  • https://github.com/golang/go/commit/f63250238be548b7c6c24ae840541102a5cfef99
  • https://jfrog.com/blog/cve-2021-38297-analysis-of-a-go-web-assembly-vulnerability/
  • https://stackoverflow.com/questions/64763007/why-is-webassembly-safe-and-what-is-linear-memory-model
  • https://webassembly.org/
  • https://hacks.mozilla.org/2019/08/webassembly-interface-types/
  • https://blog.protekkt.com/blog/basic-webassembly-buffer-overflow-exploitation-example
  • https://www.usenix.org/system/files/sec20_slides_lehmann.pdf
  • https://xeiaso.net/talks/wasm-abi/
टूल डाउनलोड करें