Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Palimpsest — CVE-2026-74945, divulgación de memoria heap no inicializada mediante una fuente web manipulada (sec-high) | Kitploit
Herramientas/GitHubGitHub/defineid/palimpsest
Generación de PayloadsAnálisis de VulnerabilidadesExplotaciónSeguridad Web
GitHubdefineid/palimpsest

Palimpsest

CVE-2026-74945, divulgación de memoria heap no inicializada mediante una fuente web manipulada (sec-high)

Ver Repositorio
38hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-74945 · Divulgación de heap no inicializado mediante una fuente web manipulada

Este directorio contiene un paquete de reproducción honesto para una divulgación de memoria no inicializada en el manejo de fuentes de Firefox. Una fuente @font-face manipulada lleva el flujo de salida de OTS hacia un hueco de heap no inicializado, y el contenido ordinario lee bytes de ese hueco a través de la API measureText del canvas. Está pensado para ejecutarse contra una compilación vulnerable de Firefox descargada localmente con datos sintéticos únicamente. Nunca toca ningún sistema activo ni de terceros.

Repositorio PoC correspondiente: https://github.com/defineid/Palimpsest Análisis: writeup-font-cmap-leak.html en este portafolio.

Metadatos del aviso

CampoValor
CVECVE-2026-74945
ComponenteCore / Graphics: Text
ClaseDivulgación de memoria no inicializada (CWE-908 · CWE-200)
Gravedadsec-high (divulgación de memoria accesible desde la web)
Corregido enFirefox 154 · ESR 140.14
Bugbugzilla.mozilla.org/show_bug.cgi?id=2057808
InteracciónNinguna · solo carga de página

Mecanismo

Firefox sanitiza las fuentes web a través de OTS antes de usarlas. Tres defectos independientes se alinean para que una fuente manipulada deje un hueco de heap no inicializado dentro de la salida sanitizada y el contenido pueda leerlo de vuelta:

  1. El asignador de salida de OTS nunca pone a cero. El flujo de salida en expansión crece con un realocador sin procesar (moz_xrealloc) que no rellena con ceros el espacio nuevo.
  2. Seek no pone a cero el tramo omitido. Una subtabla cmap de formato 14 con un nonDefaultUVSOffset grande hace que OTS avance su flujo de salida al re-serializar la fuente sanitizada. El tramo omitido entre los bytes escritos y el destino del seek se entrega al llamador con heap no inicializado, y forget() dimensiona el búfer hasta el mayor desplazamiento alcanzado.
  3. La búsqueda de glifos de formato 4 comprueba los límites con la longitud equivocada. La búsqueda de formato 4 comprueba los límites contra el resto de toda la tabla cmap en lugar de la subtabla, por lo que un segmento cuyo idRangeOffset se sale del final de los datos de formato 4 sigue pasando la comprobación y lee dentro de los bytes no inicializados de la subtabla vecina.

La fuente manipulada combina una subtabla de formato 4, cuyo último segmento (0xFFFF) usa un idRangeOffset impar que se desborda, con una subtabla de formato 14 que lleva un nonDefaultUVSOffset grande, además de maxp.numGlyphs = 65535 y un avance hmtx distinto por id de glifo (avance == id de glifo). Medir U+FFFF por lo tanto resuelve a un id de glifo leído del hueco no inicializado, y su ancho de avance, legible desde el script, divulga unos dos bytes de heap por medición sobre una ventana de aproximadamente 64 KB.

Modelo de amenaza

Una página web ordinaria sirve la fuente manipulada a través de @font-face y llama a ctx.measureText("￿"). No se requiere clic, permiso, extensión ni cambio de preferencia. OTS se ejecuta en proceso y no está entre las bibliotecas en sandbox, por lo que los bytes divulgados son heap del proceso de contenido que puede contener punteros o secretos.

Archivos

ArchivoPropósito
make_font.pyConstruye leak.otf y leak.woff, las fuentes manipuladas.
trigger.htmlPágina básica que carga la fuente mediante @font-face y lee el avance de U+FFFF de vuelta a través de measureText.

Requisitos previos

  1. Una compilación vulnerable: Firefox anterior a 154 o ESR anterior a 140.14. El análisis del writeup usa Firefox 140.9.0esr; descarga la compilación correspondiente a tu plataforma desde el archivo oficial de Mozilla en https://ftp.mozilla.org/pub/firefox/releases/140.9.0esr/.
  2. Python con fontTools y brotli, para construir la fuente:
    pip install fonttools brotli
    

Compilar y ejecutar

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

Luego abre trigger.html en la compilación vulnerable, desde una ruta file:// o un servidor estático local que controles, y haz clic en Measure.

Resultado esperado

  • Compilación vulnerable (anterior a 154 / ESR 140.14): U+FFFF se resuelve a un id de glifo distinto de cero derivado del hueco no inicializado, y el avance reportado varía de una ejecución a otra. Cada medición recupera aproximadamente dos bytes del heap del proceso.
  • Compilación corregida (154 / ESR 140.14 y posteriores): U+FFFF se resuelve al id de glifo 0 (.notdef) y el avance es 0. No se filtra ningún hueco, porque el flujo de salida se pone a cero y la búsqueda de formato 4 está acotada a su propia subtabla.

Estado de verificación

  • Hecho en este entorno: make_font.py se ejecutó aquí con fontTools 4.63.0 y produjo leak.otf (393816 bytes) y leak.woff (132372 bytes). La fuente generada se volvió a analizar desde los bytes en bruto y se confirmó cada ingrediente fabricado: maxp.numGlyphs = 65535, hhea.numberOfHMetrics = 65535, un avance hmtx distinto por id de glifo (avance == id de glifo), dos subtablas cmap (plataforma 3 codificación 1 formato 4, y plataforma 0 codificación 5 formato 14), el último segmento del formato 4 endCode = 0xFFFF con un idRangeOffset = 0x4001 impar que se desborda, y el nonDefaultUVSOffset = 0x8000 del formato 14.
  • NO hecho en este entorno: aquí no hay ninguna compilación vulnerable de Firefox, por lo que la fuga real no se observó, desencadenó ni capturó. La fuente no se cargó en una compilación vulnerable y no se divulgó ningún byte del heap. Ejecuta trigger.html tú mismo contra una compilación vulnerable local para observar la fuga. Este paquete demuestra la entrada fabricada y la ruta de lectura de vuelta; no es un exploit armado e incluye ninguna primitiva controlada de ejecución de código.

Alcance y ética

Esto se dirige a una compilación descargada localmente con datos de fuente sintéticos y autogenerados, para un informe sobre el CVE del propio autor, ya reportado y parcheado. No ataca ningún servicio en vivo ni de terceros.

Descargar herramienta