Dispositivos Android são vulneráveis a um novo ataque que pode roubar secretamente códigos de autenticação de dois fatores, linhas do tempo de localização e outros dados privados em menos de 30 segundos.
O novo ataque, denominado Pixnapping pela equipe de pesquisadores acadêmicos que o concebeu, requer que a vítima primeiro instale um aplicativo malicioso em um telefone ou tablet Android. O aplicativo, que não requer permissões do sistema, pode efetivamente ler dados que qualquer outro aplicativo instalado exibe na tela. O Pixnapping foi demonstrado em telefones Google Pixel e no Samsung Galaxy S25 e provavelmente poderia ser modificado para funcionar em outros modelos com trabalho adicional. O Google lançou mitigação no mês passado, mas os pesquisadores disseram que uma versão modificada do ataque funciona mesmo quando a atualização está instalada.
Como Tirar uma Captura de Tela
Os ataques Pixnapping começam com o aplicativo malicioso invocando APIs de programação Android que fazem com que o autenticador ou outros aplicativos-alvo enviem informações sensíveis para a tela do dispositivo. O aplicativo malicioso executa, então, operações gráficas em pixels individuais de interesse para o atacante. O Pixnapping explora um canal lateral que permite que o aplicativo malicioso mapeie os pixels nessas coordenadas para letras, números ou formas.
“Qualquer coisa que esteja visível quando o aplicativo alvo estiver aberto pode ser roubada pelo aplicativo malicioso usando Pixnapping”, escreveram os pesquisadores em um site informativo. “Mensagens de chat, códigos de 2FA, mensagens de e-mail, etc. estão todos vulneráveis uma vez que estão visíveis. Se um aplicativo tiver informações secretas que não estão visíveis (por exemplo, tem uma chave secreta que é armazenada mas nunca mostrada na tela), essas informações não podem ser roubadas pelo Pixnapping.”
A nova classe de ataque é reminiscente do GPU.zip, um ataque de 2023 que permitiu que sites maliciosos lessem nomes de usuário, senhas e outros dados visuais sensíveis exibidos por outros sites. Ele funcionou explorando canais laterais encontrados em GPUs de todos os principais fornecedores. As vulnerabilidades que o GPU.zip explorou nunca foram corrigidas. Em vez disso, o ataque foi bloqueado em navegadores limitando sua capacidade de abrir iframes, um elemento HTML que permite que um site (neste caso, um malicioso) incorpore o conteúdo de um site de um domínio diferente.
O Pixnapping visa o mesmo canal lateral que o GPU.zip, especificamente a quantidade precisa de tempo que leva para um determinado quadro ser renderizado na tela.
“Isso permite que um aplicativo malicioso roube informações sensíveis exibidas por outros aplicativos ou sites arbitrários, pixel por pixel,” explicou Alan Linghao Wang, autor principal do trabalho de pesquisa “Pixnapping: Bringing Pixel Stealing out of the Stone Age,” em uma entrevista. “Conceitualmente, é como se o aplicativo malicioso estivesse tirando uma captura de tela do conteúdo da tela ao qual não deveria ter acesso. Nossos ataques de ponta a ponta simplesmente medem o tempo de renderização por quadro das operações gráficas… para determinar se o pixel era branco ou não-branco.”
Pixnapping em 3 Passos
O ataque ocorre em três etapas principais. Na primeira, o aplicativo malicioso invoca APIs Android que fazem chamadas para o aplicativo que o atacante deseja espionar. Essas chamadas também podem ser usadas para efetivamente escanear um dispositivo infectado em busca de aplicativos instalados de interesse. As chamadas podem ainda fazer com que o aplicativo alvo exiba dados específicos aos quais ele tem acesso, como um thread de mensagens em um aplicativo de mensagens ou um código de 2FA para um site específico. Essa chamada faz com que as informações sejam enviadas para o pipeline de renderização Android, o sistema que pega os pixels de cada aplicativo para que possam ser renderizados na tela. As chamadas específicas do Android feitas incluem atividades, intenções e tarefas.
Na segunda etapa, o Pixnapping realiza operações gráficas em pixels individuais que o aplicativo alvo enviou para o pipeline de renderização. Essas operações escolhem as coordenadas dos pixels alvo que o aplicativo deseja roubar e começam a verificar se a cor dessas coordenadas é branca ou não-branca ou, mais geralmente, se a cor é c ou não-c (para uma cor arbitrária c).
“Suponha, por exemplo, que [o atacante] queira roubar um pixel que faz parte da região da tela onde um caractere de 2FA é conhecido por ser renderizado pelo Google Authenticator,” disse Wang. “Esse pixel é branco (se nada foi renderizado ali) ou não-branco (se parte de um dígito de 2FA foi renderizada ali). Então, conceitualmente, o atacante quer causar algumas operações gráficas cujo tempo de renderização é longo se o pixel alvo for não-branco e curto se for branco. O aplicativo malicioso faz isso abrindo algumas atividades maliciosas (ou seja, janelas) na frente do aplicativo alvo que foi aberto na Etapa 1.”
A terceira etapa mede a quantidade de tempo exigida em cada coordenada. Ao combinar os tempos para cada uma, o ataque pode reconstruir as imagens enviadas para o pipeline de renderização um pixel por vez.
Como um leitor do Ars colocou nos comentários abaixo:
Basicamente, o atacante renderiza algo transparente na frente do aplicativo alvo, então usa um ataque de temporização explorando a compressão de dados gráficos da GPU para tentar descobrir a cor dos pixels. Não é algo tão simples como “me dê os pixels de outro aplicativo exibidos na tela agora.” É por isso que leva tempo e pode ser muito lento para caber na janela de 30 segundos do aplicativo Google Authenticator.
Em uma entrevista online, o coautor do artigo Ricardo Paccagnella descreveu o ataque em mais detalhes:
Etapa 1: O aplicativo malicioso invoca um aplicativo alvo para causar a renderização de algum conteúdo visual sensível.
Etapa 2: O aplicativo malicioso usa APIs Android para “desenhar sobre” esse conteúdo visual e causar um canal lateral (neste caso, GPU.zip) a vazar como uma função da cor de pixels individuais renderizados na Etapa 1 (por exemplo, ativar apenas se a cor do pixel for c).
Etapa 3: O aplicativo malicioso monitora os efeitos colaterais da Etapa 2 para inferir, por exemplo, se a cor daqueles pixels era c ou não, pixel por pixel.
As Etapas 2 e 3 podem ser implementadas de maneira diferente dependendo do canal lateral que o atacante deseja explorar. Em nossas implementações nos telefones Google e Samsung, exploramos o canal lateral GPU.zip. Ao usar GPU.zip, medir o tempo de renderização por quadro foi suficiente para determinar se a cor de cada pixel é c ou não. Futuras implementações do ataque podem usar outros canais laterais onde controlar a gestão de memória e acessar temporizadores de alta precisão pode ser necessário (veja a Seção 3.3 do artigo). O Pixnapping ainda funcionaria então: o atacante só precisaria mudar como as Etapas 2 e 3 são implementadas.
A quantidade de tempo necessária para realizar o ataque depende de várias variáveis, incluindo quantas coordenadas precisam ser medidas. Em alguns casos, não há um prazo rígido para obter as informações que o atacante deseja roubar. Em outros casos—como roubar um código de 2FA—cada segundo conta, uma vez que cada um é válido apenas por 30 segundos. No artigo, os pesquisadores explicaram:
Para atender ao rígido prazo de 30 segundos para o ataque, também reduzimos o número de amostras por pixel alvo para 16 (comparado a 34 ou 64 usados em ataques anteriores) e diminuímos o tempo ocioso entre vazamentos de pixels de 1,5 segundos para 70 milissegundos. Para garantir que o atacante tenha os 30 segundos completos para vazar o código de 2FA, nossa implementação aguarda o início de um novo intervalo global de 30 segundos, determinado usando o relógio do sistema.
… Usamos nosso ataque de ponta a ponta para vazar 100 códigos de 2FA diferentes do Google Authenticator em cada um de nossos telefones Google Pixel. Nosso ataque recuperou corretamente o código de 6 dígitos completo em 73%, 53%, 29% e 53% dos testes no Pixel 6, 7, 8 e 9, respectivamente. O tempo médio para recuperar cada código de 2FA é de 14,3, 25,8, 24,9 e 25,3 segundos para o Pixel 6, Pixel 7, Pixel 8 e Pixel 9, respectivamente. Não conseguimos vazar códigos de 2FA dentro de 30 segundos usando nossa implementação no dispositivo Samsung Galaxy S25 devido a ruídos significativos. Deixamos a investigação adicional de como ajustar nosso ataque para funcionar neste dispositivo para trabalhos futuros.
Em um e-mail, um representante do Google escreveu: “Em setembro, emitimos um patch para CVE-2025-48561 no boletim de segurança Android, que mitiga parcialmente esse comportamento. Estamos emitindo um patch adicional para essa vulnerabilidade no boletim de segurança Android de dezembro. Não vimos nenhuma evidência de exploração em uso.”
O Pixnapping é uma pesquisa útil na medida em que demonstra as limitações das garantias de segurança e privacidade do Google de que um aplicativo instalado não pode acessar dados pertencentes a outro aplicativo. Os desafios na implementação do ataque para roubar dados úteis em cenários do mundo real, no entanto, são provavelmente significativos. Em uma época em que adolescentes podem roubar segredos de empresas da Fortune 500 simplesmente perguntando educadamente, a utilidade de ataques mais complicados e limitados provavelmente é de menor valor.
