CVE-2021-21220
Patch now. It under exploitation confirmed by CISA and has a working public exploit.
Apply updates per vendor instructions.
Summary
CVE-2021-21220 é uma falha de validação insuficiente de entrada no motor JavaScript V8, especificamente na variante para x86_64, presente em versões do Google Chrome anteriores à 89.0.4389.128. A falha permite corrupção de heap explorável a partir de uma página HTML maliciosa e foi usada em ataques reais antes da correção, o que justifica sua entrada no catálogo KEV da CISA — não é um CVE teórico, é um bug que já foi arma de exploração.
Technical detail
O bug reside no compilador otimizador (TurboFan) do V8, o motor JavaScript do Chromium, na variante de código gerado para x86_64. O advisory do Google descreve a causa como 'insufficient validation of untrusted input', uma formulação genérica que o Chromium usa tipicamente para falhas de análise de tipos ou de faixa de valores (type/range confusion) no pipeline de compilação JIT — quando o otimizador assume limites ou tipos para uma variável que depois se revelam incorretos em tempo de execução, e gera código de máquina que acessa memória fora dos limites esperados (CWE-20, Improper Input Validation, com efeito prático de out-of-bounds heap access).
Os títulos das referências técnicas catalogadas ('XOR Typer Out Of Bounds Access' e 'Chrome V8 JIT XOR Arbitrary Code Execution') indicam que o vetor específico envolve o 'Typer' do TurboFan — o componente responsável por inferir o intervalo de valores possíveis de uma expressão durante a otimização — e como ele trata operações XOR. Um erro nesse cálculo de faixa permite que o JIT gere código que confia em um limite de valor incorreto, abrindo espaço para leitura/escrita fora dos limites de um array ou objeto no heap quando o valor real em runtime excede o previsto pelo otimizador.
O atacante controla o conteúdo do JavaScript executado pela página — ou seja, toda a lógica que dispara a condição de otimização incorreta é escrita por quem hospeda a página maliciosa. Não há necessidade de qualquer configuração não padrão do navegador; o bug está no caminho normal de compilação JIT que roda para qualquer script.
A falha foi reportada por Bruno Keith (@bkth_) e Niklas Baumstark (@_niklasb), da Dataflow Security, via Zero Day Initiative (ZDI-CAN-13569), em 7 de abril de 2021 — datas e créditos consistentes com participação em competição de exploração (Pwn2Own), onde falhas de renderer no V8 costumam ser encadeadas com bugs de sandbox escape para RCE completo.
How it’s exploited
O vetor de entrega é uma página HTML/JavaScript maliciosa — o usuário só precisa visitá-la (daí a exigência de interação do usuário no vetor CVSS, UI:R). Não há autenticação envolvida e não é necessário nenhum estado de configuração especial do Chrome; o alvo é o pipeline de compilação JIT do V8, que está sempre ativo. A exploração explora corrupção de heap dentro do processo de renderização (renderer), o que por si só já compromete a execução de JavaScript e memória da aba, mas para controle total do sistema normalmente é encadeada com uma segunda falha de escape de sandbox — cenário coerente com o fato de o mesmo boletim do Google corrigir simultaneamente o CVE-2021-21206 (use-after-free em Blink), também classificado como explorado in-the-wild.
O próprio Google declarou no advisory: 'Google is aware of reports that exploits for CVE-2021-21206 and CVE-2021-21220 exist in the wild' — confirmação direta do fornecedor de exploração ativa antes da correção pública, o que motivou a inclusão no catálogo KEV da CISA. A existência de módulo Metasploit e PoC pública tornou a reprodução trivial após a divulgação, ampliando a janela de risco para quem não atualizou rapidamente.
O resultado final de uma cadeia completa de exploração é execução de código no contexto do processo de renderização e, se encadeado com escape de sandbox, potencialmente no sistema do usuário — coerente com o CVSS 8.8 (impacto alto em confidencialidade, integridade e disponibilidade).
Versions
How to protect
A correção definitiva é atualizar o Google Chrome (e derivados baseados em Chromium) para a versão 89.0.4389.128 ou posterior. Distribuições Linux que empacotam Chromium separadamente publicaram suas próprias atualizações — Fedora 32/33/34 corrigiram via chromium-90.0.4430.93-1, que já incorpora o fix originalmente lançado em 89.0.4389.128, e o Gentoo publicou o GLSA 202104-08 cobrindo o mesmo conjunto de CVEs.
Não há paliativo de configuração real para esta falha: ela está no compilador JIT do V8, que é parte central da execução de JavaScript. Desabilitar JIT (quando disponível como flag experimental) elimina a superfície de ataque, mas quebra a performance e compatibilidade de praticamente qualquer site moderno — não é uma mitigação prática para uso normal, apenas um controle de último recurso em ambientes de altíssima exposição sem alternativa de atualização imediata. Bloqueio de JavaScript por site (via políticas de navegador) reduz a exposição pontualmente, mas não é escalável.
O mito a descartar: como o vetor exige apenas visita a uma página, controles de rede (firewall, segmentação) não mitigam a falha — o problema é local ao processo do navegador. A única mitigação efetiva e de baixo custo é a atualização do binário do navegador.
How to detect
Não há assinatura de rede confiável para detectar exploração desta falha — o ataque ocorre inteiramente dentro do processo de renderização do navegador via JavaScript malicioso, sem payload de rede distintivo além do carregamento normal de uma página HTML/JS. Em ambientes com telemetria de endpoint, sinais indiretos de interesse são: crashes ou renicializações inesperadas do processo renderer do Chrome/Chromium (sandbox violation, segmentation fault em libv8), especialmente em lote ou correlacionados com visitas a domínios recém-registrados ou de reputação baixa, e crash dumps mencionando corrupção de heap dentro do processo V8/TurboFan. Ferramentas de EDR que monitoram comportamento pós-exploração (spawn de processos filhos anômalos a partir do Chrome) são mais úteis do que qualquer assinatura de payload, já que não há PoC padronizado divulgado publicamente com formato fixo.