← back
CVE-2021-21220highunder attackCWE-787

CVE-2021-21220

98Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 8.8epss 69%
from disclosure to weapon153 days
Published on NVDApr 26
1st PoC+153d
metasploitApr 13
CISA KEV+191d
exploitation probability
69%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
7 public exploit(s)
Action required by CISAfederal deadline: 2021-11-17

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

Affected
Google Chrome anterior à versão 89.0.4389.128 (todas as plataformas desktop: Windows, Mac e Linux). Builds de Chromium empacotados por distribuições Linux antes da incorporação equivalente ao fix 89.0.4389.128 também estão vulneráveis.
Fixed in
Google Chrome 89.0.4389.128 e posteriores. Fedora 32/33/34 corrigiram via pacote chromium-90.0.4430.93-1 (que inclui o fix retroportado de 89.0.4389.128). Gentoo endereçou via GLSA 202104-08.

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.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
Insufficient validation of untrusted input in V8 in Google Chrome prior to 89.0.4389.128 allowed a remote attacker to potentially exploit heap corruption via a crafted HTML page.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Affected products
Google · Chrome
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.