Ponteiro para o Nada: Análise de um Bug Use-After-Free Recente no Chrome

Ponteiro para o Nada: Análise de um Bug Use-After-Free Recente no Chrome

Este artigo explora a vulnerabilidade use-after-free (UAF) no motor CSS do Chrome (CVE-2026-2441), detalhando como um atacante pode executar código malicioso simplesmente ao visitar um site. A análise cobre a manipulação da regra @font-feature-values e o uso de iteradores para explorar a falha.

MundiX News·15 de abril de 2026·7 min de leitura·👁 13 views

Abre-se um site e, de repente, um código malicioso é executado no navegador. Em seguida, tenta escapar da sandbox e assumir o controle do computador. Uma vulnerabilidade do tipo use-after-free (UAF) no motor CSS do Chrome (CVE-2026-2441) pode levar a tais consequências. Enquanto você lê este artigo, milhares de usuários continuam usando uma versão vulnerável do navegador.

Aviso: Este artigo tem fins informativos e destina-se a profissionais de segurança que realizam testes sob contrato. O autor e a redação não são responsáveis por quaisquer danos causados pelo uso das informações aqui apresentadas. A disseminação de software malicioso, a interrupção de sistemas e a violação da confidencialidade da correspondência são puníveis por lei.

A vulnerabilidade é do tipo use-after-free (UAF). Uma área de memória é liberada, mas um ponteiro para ela é mantido e pode ser reutilizado. No pior dos casos, um invasor obtém uma Remote Code Execution (RCE) completa, substituindo na memória um objeto falso do tamanho correto com suas próprias funções. Resta garantir que o alocador aloque novamente essa área de memória. O aplicativo tenta chamar uma função ou método legítimo, mas o que o hacker colocou é executado.

A vulnerabilidade CVE-2026-2441 foi descoberta no subsistema CSS do motor Blink. O motor é responsável por transformar HTML, CSS e JS em páginas da web completas: o código HTML é convertido em DOM e o código CSS em CSSOM. Dentro do CSSOM, são criadas estruturas que representam as regras. A vulnerabilidade está no processamento da regra @font-feature-values. Ao alterar os elementos desta regra no código JS, um invasor pode atacar o navegador.

A regra @font-feature-values ajuda os desenvolvedores web a tornar o código CSS mais legível e gerenciável. Dentro dela, coloca-se um conjunto de valores nomeados. Neste artigo, usarei @styleset, mas o nome pode ser qualquer um. No conjunto, nomes legíveis são atribuídos a valores numéricos OpenType. Exemplo de uso:

css
@font-feature-values CoolFont {
 @styleset {
 fancy: 1;
 flowing: 2;
 }
}

/* Agora você pode usar com segurança em CSS em vez de números incompreensíveis */
.special-text {
 font-family: CoolFont;
 font-variant-alternates: swash(fancy);
}

Ao trabalhar, o Blink cria uma tabela hash interna baseada em WTF::HashMap para o bloco @styleset. O acesso a esta estrutura a partir do JavaScript ocorre através do objeto CSSFontFeatureValuesMap. Este é um wrapper sobre o contêiner interno do motor.

O problema surge ao usar iteradores. Ao chamar map.entries() em JavaScript, o Blink cria um objeto iterador FontFeatureValuesMapIterationSource na tabela. Na versão vulnerável, o iterador armazenava um ponteiro bruto para o contêiner interno FontFeatureAliases:

c
const FontFeatureAliases* aliases_;

O contêiner FontFeatureAliases é um alias para WTF::HashMap, declarado via using. As informações podem ser encontradas nas [fontes do Chromium](link para as fontes do Chromium):

c
using FontFeatureAliases = HashMap<AtomicString, FeatureIndicesWithPriority>;

Se uma mutação ocorrer durante a iteração, por exemplo, set() ou delete(), o contêiner pode executar um rehash - realocar a memória, transferir os elementos para um novo buffer e liberar o antigo. Mas o ponteiro dentro do iterador permanece o mesmo. Ele aponta para uma área de memória liberada. Este é um UAF em sua forma pura.

[Conteúdo adicional restrito a membros]

🛡️⚡

Pare de pesquisar. Comece a hackear.

O MundiX é seu copiloto de pentest com IA: comandos exatos, análise de outputs e próximo passo na kill chain — em segundos.

Testar grátis por 7 dias →

Sem cartão para começar · Planos a partir de R$49/mês

📤 Compartilhar & Baixar

📩 Newsletter MundiX

Receba novidades de cibersegurança + um checklist de pentest grátis. Sem spam.

Ao assinar você concorda em receber e-mails. Cancele quando quiser.