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ãoWebViewRuntime de propriedade do host
Controle de versão do motorDecidido pelo Android / Play Store / fabricanteVocê decide, no seu pacote assinado
Chegada do patch de segurançaFilrado por Google + atualização do usuárioChega com seu lançamento
Fragmentação de dispositivosDezenas de ramos Chromium na ruaUm runtime que você constrói e testa
Falha de componente compartilhadoUma má atualização pode derrubar vários appsIsolado no seu app
O que você pode fixarNada no motorToda 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