
CVE-2026-55579 – RCE no autenticado en Pheditor mediante contraseña predeterminada codificada "admin". Exploit completo en Python con carga de archivos y ejecución en terminal. Sin dependencias.
TL;DR: Pheditor (todas las versiones) se distribuye con una contraseña de administrador predeterminada hardcodeada (
admin) incrustada en su código fuente. No se fuerza el cambio de contraseña en el primer inicio de sesión, solo una advertencia visual. Cualquier atacante no autenticado puede iniciar sesión como administrador y abusar del panel de terminal integrado (action=terminal) para ejecutar comandos arbitrarios del sistema operativo con los privilegios del servidor web. Combinado con las capacidades de carga de archivos, esto produce Ejecución Remota de Código (RCE) no autenticada.
| Atributo | Detalles |
|---|---|
| Identificador CVE | CVE-2026-55579 |
| Software Afectado | Pheditor (todas las versiones hasta la HEAD actual inclusive) |
| Versión Corregida | Ninguna aún (parche del proveedor no publicado; se requiere solución alternativa) |
| Clase de Vulnerabilidad | CWE-798: Uso de Credenciales Hardcodeadas |
| Puntuación CVSS v3.1 | 9.8 (Crítico) CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Autenticación | Ninguna – las credenciales predeterminadas son públicamente conocidas |
| Verificación | Confirmado contra una instalación nueva de Pheditor |
La vulnerabilidad se origina a partir de un hash SHA‑512 hardcodeado de la contraseña admin dentro de pheditor.php (línea 11):
define('PASSWORD', 'c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec');
Este hash corresponde a:
echo -n 'admin' | sha512sum
Por qué esto es un fin del juego:
pheditor.php).admin/admin, un atacante puede iniciar sesión y obtener acceso completo a:
action=terminal)action=upload)action=open/action=save)No hay limitación de velocidad, bloqueo, ni factor de autenticación adicional.
El ataque es extremadamente simple y requiere cero conjeturas:
POST a pheditor.php con pheditor_password=admin. El servidor establece una cookie de sesión.token.POST con:
action=terminaltoken=<extraído>command=<comando del SO>dir= (opcional)<pre> y se puede analizar limpiamente.Alternativamente, el atacante puede subir una web shell o sobrescribir archivos de la aplicación.
Clona el repositorio oficial e inicia un servidor local:
git clone https://github.com/pheditor/pheditor.git /tmp/pheditor
cd /tmp/pheditor
php -S localhost:8080 pheditor.php &
El exploit Python proporcionado depende solo de la biblioteca estándar de Python (sin dependencias externas). Cuenta con CLI basada en argparse, manejo avanzado de errores, modo verbose y control de tiempo de espera.
python3 exploit.py http://localhost:8080/pheditor.php "id; hostname; whoami"
[*] Logging in with password: admin
[+] Login successful
[*] Extracting CSRF token...
[+] Token: a1b2c3d4e5f6...
[*] Executing: id; hostname; whoami
==================================================
Command Output:
==================================================
uid=33(www-data) gid=33(www-data) groups=33(www-data)
ubuntu
www-data
==================================================
Una explotación exitosa otorga al atacante:
root), el atacante obtiene control total del anfitrión.Dado que Pheditor se utiliza a menudo en entornos de desarrollo o como un gestor de archivos ligero, los atacantes pueden encontrarlo y explotarlo fácilmente para obtener puntos de apoyo iniciales.
pheditor_password=admin).Monitorea tu entorno en busca de indicadores de compromiso:
pheditor.php con pheditor_password=admin o action=terminal.sh, bash, nc, curl o wget.Para una exploración más profunda de la cadena de explotación y payloads adicionales, consulta ANALYSIS.md.
Descargo de responsabilidad: Este repositorio contiene una Prueba de Concepto (PoC) destinada estrictamente a fines de pruebas de seguridad defensivas, educativas y autorizadas. No utilices este código contra sistemas que no poseas o para los que no tengas permiso explícito por escrito para probar. Los autores no asumen ninguna responsabilidad por el mal uso.