
Exploit en Python para CVE-2026-109618: abusa de la corrupción del heap en session.upload_progress de PHP para sobrescribir zend_call_function y lograr ejecución remota de comandos.
██████╗ ██╗ ██╗██████╗ ██████╗ ███████╗██╗ ██╗███████╗██╗ ██╗ ██╔══██╗ ██║ ██║██╔══██╗╚════██╗██╔════╝██║ ██║██╔════╝██║ ██║ ██████╔╝ ███████║██████╔╝ █████╔╝███████╗███████║█████╗ ██║ ██║ ██╔═══╝ ██╔══██║██╔═══╝ ██╔═══╝ ╚════██║██╔══██║██╔══╝ ██║ ██║ ██║ ██║ ██║██║ ███████╗███████║██║ ██║███████╗███████╗███████╗ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝
Exploit de ejecución remota de código mediante el progreso de carga de sesiones PHP (CVE-2026-109618)
CVE-2026-109618 es una vulnerabilidad crítica de corrupción de memoria y lógica en el motor de PHP relacionada con el seguimiento del progreso de carga de archivos mediante sesiones (session.upload_progress).
El fallo reside en cómo se almacena en caché el puntero externo post_bytes_processed durante la primera fase de la petición (FILE_START) y no se refresca correctamente en los eventos de carga posteriores. Combinando una condición de carrera, la liberación destructiva de árboles Hash (HashTable.pDestructor = zval_ptr_dtor) y un heap spray controlado mediante estructuras rellenadas (tablas naturales empaquetadas t[]), es posible sobrescribir punteros a funciones internas del motor (como zend_call_function) para redirigir el flujo de ejecución a system() con comandos arbitrarios.
La herramienta requiere la biblioteca rich para renderizar la interfaz de consola, los banners y los paneles interactivos.
git clone [https://github.com/Ghxstsec/php2shell-poc.git](https://github.com/Ghxstsec/php2shell-poc.git)
cd php2shell-poc
Instala las dependencias requeridas
pip install -r requirements.txt
(O simplemente: pip install rich)
🚀 Uso y ejemplos
Ejecute el script con los parámetros adecuados para el sistema objetivo:
python3 php2shell.py -u "[https://target-domain.com/path/index.php](https://target-domain.com/path/index.php)" -c "uname -a; id"
Opciones de línea de comandos Parámetro Descripción Valor predeterminado -u, --url URL completa del endpoint PHP vulnerable Obligatorio -c, --command Comando a ejecutar en el sistema operativo uname -a; id; echo JACKALPOC --sid Identificador de sesión personalizado (PHPSESSID) a1b2c3d4e5f6a7b8c9d0e1f2a3 --stall Duración de la pausa en segundos 1.35 --dtor Dirección de memoria filtrada de zval_ptr_dtor (hex/int) 0 --call Dirección de memoria explícita para zend_call_function Calculada mediante offset --dry Modo de simulación: genera y guarda el payload binario en disco False 🛠️ Detalles técnicos
Heap Spraying: Utiliza un bloque de 149 elementos (tabla natural empaquetada con bins de 320 bytes) para garantizar la reutilización del bloque de memoria liberado.
Compatibilidad con SAPI: Diseñado para entornos evaluados bajo arquitecturas CGI/FastCGI y servidores front-end compatibles (como LiteSpeed LSAPI / Apache / Nginx).
Dry Run: Permite volcar el flujo de bytes exacto del payload multipart generado para análisis forense o depuración mediante el flag --dry.
🛠️ Detalles técnicos
Versiones afectadas: PHP 5.4 hasta PHP 8.x (parches publicados por los mantenedores de PHP para 8.2, 8.3, 8.4 y 8.5).
Heap Spraying: Utiliza un bloque de 149 elementos (tabla natural empaquetada con bins de 320 bytes) para garantizar la reutilización del bloque de memoria liberado.
Compatibilidad con SAPI: Diseñado para entornos evaluados bajo arquitecturas CGI/FastCGI y servidores front-end compatibles (como LiteSpeed LSAPI / Apache / Nginx).
Dry Run: Permite volcar el flujo de bytes exacto del payload multipart generado para análisis forense o depuración mediante el flag --dry.
📦 Archivo requirements.txt
rich>=13.0.0
urllib3>=1.26.0
⚠️ Aviso legal (Descargo de responsabilidad)
Este software ha sido creado exclusivamente con fines educativos, de investigación de seguridad y para uso en auditorías autorizadas (Pentesting). El autor (Ghxstsec) no asume ninguna responsabilidad por el mal uso o los daños causados por el uso indebido de este script en sistemas no autorizados.