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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
ENLBufferPwn — Information and PoC about the ENLBufferPwn vulnerability | Kitploit
उपकरण/GitHubGitHub/pablomk7/enlbufferpwn
Embedded Systems SecurityVulnerability AnalysisExploitationLearning & EducationBinary Exploitation
GitHubpablomk7/enlbufferpwn

ENLBufferPwn

Information and PoC about the ENLBufferPwn vulnerability

रिपॉजिटरी देखें
298112 साल पहलेKitploit द्वारा समीक्षित

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

सभी देखें →

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

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

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

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

ENLBufferPwn (CVE-2022-47949)

CVE:CVE-2022-47949
CVSS v3.1:9.8/10 (गंभीर)
लेखक:PabloMK7, Rambo6Glaz, Fishguy6564
रिपोर्ट किया गया:8 अगस्त, 2021 (Mario Kart 7)
14 अप्रैल, 2022 (प्रभावित WiiU और Switch गेम्स के लिए)
खुलासा किया गया:22 दिसंबर, 2022

विषय सूची

  • विवरण
  • भेद्यता विवरण
  • Mario Kart 7 (3DS) में ENLBufferPwn
    • तकनीकी विवरण
  • Mario Kart 8 में ENLBufferPwn
  • श्रेय
  • लाइसेंस

विवरण

ENLBufferPwn Nintendo 3DS के बाद से कई प्रथम-पक्ष Nintendo गेम्स के सामान्य नेटवर्क कोड में एक भेद्यता है, जो एक हमलावर को केवल पीड़ित के साथ ऑनलाइन गेम खेलकर उनके कंसोल पर दूरस्थ रूप से कोड निष्पादित करने की अनुमति देती है (रिमोट कोड निष्पादन)। इसे 2021 के दौरान कई लोगों द्वारा स्वतंत्र रूप से खोजा गया था और 2021 और 2022 के दौरान Nintendo को रिपोर्ट किया गया था। प्रारंभिक रिपोर्ट के बाद से, Nintendo ने कई भेद्य गेम्स में इस भेद्यता को पैच किया है। इस रिपॉजिटरी में दी गई जानकारी Nintendo से अनुमति प्राप्त करने के बाद सुरक्षित रूप से सार्वजनिक की गई है।

इस भेद्यता ने CVSS 3.1 कैलकुलेटर में 9.8/10 (गंभीर) स्कोर किया है।

यहाँ उन गेम्स की सूची दी गई है जिनमें किसी समय यह भेद्यता मौजूद थी (सूचीबद्ध सभी Switch और 3DS गेम्स को भेद्यता को पैच करने वाले अपडेट मिल चुके हैं, इसलिए वे अब प्रभावित नहीं हैं):

  • Mario Kart 7 (v1.2 में ठीक किया गया)
  • Mario Kart 8 (v4.2.0 में ठीक किया गया)
  • Mario Kart 8 Deluxe (v2.1.0 में ठीक किया गया)
  • Animal Crossing: New Horizons (v2.0.6 में ठीक किया गया)
  • ARMS (v5.4.1 में ठीक किया गया)
  • Splatoon (v2.12.1 में ठीक किया गया)
  • Splatoon 2 (v5.5.1 में ठीक किया गया)
  • Splatoon 3 (2022 के अंत में ठीक किया गया, सटीक संस्करण अज्ञात)
  • Super Mario Maker 2 (v3.0.2 में ठीक किया गया)
  • Nintendo Switch Sports (2022 के अंत में ठीक किया गया, सटीक संस्करण अज्ञात)
  • संभवतः और भी...

भेद्यता विवरण

ENLBufferPwn भेद्यता C++ क्लास NetworkBuffer में बफर ओवरफ्लो का शोषण करती है, जो नेटवर्क लाइब्रेरी enl (Mario Kart 7 में Net) में मौजूद है और कई प्रथम-पक्ष Nintendo गेम्स द्वारा उपयोग की जाती है। इस क्लास में दो विधियाँ Add और Set हैं जो अन्य खिलाड़ियों से आने वाले डेटा से नेटवर्क बफर को भरती हैं। हालाँकि, इनमें से कोई भी विधि यह जाँच नहीं करती है कि इनपुट डेटा वास्तव में नेटवर्क बफर में समाता है या नहीं। चूँकि इनपुट डेटा नियंत्रणीय है, हमलावर के साथ केवल ऑनलाइन गेम सत्र रखकर रिमोट कंसोल पर बफर ओवरफ्लो ट्रिगर किया जा सकता है। यदि सही तरीके से किया जाए, तो पीड़ित उपयोगकर्ता को यह पता भी नहीं चल सकता है कि उनके कंसोल में कोई भेद्यता ट्रिगर हुई थी। इस बफर ओवरफ्लो के परिणाम गेम के अनुसार अलग-अलग होते हैं, गेम की मेमोरी में साधारण हानिरहित संशोधनों (जैसे 3DS पर होम मेनू को बार-बार खोलना और बंद करना) से लेकर अधिक गंभीर क्रियाओं तक, जैसे कंसोल का पूर्ण नियंत्रण लेना, जैसा कि नीचे दिखाया गया है।

