Solo para pruebas autorizadas y aprendizaje defensivo.
Este repositorio está destinado a entornos de laboratorio controlados (por ejemplo, configuraciones estilo CTF/HTB) donde usted es propietario del objetivo o tiene*permiso explícito por escrito para probarlo.
Contexto
Este repositorio contiene un proof-of-concept educativo en Python (pterodactyl_rce.py) para una vulnerabilidad del mundo real que afecta a Pterodactyl Panel versiones anteriores a v1.11.11. En configuraciones vulnerables, un atacante no autenticado puede lograr ejecución remota de código a través del endpoint /locales/locale.json debido al manejo inadecuado de los parámetros locale y .
namespace
Esta variante del PoC apunta a entornos donde PHP-PEAR está instalado y se construyó/validó contra la máquina retirada de Hack The Box Pterodactyl: https://app.hackthebox.com/machines/Pterodactyl. También puede funcionar en otras configuraciones de laboratorio donde se cumplan las mismas condiciones.
Referencia de vulnerabilidad
Aviso de GitHub: GHSA-24wv-6c99-f843 (CVE-2025-49132)
Afectado: Pterodactyl Panel < 1.11.11
Corregido en: v1.11.11 (commit del parche 24c82b0…)
Idea de alto nivel (cómo funciona el PoC)
A alto nivel, el PoC encadena estos pasos:
Genera un payload ELF de reverse TCP Linux x64 con msfvenom.
Sirve ese ELF usando un servidor HTTP (una solicitud, luego sale).
Abusa del manejo vulnerable de /locales/locale.json para escribir un "stager" PHP en /tmp (a través de un truco PEAR pearcmd config-create).
Activa el stager a través del endpoint de locales para que:
descargue el ELF en /tmp,
lo haga ejecutable,
lo ejecute para conectarse de vuelta a su listener.
El script utiliza un cliente HTTP sin procesar en lugar de curl para el paso de "subida" porque algunas herramientas pueden normalizar o codificar caracteres de una manera que rompe la solicitud manipulada.
Nota: Este README se mantiene intencionalmente a un nivel defensivo/educativo. Use el código solo en entornos donde tenga permiso para probar.
Requisitos (local)
Python 3.10+ (probado solo con biblioteca estándar)
msfvenom disponible en $PATH (Metasploit Framework)
nc (netcat) si desea que el PoC inicie un auto-listener
Acceso de red entre su máquina de laboratorio y su instancia de laboratorio de Pterodactyl
Configuración
El script actualmente espera un nombre de host del panel HTB en el código fuente:
root@kitploit:~
host = "panel.pterodactyl.htb"
Además, la ruta codificada a PHP-PEAR está configurada como: ../../../../../usr/share/php/PEAR.
Si está probando esto fuera de la máquina Pterodactyl, deberá ajustar esta ruta según su configuración local.
Uso (solo laboratorio controlado)
1) Ejecución básica (auto-listener habilitado)
root@kitploit:~
python3 pterodactyl_rce.py <LHOST> <LPORT>
<LHOST>: su IP de callback accesible por el servidor de laboratorio
Genera un payload ELF (nombre de archivo aleatorio como shell_ab12cd34)
Inicia un servidor HTTP de un solo uso en :8080
Crea un stager PHP en /tmp/<random>.php
Activa el stager
Elimina el archivo ELF local después de la activación
Imprime un consejo para mejorar su shell (PTY)
Captura de pantalla de la explotación exitosa:
Problemas conocidos / Notas de laboratorio
Inestabilidad del laboratorio: La máquina/servicio objetivo puede ser inestable (timeouts, 5xx intermitentes, ejecución retrasada). Si una ejecución falla, reintente después de una breve pausa.
Reutilización de payload antiguo: El entorno puede activar ocasionalmente un archivo subido/stageado anterior. El script limpia solo un archivo local en la máquina atacante pero no toca el archivo en la carpeta /tmp/ de la máquina. Soluciones alternativas:
Re-ejecutar con un nuevo nombre de payload aleatorio (comportamiento predeterminado en este script).
Cambiar el puerto inicial de http.server de 8080 a otro puerto.
Cambiar su puerto de listener (por ejemplo, 4444 → 5555) y regenerar el payload.
Asegurarse de que su servidor HTTP esté sirviendo el archivo actual (detener cualquier servidor/listener anterior).
Si tiene acceso, eliminar manualmente los artefactos antiguos /tmp/<name>.php en el objetivo; de lo contrario, espere un tiempo y reintente.
Guía defensiva (qué corregir / cómo detectar)
Parche / mitigación
Actualizar a Pterodactyl Panel v1.11.11 o posterior.
No hay una solución alternativa dentro de la aplicación además de parchear; puede bloquear el endpoint /locales/locale.json a nivel del servidor web, pero podría romper las funciones de localización.
Ideas de detección
Busque solicitudes sospechosas como:
Solicitudes a /locales/locale.json con secuencias de traversal inusuales en locale=
Valores extraños de namespace= (nombres inesperados, cadenas largas, caracteres extraños)
Creación repentina de archivos inesperados en /tmp/ en el host del panel
Correlacione los registros web con:
nuevos procesos generados por el usuario www / PHP-FPM
conexiones salientes a destinos/puertos no estándar
uso inesperado de curl/wget desde el host del panel
Notas sobre el uso responsable
No escanee ni pruebe instancias públicas.
Si es operador de una instancia vulnerable, trate esto como crítico y parchee de inmediato.
Crédito del reportero/descubrimiento: El aviso de GitHub acredita a @azimoff337 por reportar GHSA-24wv-6c99-f843 / CVE-2025-49132.
Base de datos de avisos de GitHub / proceso CVE: por rastrear y publicar los detalles de la vulnerabilidad.
Hack The Box (HTB): este PoC se construyó/validó en un entorno de laboratorio controlado estilo HTB para aprendizaje e investigación defensiva. Sin spoilers para contenido activo de HTB.