Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Palimpsest — CVE-2026-74945, Divulgação de heap não inicializado por meio de uma fonte web especialmente criada (sec-high) | Kitploit
Ferramentas/GitHubGitHub/defineid/palimpsest
Geração de PayloadsAnálise de VulnerabilidadesExploraçãoSegurança Web
GitHubdefineid/palimpsest

Palimpsest

CVE-2026-74945, Divulgação de heap não inicializado por meio de uma fonte web especialmente criada (sec-high)

Ver Repositório
38há 1 mêsAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-74945 · Divulgação de heap não inicializado por meio de uma fonte web criada

Este diretório contém um pacote de reprodução honesto para uma divulgação de memória não inicializada no tratamento de fontes do Firefox. Uma fonte @font-face criada leva o fluxo de saída do OTS até uma lacuna de heap não inicializado, e conteúdo comum lê bytes dessa lacuna de volta por meio da API measureText do canvas. Ele foi feito para ser executado contra uma build vulnerável do Firefox baixada localmente com dados sintéticos apenas. Ele nunca toca qualquer sistema ativo ou de terceiros.

Repositório PoC correspondente: https://github.com/defineid/Palimpsest Writeup: writeup-font-cmap-leak.html neste portfólio.

Metadados do advisory

CampoValor
CVECVE-2026-74945
ComponenteCore / Graphics: Text
ClasseDivulgação de Memória Não Inicializada (CWE-908 · CWE-200)
Severidadesec-high (divulgação de memória acessível pela web)
Corrigido emFirefox 154 · ESR 140.14
Bugbugzilla.mozilla.org/show_bug.cgi?id=2057808
InteraçãoNenhuma · apenas carregamento de página

Mecanismo

O Firefox sanitiza fontes web por meio do OTS antes do uso. Três defeitos independentes se alinham para que uma fonte criada deixe uma lacuna de heap não inicializado dentro da saída sanitizada e o conteúdo possa lê-la de volta:

  1. O alocador de saída do OTS nunca zera. O fluxo de saída em expansão cresce com um realocador bruto (moz_xrealloc) que não preenche com zeros o novo espaço.
  2. O seek não zera o trecho ignorado. Uma subtable cmap de formato 14 com um nonDefaultUVSOffset grande faz o OTS avançar seu fluxo de saída quando reserializa a fonte sanitizada. O trecho ignorado entre os bytes escritos e o alvo do seek é entregue ao chamador carregando heap não inicializado, e forget() dimensiona o buffer até o maior offset alcançado.
  3. A busca de glifo do formato 4 verifica os limites do comprimento errado. A busca do formato 4 verifica os limites contra o restante de toda a tabela cmap em vez da subtable, então um segmento cujo idRangeOffset ultrapassa o fim dos dados do formato 4 ainda passa na verificação e lê os bytes não inicializados da subtable vizinha.

A fonte criada combina uma subtable de formato 4, cujo último segmento (0xFFFF) usa um idRangeOffset ímpar e que ultrapassa os limites, com uma subtable de formato 14 que carrega um nonDefaultUVSOffset grande, além de maxp.numGlyphs = 65535 e um avanço hmtx distinto por id de glifo (avanço == id do glifo). Medir U+FFFF, portanto, resolve para um id de glifo lido da lacuna não inicializada, e sua largura de avanço, legível a partir de script, divulga cerca de dois bytes de heap por medição em uma janela de aproximadamente 64 KB.

Modelo de ameaça

Uma página web comum serve a fonte criada por meio de @font-face e chama ctx.measureText("￿"). Nenhum clique, permissão, extensão ou alteração de pref é necessário. O OTS é executado no processo e não está entre as bibliotecas em sandbox, então os bytes divulgados são heap do processo de conteúdo que pode conter ponteiros ou segredos.

Arquivos

ArquivoFinalidade
make_font.pyCria leak.otf e leak.woff, as fontes criadas.
trigger.htmlPágina simples que carrega a fonte via @font-face e lê o avanço de U+FFFF de volta por meio de measureText.

Pré-requisitos

  1. Uma build vulnerável: Firefox anterior à 154 ou ESR anterior à 140.14. A análise do writeup usa o Firefox 140.9.0esr; baixe a build correspondente da plataforma no arquivo oficial da Mozilla em https://ftp.mozilla.org/pub/firefox/releases/140.9.0esr/.
  2. Python com fontTools e brotli, para criar a fonte:
    pip install fonttools brotli
    

Compilar e executar

python3 make_font.py        # writes leak.otf and leak.woff in this directory

Em seguida, abra trigger.html na build vulnerável, a partir de um caminho file:// ou de um servidor estático local sob seu controle, e clique em Measure.

Resultado esperado

  • Build vulnerável (anterior à 154 / ESR 140.14): U+FFFF resolve para um id de glifo diferente de zero derivado do gap não inicializado, e o avanço reportado varia de execução para execução. Cada medição recupera cerca de dois bytes do heap do processo.
  • Build corrigida (154 / ESR 140.14 e posteriores): U+FFFF resolve para o id de glifo 0 (.notdef) e o avanço é 0. Nenhum gap é vazado, porque o fluxo de saída é zerado e a consulta de formato 4 é limitada à sua própria subtable.

Status de verificação

  • Feito neste ambiente: make_font.py foi executado aqui com fontTools 4.63.0 e produziu leak.otf (393816 bytes) e leak.woff (132372 bytes). A fonte gerada foi reprocessada a partir dos bytes brutos e cada ingrediente construído foi confirmado: maxp.numGlyphs = 65535, hhea.numberOfHMetrics = 65535, um avanço hmtx distinto por id de glifo (avanço == id de glifo), duas subtables cmap (plataforma 3 codificação 1 formato 4, e plataforma 0 codificação 5 formato 14), o último segmento do formato 4 endCode = 0xFFFF com um idRangeOffset = 0x4001 ímpar que ultrapassa o limite, e o nonDefaultUVSOffset = 0x8000 do formato 14.
  • NÃO feito neste ambiente: nenhuma build vulnerável do Firefox está presente aqui, portanto o vazamento real não foi observado, acionado ou capturado. A fonte não foi carregada em uma build vulnerável e nenhum byte do heap foi divulgado. Execute trigger.html você mesmo contra uma build vulnerável local para observar o vazamento. Este pacote demonstra a entrada construída e o caminho de leitura de volta; não é um exploit armado e não inclui nenhuma primitiva controlada de execução de código.

Escopo e ética

Isto tem como alvo uma build baixada localmente com dados de fonte sintéticos e autogerados, para um relato do próprio CVE reportado e já corrigido pelo autor. Não ataca nenhum serviço ativo ou de terceiros.

Baixar ferramenta