शेष रिपोर्ट Mario Kart 7 पर केंद्रित रहेगी, क्योंकि 3DS में सुरक्षा उपायों (उदाहरण के लिए, ASLR) की कमी के कारण, यह भेद्यता का सबसे गंभीर मामला है। हालाँकि, हमलावर को डेटा वापस भेजने के लिए उपयोग किए जाने वाले NetworkBuffer को हाईजैक करके (और उससे हीप और कोड के पॉइंटर्स लीक करवाकर) Switch गेम्स पर ASLR को बायपास करना संभव हो सकता है।

Mario Kart 7 (3DS) में ENLBufferPwn

निम्नलिखित वीडियो Mario Kart 7 में भेद्यता के एक गंभीर मामले को प्रदर्शित करता है, जहाँ एक हमलावर द्वारा नियंत्रित कंसोल (बाईं ओर) एक अपरिवर्तित कंसोल (दाईं ओर) पर पूरी तरह से कब्ज़ा कर लेता है। उपयोगकर्ता द्वारा की गई एकमात्र इंटरैक्शन हमलावर के साथ ऑनलाइन गेम सत्र में शामिल होना है, इस मामले में, "communities" सुविधा का उपयोग करके (ध्यान दें कि भेद्यता को अलग-थलग तरीके से सुरक्षित रूप से परीक्षण करने और सार्वजनिक लॉबी में खेलने वाले अन्य उपयोगकर्ताओं को प्रभावित न करने के लिए एक "community" का उपयोग किया गया था)। कब्ज़ा एक ROP पेलोड को रिमोट कंसोल पर कॉपी करके और फिर उसे निष्पादित करके किया जाता है। यह ROP पेलोड फिर OS में अन्य भेद्यताओं का उपयोग करके विशेषाधिकार बढ़ाता है और पूर्ण नियंत्रण प्राप्त करता है। वीडियो में, रिमोट कंसोल को CFW इंस्टॉलर (SafeB9SInstaller) चलाने के लिए मजबूर किया जाता है। समान तकनीकों का उपयोग करके, सैद्धांतिक रूप से खाता/क्रेडिट कार्ड जानकारी चुराना या कंसोल के अंतर्निर्मित माइक/कैमरों का उपयोग करके अनधिकृत ऑडियो/वीडियो रिकॉर्डिंग करना संभव होगा।

ENLBufferPwn - Mario Kart 7 प्रदर्शन - Youtube

तकनीकी विवरण

जैसा कि पहले बताया गया है, यह भेद्यता क्लास NetworkBuffer की दो विधियों में एक चूक के कारण उत्पन्न होती है। यहाँ C++ में क्लास और विधियों का एक कार्यान्वयन है:

root@kitploit:~
class NetworkBuffer
{
public:
    u8	bufferType;
    u8* dataPtr;
    u32 dataSize;
    u32 currentSize;

    void Set(u8* newData, u32 newDataSize);
    void Add(u8* newData, u32 newDataSize);
}

void NetworkBuffer::Set(u8* newData, u32 newDataSize)
{
    memcpy(this->dataPtr, newData, newDataSize);
    this->currentSize = newDataSize;
}

void NetworkBuffer::Add(u8* newData, u32 newDataSize)
{
    memcpy(this->dataPtr + this->currentSize, newData, newDataSize);
    this->currentSize += newDataSize;
}

जैसा कि आप देख सकते हैं, न तो Set और न ही Add यह जाँचता है कि आने वाला newDataSize बफर आकार (dataSize) में समाता है या नहीं। चूँकि यह NetworkBuffer क्लास खिलाड़ियों के बीच ऑनलाइन डेटा के आदान-प्रदान के लिए एक सामान्य कंटेनर के रूप में उपयोग की जाती है, newData की सामग्री और newDataSize का मान एक हमलावर द्वारा नियंत्रित किया जा सकता है, और बफर ओवरफ्लो किया जा सकता है।

नेटवर्क लाइब्रेरी का एक और विवरण यह है कि यह अतुल्यकालिक (asynchronous) है, ताकि जब डेटा बफर में भरा जा रहा हो, गेम अन्य ऑपरेशन कर सकें। इसे पूरा करने के लिए, डबल बफर तकनीक का उपयोग किया जाता है। इस तरह, गेम एक NetworkBuffer में पहले से प्राप्त डेटा को उसी समय एक्सेस कर सकता है जब नया डेटा प्राप्त हो रहा होता है। दूसरा NetworkBuffer भर जाने के बाद, बफर आपस में बदल दिए जाते हैं और चक्र दोहराया जाता है।

इस PoC के लिए, Mii डेटा (bufferType = 9) प्राप्त करने के लिए उपयोग किए जाने वाले डबल NetworkBuffer का शोषण किया जाएगा। हीप आवंटन के क्रम के कारण, ऐसा होता है कि NetworkBuffer ऑब्जेक्ट और उसकी सामग्री एक दूसरे के बगल में रखी जाती हैं। साथ ही, डबल बफर के दोनों बफर मेमोरी में सन्निहित होते हैं। निम्नलिखित आरेख दर्शाता है कि बफर आवंटन के बाद मेमोरी कैसी दिखती है:

