SEGURANÇA MÓVEL

Agentes de IA Android de código aberto podem permitir que texto invisível na tela execute código em PCs hosts

Um aplicativo Android capaz de desenhar sobre outras janelas e gravar em armazenamento compartilhado pode inserir instruções para o agente de IA que controla o celular, em texto que nenhum olho humano jamais verá. Mais dois passos, e o mesmo aplicativo estará executando comandos no PC que alimenta o agente. Pesquisadores demonstraram essa cadeia, além de seis outros ataques, contra cinco frameworks de agentes móveis de código aberto.


Swati Khandelwal Terça - 21 de Julho de 2026 às 19:26
The Hacker News

Um aplicativo Android capaz de desenhar sobre outras janelas e gravar em armazenamento compartilhado pode inserir instruções para o agente de IA que controla o celular, em texto que nenhum olho humano jamais verá. Mais dois passos, e o mesmo aplicativo estará executando comandos no PC que alimenta o agente.

Pesquisadores demonstraram essa cadeia, além de seis outros ataques, contra cinco frameworks de agentes móveis de código aberto: AppAgent, AppAgentX, Mobile-Agent-v3, Open-AutoGLM e MobA. Todos sucumbiram a pelo menos seis dos sete.

O artigo foi publicado no arXiv em 1º de julho e revisado em 14 de julho. Os autores são de instituições como a Simon Fraser University, a Chinese University of Hong Kong, a Shandong University e o Xingtu Lab da empresa de segurança chinesa QAX.

Nenhum dos problemas recebeu um CVE (identificador de vulnerabilidade padronizado), e o principal autor, Zidong Zhang, disse à The Hacker News que a equipe não tem evidências de que as técnicas estejam sendo usadas fora de um ambiente controlado. A The Hacker News verificou os cinco frameworks e constatou que os caminhos de captura de tela, a chamada shell e o fallback de broadcast descritos no artigo ainda estão nos branches principais em 17 de julho.

Zhang afirmou que a equipe enviou e-mails aos mantenedores afetados de forma privada antes de publicar o preprint e que "até hoje não recebeu resposta".

A escalação é a parte menos exótica. O controlador do AppAgent executa subprocess.run(adb_command, shell=True) e monta a entrada de texto inserindo diretamente a saída do modelo em adb shell input text {input_str}. A listagem do artigo mostra que a função não tem nenhuma sanitização.

O código em produção é marginalmente melhor e nowhere near enough (em nenhum lugar perto do suficiente): ele remove espaços e aspas simples antes de interpolar, mas deixa o resto dos metacaracteres shell intactos. Nem ;, nem &, nem >. Assim, uma string que o modelo lê da tela e digita fielmente é dividida pelo shell do host, e a segunda metade é executada na máquina Windows do operador.

Uma carga útil projetada para iniciar calc.exe fez exatamente isso em 20 de 20 tentativas contra AppAgent, AppAgentX, Mobile-Agent-v3 e MobA. Um teste completo separado contra o AppAgent usou test;pwd>rce_success e gravou o diretório de trabalho do host em um arquivo.

Colocar essa string diante do modelo é uma corrida de arquivo. O Open-AutoGLM executa screencap -p /sdcard/tmp.png e depois um adb pull separado. O Mobile-Agent-v3 grava em /sdcard/screenshot.png fixo e espera meio segundo entre os dois. O AppAgentX grava em /sdcard/ com nomes de arquivo carimbados com o tempo e um contador de passos incremental, um padrão que um atacante pode observar. O config.yaml fornecido do AppAgent ainda define como padrão o diretório de capturas de tela como /sdcard.

Os pesquisadores cronometraram esse intervalo entre os frameworks em 50 a 500ms, com média em torno de 210ms ao longo de 100 execuções. Um serviço em segundo plano consultando a cada 5 a 10ms tem espaço para bloquear o arquivo, pintar o PNG novamente e liberar antes que o agente o collecte. A adulteração acertou de 19/20 a 20/20 contra quatro dos cinco.

Para ampliar ainda mais a janela, eles mostraram ao agente uma sobreposição invisível afirmando que uma sincronização de rede estava em execução e pedindo para ele esperar três segundos. O modelo acreditou.

Todos os seis modelos de visão testados pelos pesquisadores leram texto com opacidade de 2% em pelo menos 18 de 20 tentativas em laboratório. O artigo coloca esse nível abaixo da detecção humana típica em condições normais de visualização. GPT-4o, Claude Opus 4.5, Gemini 3 Pro e GLM-4V acertaram 20 de 20. Os números não sobem à medida que o texto fica mais visível, porque já começam no teto.

O AutoGLM-Phone, um modelo de 9B executado no próprio dispositivo, foi o mais fraco dos seis com 18 de 20. A visão humana aplica um limiar. A captura de tela não.

A assimetria também tem uma versão de hardware. Os celulares arredondam seus cantos e cortam furos para câmeras, mas o framebuffer permanece retangular, então pixels renderizados nessas regiões ficam sob a moldura e aparecem em todas as capturas de tela. Em um Pixel 4, isso deixa cerca de 78 pixels de largura oculta em um canto, suficiente para um comando curto, e todos os cinco agentes leram cargas úteis fora dele.

Um terceiro truque dispens entirely (totalmente) a furtividade: um serviço de acessibilidade deposita uma Activity falsa de login sobre o app real e deixa o agente digitar as credenciais do usuário nela. Uma pessoa poderia hesitar diante de um prompt de senha inesperado. Nenhum dos cinco hesitou, ao longo de 100 tentativas.

Ninguém autenticou o teclado

