A área de transferência do sistema é um canal global entre apps, e uma página WebView pode ler tudo que seu usuário copiou: cartões, senhas, códigos de uso único. No Android a área de transferência era legível por qualquer app em segundo plano antes do Android 10 e só ganhou um aviso e uma marca de dados sensíveis no Android 12. No iOS, a área geral é do sistema, persiste após reinícios e sincroniza entre dispositivos via Universal Clipboard; o iOS 14 acrescentou aviso de leitura e o iOS 16 um aviso de colagem. Mas o caminho de leitura web dentro de um WebView fica fora dessas mitigações nativas: uma página com acesso à área e um gesto do usuário pode colher as credenciais que o app acabou de copiar. Um runtime próprio do host media a área de transferência na camada nativa: marca itens sensíveis como localOnly com expiração e condiciona leituras web à intenção explícita do usuário.

A área de transferência era uma escuta global

A área de transferência do Android é uma estrutura para copiar e colar dados entre aplicativos, e uma implementação fraca expõe os dados do usuário a outros apps (Android Developers, OWASP MASVS-CODE). A exposição varia por versão: antes do Android 10, apps em segundo plano podiam ler silenciosamente a área do app em primeiro plano —qualquer senha, OTP ou número de cartão copiado ficava disponível para um app malicioso. A partir do Android 12, o sistema mostra um aviso cada vez que um app acessa a área, e os desenvolvedores podem marcar dados sensíveis com EXTRA_IS_SENSITIVE para ofuscar a visualização no teclado. Isso ajuda nas escritas nativas, mas não faz nada contra o que uma página web lê.

O iOS a torna persistente e sincronizada

No iOS, a área geral é compartilhada entre todos os apps em primeiro plano e, desde o iOS 10, sincroniza com dispositivos Apple próximos via Universal Clipboard; persiste após reinícios e reinstalações a menos que seja limpa (OWASP MASTG-KNOW-0083). Desde o iOS 14 o sistema avisa quando um app lê conteúdo escrito por outro app, e desde o iOS 16 pede confirmação de colagem. Áreas com nome têm escopo por app ou equipe, mas a maioria dos apps usa a geral. O aviso de permissão também é um imposto: apps de comércio que leem a área ao iniciar para detectar links copiados agora bombardeiam o usuário com avisos de colagem —e o detectPatterns ainda pode revelar que a área se parece com uma URL, número ou telefone sem devolver seu valor.

Dentro de um WebView, a web também a lê

Aqui está a parte que as mitigações do sistema operacional deixam passar. Uma página WebView pode invocar a Clipboard API ou execCommand('paste') com um gesto do usuário e ler o que ele copiou. Some isso aos padrões de autopreenchimento e leitura automática de OTP já comuns em apps híbridos, e uma página de catálogo maliciosa ou comprometida vira um coletor de credenciais: o usuário copia um código de uso único para entrar, a página o lê e a sessão some. A marca nativa EXTRA_IS_SENSITIVE protege o que seu app escreve, mas a leitura da página web segue as mesmas regras de área do navegador —e um WebView não aplica a intenção do host como faria uma tela nativa. A área de transferência, pensada como conveniência, vira uma porta dos fundos que os próprios controles de privacidade da plataforma não fecham.

A solução do runtime

Um runtime próprio do host medeia o acesso à área de transferência na camada nativa em vez de deixá-la à página. Itens sensíveis são escritos como localOnly com uma expirationDate para que nunca cheguem ao Universal Clipboard nem sobrevivam a uma reinicialização. Leituras web da área são condicionadas à intenção explícita do usuário —um controle de colagem visível, não uma leitura silenciosa— e entradas de catálogo não confiáveis têm o acesso negado por completo. A conveniência fica; a porta dos fundos se fecha.

DimensãoWebViewRuntime próprio do host
Escopo da áreaGlobal, entre apps, no iOS sincronizada e persistenteMediada na camada nativa, localOnly + expiração
Leitura em segundo planoSilenciosa antes do Android 10; aviso desde 12O host controla cada leitura web
Exposição 2FA / OTPCódigo copiado legível por qualquer páginaEntradas não confiáveis negadas; por intenção
Caminho de leitura webClipboard API com gesto, sem controleControle de colagem visível, sem leitura silenciosa
Lacuna de mitigação nativaEXTRA_IS_SENSITIVE só ajuda escritasCobre escritas e leituras web

O fio desta série sempre volta à mesma lição: um WebView herda as superfícies mais fracas da plataforma e acrescenta uma com formato de web. A área de transferência é uma conveniência que, em um WebView, vira uma escuta entre apps e entre páginas que o sistema operacional não consegue fechar por completo. Um runtime coloca o host entre a página e a área de transferência —assim a conveniência é do app, e a exposição não.

Fontes