गेम के हीप में mii डेटा डबल NetworBuffer का प्रतिनिधित्व

अब से, छवि के शीर्ष पर स्थित बफर को Buffer0 के रूप में संदर्भित किया जाएगा, जबकि नीचे स्थित बफर Buffer1 होगा। इस जानकारी का उपयोग करके, एक हमलावर Buffer0 में बफर ओवरफ्लो ट्रिगर करके Buffer1 के गुणों को अधिलेखित कर सकता है, जिसमें इसका dataPtr सदस्य भी शामिल है। चूँकि 3DS गेम्स ASLR लागू नहीं करते हैं, रिमोट कंसोल में सभी मेमोरी स्थान ज्ञात होते हैं, इसलिए dataPtr को किसी मनमाने स्थान पर इंगित किया जा सकता है। गेम द्वारा बफर बदलते ही, नया डेटा उस मनमाने स्थान पर कॉपी कर दिया जाएगा। निम्नलिखित चरणों को करके, किसी भी आकार का पेलोड रिमोट कंसोल पर कॉपी किया जा सकता है:

  1. एक विशेष रूप से तैयार पेलोड बनाएं और उसे Buffer0 में भेजें। यह रिमोट कंसोल में ओवरफ्लो ट्रिगर करके Buffer1 के dataPtr को अधिलेखित कर देगा।
  2. Buffer1 की सामग्री को मनमाने डेटा के साथ सेट करें। यह रिमोट कंसोल के Buffer1 के dataPtr द्वारा इंगित मनमाने पते पर कॉपी हो जाएगा।
  3. मनमाने पते और आकार को बढ़ाएँ और चरण 1 से फिर से शुरू करें।

नीचे गेम के सामान्य संचालन का एक एनीमेशन है, उसके बाद ऊपर वर्णित चरणों का निष्पादन दिखाया गया है।

डबल बफर के सामान्य संचालन का एनीमेशन, उसके बाद भेद्यता संचालन

इस रिपॉजिटरी में एक PoC है जो कंपाइलर फ्लैग्स के आधार पर निम्नलिखित ऑपरेशन करने के लिए इस भेद्यता का शोषण करता है:

  • एक 4 बाइट मान भेजें जो रिमोट कंसोल के एप्लिकेशन स्थिति पते पर लिखा जाता है, जिससे वह बंद होकर होम मेनू पर लौटने के लिए मजबूर हो जाता है।
  • एक ROP पेलोड भेजें जो रिमोट कंसोल की मेमोरी में संग्रहीत किया जाता है। ROP भेजे जाने के बाद, स्टैक को अधिलेखित कर दिया जाता है ताकि गेम उसे निष्पादित करे (ROP पेलोड स्वयं PoC में प्रदान नहीं किया गया है)।

ध्यान रखें कि यह PoC किसी भी प्रकार की पैकेट ड्रॉप पहचान लागू नहीं करता है, क्योंकि कंसोल के बीच संचार UDP का उपयोग करके किया जाता है। सर्वोत्तम परिणाम प्राप्त करने के लिए, PoC कोड में पैकेट ड्रॉप हैंडलिंग लागू की जानी चाहिए या पैकेट गिरने की संभावनाओं को कम करने के लिए कंसोल को एक ही नेटवर्क में रखा जाना चाहिए।

भेद्य NetworkBuffer क्लास का एक संभावित समाधान भी प्रदान किया गया है।

Mario Kart 8 में ENLBufferPwn

यह भेद्यता Mario Kart 8 के WiiU और Switch संस्करण में भी मौजूद है, लेकिन इसका प्रदर्शन केवल गेम के WiiU रिलीज़ के लिए किया गया है।

  • इस POC को NintendoClients का एक पुराना संस्करण चाहिए जो PIA संचार लागू करता है
  • अतिरिक्त जानकारी के लिए आप इस hackerone रिपोर्ट को देख सकते हैं: https://hackerone.com/reports/1541273
  • भविष्य में यहाँ एक अधिक विस्तृत विवरण जोड़ा जाएगा

श्रेय

जबकि इस भेद्यता को कई उपयोगकर्ताओं द्वारा स्वतंत्र रूप से खोजा गया था, उनमें से कई ने भेद्यता की जानकारी निजी रखने का निर्णय लिया। हालाँकि, निम्नलिखित लोग Nintendo को भेद्यता को सुरक्षित रूप से प्रकट करने के लिए जिम्मेदार हैं:

  • PabloMK7 (GitHub, Twitter)
  • Rambo6Glaz (GitHub)
  • Fishguy6564 (GitHub, Twitter)

लाइसेंस

CC0
कानून द्वारा संभव सीमा तक, PabloMK7, Rambo6Glaz and Fishguy6564 ने ENLBufferPwn के सभी कॉपीराइट और संबंधित या पड़ोसी अधिकारों का परित्याग कर दिया है। यह कार्य प्रकाशित किया गया है: स्पेन.

टूल डाउनलोड करें