← back
CVE-2020-15999criticalunder attackCWE-120

CVE-2020-15999

90Vexday Risk Score

Prioritize patching. It under exploitation confirmed by CISA and has a public proof of concept.

ssvc Actcvss 9.6epss 51%
from disclosure to weapon1 days
Published on NVDNov 3
1st PoC+1d
CISA KEV+365d
exploitation probability
51%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
5 public exploit(s)
Action required by CISAfederal deadline: 2021-11-17

Apply updates per vendor instructions.

Summary

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.

Technical detail

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.

How it’s exploited

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.

Versions

Affected
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.
Fixed in
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.

How to protect

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.

How to detect

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.

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.
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
Affected products
Google · Chrome
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.