Corriges uma vulnerabilidade do WebView como qualquer outra — exceto que não pode. O motor de navegador que renderiza seu checkout, login e formulários no app é o Chromium, e no Android esse motor vive em um componente do sistema que o Google e a Play Store atualizam, não sua equipe. A segurança de algumas de suas telas mais sensíveis é decidida por um software cuja versão você não controla nem consegue fixar.
O motor que você não possui
Desde o Android 5.0, o Google desacoplou o WebView do sistema operacional e passou a distribuí-lo como um app atualizável pela Play Store. No Android 7.0 e posteriores, se o Chrome estiver instalado, o sistema costuma usar o próprio Chrome como provedor do WebView. A consequência prática é simples: a versão do motor de render por trás do seu WebView é a que o dispositivo do usuário tiver naquele momento, atualizada no ritmo do Google, não no seu. Seu binário assinado pode carregar uma biblioteca nativa corrigida; o motor do WebView é o binário de outro, no relógio de outro.
A fragmentação é a regra, não a exceção
A ideia de que «todos estão em um Chromium recente» é uma ficção reconfortante. Fabricantes personalizam o WebView, as atualizações do sistema atrasam e alguns fornecedores limitam voltar ao WebView do Google. Em dispositivos sem Google Mobile Services —uma fatia importante do mercado asiático— as atualizações da Play Store não chegam ao WebView. Dados públicos de distribuição mostram que builds do WebView em Chromium 110 ou superior alcançaram cerca de 89% dos dispositivos Android no 2º trimestre de 2024, deixando uma porcentagem de dois dígitos em ramos antigos, alguns vinte ou mais versões atrás. O WebView da Huawei chega perto de Chromium 114; dispositivos Honor mais antigos ficam perto de 116. Seu «único H5» roda sobre uma matriz de motores que você jamais testará por completo.
Quando o componente compartilhado quebra, todos quebram
Essa dependência corta os dois sentidos. Em março de 2021, uma atualização defeituosa do WebView enviada pela Play Store causou travamentos imediatos ao iniciar em dezenas de apps que dele dependiam: Gmail, Google Pay, Samsung Pay e vários apps bancários ficaram inutilizáveis para milhões de usuários no mundo todo. A solução exigiu que o Google retirasse a build ruim e publicasse uma corrigida, enquanto os usuários afetados esperavam. A estabilidade do seu app foi refém de um componente que você não escreveu, em um dia que não escolheu.
Seu patch de segurança espera na fila dele
Suponha que você descubra que uma classe de ataques baseados em WebView está sendo explorada contra seus usuários. O que pode enviar? No lado do motor, praticamente nada. Você pode reforçar seu próprio código, mas o patch subjacente do Chromium só chega quando o Google o publica e o usuário realmente atualiza o componente —filtrado por dispositivo, região, operadora e se as atualizações automáticas estão ativas. Os boletins de segurança do Google listam os CVE relacionados ao WebView como uma categoria de alta gravidade recorrente (cerca de 17% das vulnerabilidades de alto risco em um boletim de 2023). O patch existe; sua chegada aos telefones dos seus usuários não está ao seu comando.
A solução do runtime
Um runtime de propriedade do host renderiza os mini-programas com o kit de UI nativo da plataforma em vez de um motor de navegador emprestado. Não há um segundo Chromium cujas versões você deva rastrear entre mil perfis de dispositivo. Sua lógica de negócio viaja em um pacote versionado e assinado que você controla, então uma correção de segurança avança com seu ritmo de lançamento —não com o do Google nem com o da operadora. Você deixa de esperar na fila de atualização de outro e de se perguntar qual usuário roda o ramo de motor que você nunca testou.
| Dimensão | WebView | Runtime de propriedade do host |
|---|---|---|
| Controle de versão do motor | Decidido pelo Android / Play Store / fabricante | Você decide, no seu pacote assinado |
| Chegada do patch de segurança | Filrado por Google + atualização do usuário | Chega com seu lançamento |
| Fragmentação de dispositivos | Dezenas de ramos Chromium na rua | Um runtime que você constrói e testa |
| Falha de componente compartilhado | Uma má atualização pode derrubar vários apps | Isolado no seu app |
| O que você pode fixar | Nada no motor | Toda a versão do runtime |
O padrão se repete em toda a série: no momento em que uma rota crítica sai do seu binário assinado e vira «um documento obtido do seu servidor», o controle sai junto. Com um WebView você perde até a capacidade de garantir qual motor o renderiza. Um runtime devolve essa garantia.
Fontes
- Android Developers: WebView — o WebView renderiza conteúdo web e é atualizado de forma independente via Play Store desde o Android 5.0.
- Google Play: Android System WebView — o componente que outros apps usam para exibir conteúdo web; 10B+ instalações.
- A falha do Android WebView em 2021 — uma atualização com defeito tirou do ar Gmail, Google Pay e apps bancários para milhões.
- Distribuição de versões do WebView, 2º tri de 2024 — builds em Chromium 110+ alcançaram cerca de 89,3% dos dispositivos Android; ramos antigos persistem.
- Android Security Bulletin — CVE relacionados ao WebView são uma categoria de alta gravidade recorrente.