← voltar
CVE-2020-15999criticalsob ataqueCWE-120

CVE-2020-15999

90Vexday Risk Score

Priorize a correção. Ela está sob exploração confirmada pelo CISA e tem prova de conceito pública.

ssvc Actcvss 9.6epss 51%
da publicação à arma1 dias
Publicada no NVD3 de nov.
1ª PoC+1d
CISA KEV+365d
probabilidade de exploração
51%top 1% das CVEs
exploração observada
simCISA + VulnCheck
5 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2021-11-17

Apply updates per vendor instructions.

Resumo

Falha de heap buffer overflow na biblioteca FreeType, explorada através do mecanismo de renderização de fontes do Google Chrome (versões anteriores à 86.0.4240.111). Não é um bug exclusivo do Chrome: reside no FreeType em si, então qualquer software que use uma versão vulnerável da biblioteca para renderizar fontes com bitmaps PNG embutidos está potencialmente exposto. O CVSS 9.6 e a presença no catálogo KEV da CISA refletem que já havia exploit funcional em uso real antes da correção — a Google confirmou isso na própria nota de lançamento.

Detalhamento técnico

A vulnerabilidade está na função Load_SBit_Png do FreeType, responsável por decodificar imagens PNG embutidas em fontes (usadas, por exemplo, em glifos de emoji coloridos e outros formatos de bitmap escalável, 'sbit'). Ao calcular o tamanho do buffer para alocar a imagem, a função trunca altura e largura para inteiros de 16 bits. Só que, depois de alocar o buffer com base nesse valor truncado, o código passa os valores originais de 32 bits (não truncados) para a libpng continuar o processamento. Se largura e/ou altura reais da imagem forem maiores que 65535, a libpng escreve dados de imagem que excedem o buffer alocado, corrompendo o heap.

Classifica-se como CWE-190 (integer overflow/wraparound) combinado com CWE-122 (heap-based buffer overflow) — o truncamento de 32 para 16 bits é a causa raiz, e a escrita subsequente fora dos limites é a consequência explorável. O Project Zero descreve o bug como 'relativamente simples de encontrar em revisão manual de código' e sugere que pode ter surgido de análise de variante de um bug antigo do próprio FreeType (issue 168 do Project Zero).

O atacante controla o conteúdo da fonte embutida na página — especificamente os campos de largura e altura da imagem PNG dentro do bloco sbit — e pode fabricar um arquivo de fonte cujo PNG declare dimensões acima de 65535, forçando a gravação fora dos limites do buffer alocado.

Como é explorada

O vetor é uma página HTML maliciosa que referencia (via @font-face ou embutido) uma fonte contendo um bitmap PNG malformado com largura ou altura acima de 65535. Basta o navegador renderizar essa fonte — não é necessário clique, download ou interação além de abrir/visualizar a página (por isso UI:R no vetor CVSS, e não UI:N). Não há exigência de autenticação, configuração não padrão ou acesso de rede privilegiado: qualquer usuário navegando com Chrome vulnerável é alvo em potencial.

A corrupção de heap por si só não garante execução remota de código — é um primitivo de corrupção de memória que precisa ser encadeado com outras técnicas (heap grooming, controle de estruturas adjacentes) para virar RCE confiável. O Project Zero documenta que o exploit real observado combinava este bug com uma falha de escalonamento de privilégios no kernel do Windows (CVE-2020-17087) para escapar do sandbox do Chrome, e havia uma cadeia equivalente para Android usando outra falha do próprio Chrome. Ou seja: a exploração completa exigia mais de uma vulnerabilidade encadeada — o CVE-2020-15999 isolado corrompe heap dentro do processo de renderização, mas o impacto total (execução fora do sandbox) dependia da vulnerabilidade complementar.

A Google declarou estar 'ciente de relatos de que existe um exploit para CVE-2020-15999 em uso real' já no anúncio da correção, e o caso está no catálogo KEV da CISA como exploração confirmada — não é exploração teórica ou apenas PoC de laboratório.

Versões

Afetadas
Google Chrome 86.0.4240.80 e versões anteriores (conforme Project Zero). A vulnerabilidade subjacente reside na biblioteca FreeType empacotada pelo Chrome nessas versões; distribuições Linux com FreeType de sistema vulnerável (ex.: Fedora 31 antes do pacote corrigido) também estavam expostas em qualquer aplicação que renderize fontes via essa biblioteca.
Corrigidas em
Google Chrome 86.0.4240.111 ou posterior. Para FreeType em distribuições Linux: Fedora 31 corrigido em freetype-2.10.0-4.fc31; openSUSE e Gentoo publicaram advisories e pacotes próprios (GLSA 202011-12 e 202012-04). Não determinamos a partir das fontes disponíveis qual número de versão upstream oficial do FreeType (fora dos backports de distribuição) incorpora o commit de correção.

Como se proteger

Atualizar o Google Chrome para 86.0.4240.111 ou posterior elimina o problema no navegador. Como a falha está no FreeType e não apenas no Chrome, sistemas Linux que usam a biblioteca de sistema (não a vendorizada pelo Chrome) precisam de patch separado do pacote freetype da distribuição — confirmado, por exemplo, pelo Fedora 31 no pacote freetype-2.10.0-4.fc31, que aplicou a correção 'testar o tamanho do bitmap mais cedo para PNGs' antes da chamada à libpng. openSUSE e Gentoo também publicaram advisories próprios para seus pacotes freetype.

Não identificamos, nas fontes consultadas, o número da versão upstream oficial do FreeType que incorpora a correção — apenas o commit de patch (a3bab162b2ae616074c8877a04556932998aeacd) e o backport distribuído via pacotes Linux. Antes de considerar um sistema corrigido, confirme que o pacote freetype instalado contém esse commit, não apenas que uma versão numérica 'recente' está presente.

Não há paliativo de configuração eficaz para este bug específico: desabilitar suporte a PNG embutido em fontes não é uma opção exposta ao usuário final no Chrome, e bloquear fontes web via política corporativa (webfonts) reduz superfície mas quebra renderização legítima de sites — é mitigação de última linha, não solução. A única correção real é atualizar o binário/biblioteca vulnerável.

Como detectar

Não há assinatura de rede confiável documentada nas fontes consultadas — o ataque ocorre via processamento local de uma fonte embutida em HTML, sem padrão de tráfego distintivo além do carregamento normal de webfonts. O sinal mais concreto é a própria fonte maliciosa: um arquivo de fonte com bloco sbit contendo PNG cujos campos de largura/altura declarados excedem 65535 é a característica estrutural do ataque, mas identificar isso requer inspeção do conteúdo da fonte, não do tráfego HTTP em si. Em ambientes com telemetria de crash (ASAN/crash reporting) no navegador, crashes recorrentes em rotinas de renderização de fonte/FreeType durante visita a páginas específicas são indício a investigar.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
Heap buffer overflow in Freetype in Google Chrome prior to 86.0.4240.111 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:C/C:H/I:H/A:H
Produtos afetados
Google · Chrome
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.