CVE-2022-24125 और CVE-2022-24126 के लिए दस्तावेज़ीकरण और प्रूफ ऑफ कॉन्सेप्ट कोड।
डार्क सोल्स III के लिए 2022/08/25 को एक नया गेम अपडेट, 1.15.1 जारी किया गया है, साथ ही ऑनलाइन सेवाओं की बहाली भी की गई है। इस अपडेट ने CVE-2022-24125 और CVE-2022-24126 दोनों को ठीक किया, साथ ही गेम के P2P नेटवर्किंग में मौजूद अन्य संभावित सुरक्षा कमजोरियों (OOB reads/writes) की एक विस्तृत श्रृंखला को भी ठीक किया। इसके अलावा, अन्य खिलाड़ियों की सेव को भ्रष्ट करने की अनुमति देने वाले सभी ज्ञात शोषणों को ठीक कर दिया गया है। कई सामान्य छोटे-मोटे धोखे (जैसे "कर्स नाइफ") जो अक्सर ऑनलाइन मल्टीप्लेयर के दौरान सामने आ सकते थे, उन्हें भी पैच कर दिया गया है।
इस रिपॉजिटरी में FROM SOFTWARE गेम्स को प्रभावित करने वाले सबसे हालिया RCE शोषण, CVE-2022-24126 के लिए प्रूफ ऑफ कॉन्सेप्ट कोड और दस्तावेज़ीकरण शामिल है। हालांकि सैद्धांतिक रूप से अन्य गेम्स में संभव है, ध्यान डार्क सोल्स III पर है क्योंकि यह वह गेम है जिस पर मेरा शोध किया गया है। अब तक प्रूफ ऑफ कॉन्सेप्ट कोड केवल डार्क सोल्स III के लिए मौजूद है, इस कमजोरी की उपस्थिति की पुष्टि की गई है:
कमजोर कोड सेकिरो में भी मौजूद है (क्रेडिट: LukeYui), हालांकि इसे ट्रिगर करने का कोई तरीका नहीं है। डेमन्स सोल्स में उपस्थिति की पुष्टि नहीं हुई है लेकिन बहुत संभावना है। जबकि बंद नेटवर्क टेस्ट इससे प्रभावित था, एल्डन रिंग का रिलीज़ संस्करण प्रभावित नहीं है। वास्तव में, नेटवर्क क्रैश, आउट-ऑफ-बाउंड्स रीड्स/राइट्स और शोषणों की एक बड़ी सूची जो खिलाड़ियों को साथियों के गेम डेटा को संशोधित करने की अनुमति देती थी, जो डार्क सोल्स III में मौजूद थे, एल्डन रिंग में पैच कर दिए गए हैं। इस सूची को संकलित करने के लिए और तुरंत कार्रवाई करने के लिए FROM SOFTWARE को बधाई! मुझे यह कहते हुए खुशी हो रही है कि
आम धारणा के विपरीत, यह कोई पीयर-टू-पीयर नेटवर्किंग शोषण नहीं है। यह मैचमेकिंग सर्वर से संबंधित है और इसलिए बहुत अधिक गंभीर है, क्योंकि एक अन्य मैचमेकिंग सर्वर कमजोरी (CVE-2022-24125) के कारण असुरक्षित होने के लिए आपको किसी भी मल्टीप्लेयर गतिविधि में भाग लेने की आवश्यकता नहीं है।
सर्वर बंद होने से पहले के महीनों में लगभग 20,000 खिलाड़ियों के औसत समवर्ती खिलाड़ी आधार वाले गेम के साथ, यह स्पष्ट रूप से एक ऐसा मुद्दा था जिसे तत्काल ठीक करने की आवश्यकता थी, विशेष रूप से एल्डन रिंग में इसके होने की संभावना के साथ। चूंकि FROM SOFTWARE ने प्रूफ ऑफ कॉन्सेप्ट वीडियो और विस्तृत शोषण दस्तावेज़ीकरण (जिस पर इस रीडमी का एक बड़ा हिस्सा आधारित है) के साथ मेरी प्रारंभिक रिपोर्ट के 40 दिनों से अधिक समय बाद भी कार्रवाई नहीं की थी, मैंने डेवलपर्स द्वारा इसे संबोधित करने के लिए ध्यान आकर्षित करने की उम्मीद में सार्वजनिक रूप से एक सौम्य तरीके से शोषण के अस्तित्व को प्रदर्शित करने का फैसला किया, और यह काम कर गया।
इन 3 गैजेट के बारे में अधिक जानकारी के लिए यहाँ देखें। यदि किसी अन्य गेम के लिए यह वर्चुअल कॉल विधि एक व्यवहार्य दृष्टिकोण नहीं है, तो मनमाना कोड रीडायरेक्शन का उपयोग अभी भी अधिक पारंपरिक ROP शोषण स्थापित करने के लिए किया जा सकता है।
प्रूफ ऑफ कॉन्सेप्ट कोड चलाने के लिए, आपके पास पहले कनेक्ट करने के लिए एक सर्वर होना चाहिए। जबकि आधिकारिक सर्वर शोषण के कारण अक्षम कर दिए गए हैं, आप ds3os का उपयोग करके एक निजी सर्वर स्थापित कर सकते हैं। ds3os को रिटेल सर्वर व्यवहार का जितना संभव हो उतना करीब से अनुकरण करने के लिए डिज़ाइन किया गया है, लेकिन इस शोषण को ठीक करने के लिए इस प्रोजेक्ट में पहले से ही सुरक्षा पैच तैनात किए जा चुके हैं। हालाँकि आप BuildConfig.h में SEND_MESSAGE_TO_PLAYERS_SANITY_CHECKS और NRSSR_SANITY_CHECKS स्थिरांकों को false पर सेट करके स्वयं प्रोजेक्ट का निर्माण करके अभी भी एक परीक्षण वातावरण स्थापित कर सकते हैं। यह असुरक्षित रिटेल सर्वर व्यवहार का अनुकरण करता है। गेम शुरू करने और अपने सर्वर से कनेक्ट करने के लिए ds3os द्वारा प्रदान किए गए निर्देशों का पालन करें।
एक बार ऐसा हो जाने और आपका गेम सर्वर से कनेक्ट हो जाने के बाद, PoC कोड बनाएं और Injector.exe निष्पादन योग्य प्रारंभ करें। यह डार्क सोल्स III प्रक्रिया में शोषण कोड वाली एक DLL इंजेक्ट करेगा। यह DLL फिर आपके स्वयं के क्लाइंट को शोषण पहुंचाने के लिए FRPG संदेशों को सर्वर को भेजने वाले गेम फ़ंक्शन का उपयोग करेगी।
फ़ंक्शन 140ca5010 एंट्री आकारों की जाँच करता है, लेकिन 140ca4fa0 चर आकार की प्रविष्टियों के लिए है और आकार फील्ड पर सैनिटी चेक नहीं करता है (बग #1)। ऊपर वर्णित मनमाना कोड रीडायरेक्शन शोषण प्राप्त करने के लिए हमें इसे 14F3B0 पर सेट करने की आवश्यकता है। यह लगभग 1.3MiB का आउट-ऑफ-बाउंड्स रीड का कारण बनेगा लेकिन मेमोरी पेज एक्सेस उल्लंघन से बचने के लिए पर्याप्त बड़ा होना चाहिए।
140ca56b0यह फ़ंक्शन पिछले वाले द्वारा nrssr_data को तर्क के रूप में कॉल किया जाता है। स्टैक पर DLMemoryInputStream ऑब्जेक्ट बनाता है जो तब NRSSR पार्सर को तर्क के रूप में पारित किया जाता है।
141955f50: ParseNRSessionSeachResultNRSessionSearchResult पार्सर। NRSSR हस्ताक्षर और संस्करण संख्याओं को सत्यापित करता है (14196a0f0), गुण सूची पार्स करता है (14196a260), होस्ट नाम (14195603a) और कुछ और जानकारी (rce.h देखें)
14195603aउपरोक्त फ़ंक्शन में लूप जो होस्ट नाम को असुरक्षित रूप से कॉपी करता है (बग #2)। यहां कुछ पते हैं जो बफर ओवरफ्लो के दौरान क्या हो रहा है, इस पर नज़र रखने में मदद कर सकते हैं:
14F128DLMemoryInputStream स्टैक पता: 14F3A0DLMemoryInputStream vtable पॉइंटर: 1439e8b30DLInputStreamReader द्वारा उपयोग किए जाने वाले DLMemoryInputStream में वर्चुअल फ़ंक्शन का ऑफसेट: 0x181439e8b48MOV RCX,qword ptr [RCX + 0x8]
MOV RAX,qword ptr [RCX]
JMP qword ptr [RAX + 0x40]
जहां हम ओवरराइटेड मेमोरी स्ट्रीम vftable के कारण पहले कोड रीडायरेक्शन के बाद पहुंचते हैं। यहीं से वर्चुअल कॉल रीडायरेक्शन की श्रृंखला शुरू होती है।
डार्क सोल्स III Ver. 1.15 के लिए। अधिकतम सैद्धांतिक पेलोड आकार स्टैक लेआउट पर निर्भर करता है और इस प्रकार गेम और संस्करण के अनुसार भिन्न होगा। ↩