Os agentes não têm um canal sancionado para um celular, então reaproveitam os de depuração, e o ataque mais barato do conjunto decorre disso. O Open-AutoGLM codifica em base64 o texto que digita e envia para ADB_INPUT_B64, um broadcast implícito capturado pelo ADB Keyboard, uma ferramenta de automação de testes construída para aceitar texto de qualquer coisa que faça broadcast dele.

Esse é seu propósito documentado, e ele ainda é mantido, com um pré-lançamento de abril contendo uma correção para Android 16. O ADB Keyboard faz o que seu README promete. Os agentes são o que transformou um harness de testes em encanamento de entrada em produção.

O Mobile-Agent-v3 mantém uma allow-list restrita: letras, dígitos e pontuação comum vão via adb shell input text, e todo o resto, ou seja, qualquer caractere não-ASCII, sai um caractere de cada vez via ADB_INPUT_TEXT. O MobA é mais direto. Seu type_text testa a string inteira com text.isascii(), então um emoji ou letra acentuada em qualquer lugar de uma mensagem envia a mensagem inteira via broadcast em uma única tacada.

Qualquer app que registre a mesma action recebe a mesma carga útil, e não precisa de nenhuma permissão para isso, então nada avisa o usuário. Quando o atacante tem acessibilidade, TYPE_VIEW_TEXT_CHANGED entrega o mesmo texto em texto simples, campos de senha incluídos, contra todos os cinco.

Os pré-requisitos são reais. Isso quer um app já instalado, um agente realmente no meio de uma tarefa e depuração USB ou sem fio habilitada. O software afetado é ferramentas de desenvolvimento de código aberto, não o assistente embutido em um aparelho de fábrica.

Agentes de primeira parte, incluindo Bixby da Samsung e XiaoAi da Xiaomi, estavam fora do escopo, assim como o iOS. Zhang ofereceu uma ressalva: vários dos ataques precisam de permissões Android mínimas, e um não precisa de nenhuma, o que ele disse reduzir a barreira para um atacante motivado.

Uma variante não precisa de nenhum app malicioso. Como uma carga útil pode viajar nos canais de crominância de uma imagem em vez de seu brilho, um atacante que nunca toca no dispositivo pode esconder uma em uma foto e deixar o próprio agente da vítima capturá-la de um aplicativo de mensagens. Os pesquisadores chamam isso de extensão em vez de resultado medido. É também a única versão sem etapa de instalação.

Correções, e uma que não existe

Dois dos cinco já mostram como é o certo. O MobA transmite capturas de tela via exec-out e nunca tem um arquivo do lado do dispositivo para correr. O Open-AutoGLM passa argumentos como listas em vez de concatenar strings, e é o único dos cinco imune à injeção de comandos no host.

Nenhum dos dois projetos acerta ambos. Nenhuma das correções abaixo requer mexer no modelo:

  • Remova shell=True. Passe listas argv, para que metacaracteres permaneçam literais.
  • Transmita capturas de tela em vez de gravar e depois puxar. Sem arquivo do lado do dispositivo, sem janela TOCTOU.
  • Coloque uma permissão em nível de assinatura no broadcast de entrada, ou use intents explícitas.
  • Diff a activity em primeiro plano antes e depois de cada ação, e mantenha uma allow-list de pacotes por tarefa.
  • Execute aumento de contraste nas capturas de tela antes que o modelo as veja. Parcial, não é uma correção.

A defesa óbvia é um prompt de confirmação em ações sensíveis, e o Open-AutoGLM já tem um. Ele dispara quando o modelo decide que uma ação é sensível. Os ataques de percepção reescrevem esse julgamento, por isso o artigo classifica o prompt como insuficiente contra injeção subliminar, falsificação de UI e adulteração de capturas de tela.

Contra o broadcast e a interceptação por acessibilidade, ele não faz nada, porque não há ação para confirmar. O texto já se foi. Sobre a injeção nos cantos e recortes, os pesquisadores são diretos: "não existe solução baseada em software direta e eficaz". Mascarar cantos é uma solução alternativa para um fato de hardware.

Agorahere (em nenhum lugar) para reportar

O silêncio tem uma estrutura por trás dele. Zhang disse que a equipe foi para um e-mail privado porque os projetos não têm canal dedicado para reportar vulnerabilidades, e a The Hacker News não encontrou política de segurança publicada por nenhum dos cinco repositórios.

O artigo adiciona que Tencent e Alibaba foram abordados primeiro, e que projetos de código aberto de pesquisa ficam fora do escopo usual dos Centros de Resposta de Segurança. Compare isso com o artigo da Microsoft de maio sobre o Semantic Kernel, seu framework de agentes, onde o mesmo padrão de saída de modelo chegando a um shell produziu CVE-2026-25592, CVE-2026-26030 e uma versão corrigida. A versão de uma linha da Microsoft se aplica aqui sem edições: "seu LLM não é um limite de segurança".

A metade de sobreposição não é terreno novo. Wu et al. levaram injeção de prompt através de janelas de sobreposição contra AppAgent e Mobile-Agent em maio de 2025, e Ding et al. seguiu em outubro com prompts que emergem only while (apenas enquanto) um agente está olhando.

A seção de trabalho relacionado deste artigo não cita nenhum dos dois e ignora inteiramente a literatura de segurança de agentes móveis. O que ele adiciona é a ponta distante da cadeia: fora da tela, através do arquivo, para o host.

O que deixa a parte desconfortável. O Open-AutoGLM tem mais de 25.000 estrelas no GitHub, e seu README orienta você a habilitar a depuração USB, instalar o teclado via sideload e entregar a ele sua entrada. Siga os docs exatamente e você construiu todos os pré-requisitos que os ataques medidos precisam, exceto o app malicioso. O guia de configuração é o resto do modelo de ameaça.

Article The Hacker News thehackernews.com