Aviso Crítico de Seguridad PHP2Shell: Análisis de Amenazas CVE-2026-109618 y CVE-2026-109619 y Matriz de Vulnerabilidad
Aviso Crítico de Seguridad PHP2Shell: Análisis de Amenazas CVE-2026-109618 y CVE-2026-109619 y Matriz de Vulnerabilidad
<time datetime="2026-10-23">Verificado: 23 de octubre de 2026</time> · Referencias oficiales: php.net Security Advisories, INCIBE, GitHub Security Advisories (GHSA-w8hw-w9fx-j79w / GHSA-6wmf-4rv5-p3rp)
El 21 de octubre de 2026, la comunidad internacional de investigación en ciberseguridad y el equipo central de desarrollo de PHP divulgaron dos vulnerabilidades críticas de ejecución remota de código (RCE), identificadas de forma conjunta bajo la denominación PHP2Shell (CVE-2026-109618 y CVE-2026-109619).
Con una puntuación base de gravedad CVSS v4.0 de 9.2 (Crítica), estas fallas permiten a un atacante remoto no autenticado ejecutar comandos arbitrarios del sistema operativo bajo los privilegios del proceso del servidor web subyacente o del trabajador de PHP-FPM (www-data, nginx, apache). La vulnerabilidad no reside en la lógica de las aplicaciones (como WordPress, Drupal, PrestaShop, Laravel o Symfony), sino en la capa de procesamiento en lenguaje C nativo del motor de PHP (ext/session/session.c y main/rfc1867.c), lo que hace que los filtros de entrada a nivel de aplicación sean completamente ineficaces.
1. Matriz de Características y Comparativa Técnica
| Característica | CVE-2026-109618 | CVE-2026-109619 |
|---|---|---|
| Clase de Vulnerabilidad | Corrupción de Estado de Memoria por OOM | Estado Global Residual / Use-After-Free (UAF) |
| Puntuación CVSS v4.0 | 9.2 (Crítico: AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H) | 9.2 (Crítico: AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H) |
| Requisito de Autenticación | Ninguno (No Autenticado) | Ninguno (No Autenticado) |
| Exposición Predeterminada | Habilitada por defecto (session.upload_progress.enabled = On) | Habilitada por defecto (session.upload_progress.enabled = On) |
| Punto de Disparo | Fase de análisis de cuerpo HTTP (antes de ejecutar código PHP) | Ciclo de análisis multipart y desmantelamiento de sesión |
| Entornos Impactados | PHP-FPM, Apache mod_php, FrankenPHP, LiteSpeed, Nginx Unit | PHP-FPM, Apache mod_php, FrankenPHP, LiteSpeed, Nginx Unit |
| Versiones Impactadas | PHP 5.4 hasta 8.5 inclusive | PHP 5.4 hasta 8.5 inclusive |
⚠️ Aclaración Crítica sobre el Rango de Versiones: Diversos resúmenes preliminares han indicado erróneamente que la vulnerabilidad se limita a las ramas
PHP 5.x–8.4. Esto es falso y peligroso. La rama PHP 8.5 también es vulnerable en todas las versiones anteriores a la compilación 8.5.12. Dado que la directivasession.upload_progress.enabledha estado activa de forma predeterminada desde el lanzamiento de PHP 5.4, prácticamente cualquier servidor de producción que no haya sido configurado manualmente para apagarla está en riesgo.
2. Ciclo de Vida del Ataque y Evasión de Defensas Perimetrales
El peligro fundamental de PHP2Shell reside en cuándo se ejecuta la lógica vulnerable en lenguaje C. Se activa durante la fase de lectura y análisis del flujo HTTP SAPI, mucho antes de que el script solicitado comience su ejecución.
El siguiente diagrama detalla cómo las defensas tradicionales de aplicaciones web (WAF y middlewares) son físicamente superadas:
[ LLEGADA DE PETICIÓN HTTP POST EXTERNA ]
(Cualquier ruta válida o inexistente: /index.php, /login, /404)
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Capa SAPI del Motor PHP (Núcleo en Lenguaje C) │
│ - Analiza cabeceras HTTP y Content-Type: multipart/form-data │
└───────────────────────────┬─────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ ext/session/session.c :: php_session_rfc1867_callback() │
│ - Detecta parámetro 'PHP_SESSION_UPLOAD_PROGRESS' │
│ - Almacena puntero interno en bruto: cached_post_bytes │
│ - [FALLA CRÍTICA]: Ocurre OOM o interrupción por zend_bailout│
│ - La memoria se libera pero el puntero persiste -> DANGLING │
└───────────────────────────┬─────────────────────────────────┘
│
┌────────────────┴────────────────┐
▼ ▼
[ Petición Normal de Usuario ] [ Ataque Explotación PHP2Shell ]
- Registra bytes en $_SESSION - Vacía contenedores pequeños de ZMM
- Limpieza ordenada de memoria - Inyecta zval falso de 16 bytes
- Redirige llamada hacia zif_system()
- Consigue Shell Remoto Inmediato
3. Matriz de Versiones y Parches Oficiales
El equipo de seguridad de PHP ha publicado versiones de mantenimiento de emergencia para todas las ramas oficiales con soporte activo o soporte de seguridad:
| Rama de PHP | Versión Mínima Segura (Parche Oficial) | Estado de Soporte y Recomendación |
|---|---|---|
| PHP 8.5 | 8.5.12 o superior | Actualizar de inmediato vía gestor de paquetes o compilación |
| PHP 8.4 | 8.4.27 o superior | Actualizar de inmediato |
| PHP 8.3 | 8.3.36 o superior | Actualizar de inmediato |
| PHP 8.2 | 8.2.35 o superior | Actualizar de inmediato |
| PHP 8.1 / 8.0 / 7.4 / 5.x | Sin versión oficial upstream (EOL) | Ramas obsoletas sin soporte. Requiere parches retrocompatibles (backports) de distribuciones (Ubuntu Pro, Debian LTS, CloudLinux) o mitigación de emergencia |
4. Verificación y Diagnóstico en Servidores Linux
Para comprobar si sus instancias están expuestas a la explotación activa de PHP2Shell, ejecute la siguiente batería de diagnósticos en la terminal del sistema.
Diagnóstico 1: Comprobar la versión instalada de PHP
php -v | head -n 1
Si su salida indica, por ejemplo, PHP 8.3.20 (cli), su sistema está por debajo del umbral mínimo de seguridad 8.3.36 y se encuentra vulnerable.
Diagnóstico 2: Inspección de directivas de progreso de sesión
php -i | grep -E "session.upload_progress"
Salida esperada en sistemas vulnerables:
session.upload_progress.cleanup => On => On
session.upload_progress.enabled => On => On
session.upload_progress.freq => 1% => 1%
session.upload_progress.min_freq => 1 => 1
session.upload_progress.name => PHP_SESSION_UPLOAD_PROGRESS => PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix => upload_progress_ => upload_progress_
Si session.upload_progress.enabled muestra el valor On, el vector de ataque se encuentra físicamente accesible.
Diagnóstico 3: Comprobación de parches retrocompatibles (Debian / Ubuntu)
zgrep -E "CVE-2026-109618|CVE-2026-109619" /usr/share/doc/php*/changelog.Debian.gz
Si la herramienta devuelve entradas de registro firmadas por el mantenedor del paquete, el parche ha sido aplicado a nivel de distribución. De lo contrario, el sistema está expuesto.
5. Protocolo de Mitigación Inmediata con Cero Downtime
Si los procedimientos de validación técnica o las dependencias internas de sus aplicaciones impiden actualizar los binarios de PHP de forma instantánea, aplique la mitigación oficial recomendada, la cual elimina la superficie de ataque sin interrumpir el servicio ni requerir reinicios completos del sistema operativo.
Paso 1: Deshabilitar upload_progress en la configuración de PHP
Abra los archivos de configuración php.ini de su entorno (por ejemplo, /etc/php/8.3/fpm/php.ini y /etc/php/8.3/cli/php.ini):
; Mitigación de emergencia contra PHP2Shell (CVE-2026-109618 / 109619)
session.upload_progress.enabled = Off
session.upload_progress.cleanup = On
O despliegue un archivo complementario con máxima prioridad:
echo -e "; Fix CVE-2026-109618 & CVE-2026-109619\nsession.upload_progress.enabled = Off" | sudo tee /etc/php/8.3/mods-available/php2shell-fix.ini
sudo phpenmod php2shell-fix
Paso 2: Recarga suave del demonio (Graceful Reload)
Evite ejecutar restart. Una recarga suave instruye a los procesos trabajadores a releer la configuración tras completar las peticiones en curso, garantizando cero conexiones descartadas:
# Para sistemas Ubuntu y Debian
sudo systemctl reload php8.3-fpm
# Para sistemas RHEL, Rocky Linux, AlmaLinux y cPanel
sudo systemctl reload php-fpm
# Comprobación de sintaxis de configuración
sudo php-fpm8.3 -t
6. Reglas de Detección Perimetral y Firmas IDS
Para monitorizar y bloquear los intentos de explotación en la frontera de red antes de que alcancen el backend, integre las siguientes firmas en su infraestructura de seguridad:
Regla Suricata 7.x (SID: 10261092):
alert http any any -> $HTTP_SERVERS any ( \
msg:"INCIBE-ALERT PHP2Shell Multipart Session Exploit Attempt (CVE-2026-109619)"; \
flow:established,to_server; \
content:"POST"; http_method; \
content:"multipart/form-data"; http_header; nocase; \
content:"PHP_SESSION_UPLOAD_PROGRESS"; http_client_body; nocase; \
classtype:web-application-attack; \
sid:10261092; rev:1; \
)
Regla Falco para Detección de Procesos en Tiempo de Ejecución:
- rule: PHP Worker Spawning Unauthorized Interactive Shell
desc: Detecta si un proceso de PHP-FPM o Apache inicia una shell del sistema operativo
condition: >
spawned_process and
proc.pname in (php-fpm, php-fpm8.2, php-fpm8.3, php-fpm8.4, php-fpm8.5, apache2, httpd) and
proc.name in (sh, bash, dash, zsh, nc, netcat, python, perl, curl, wget)
output: >
CRITICAL: Posible compromiso por PHP2Shell detectado! (usuario=%user.name comando=%proc.cmdline pid=%proc.pid)
priority: CRITICAL
tags: [cve_2026_109619, rce, php2shell]
7. Conclusión y Hoja de Ruta Estratégica
La vulnerabilidad PHP2Shell marca un hito crítico en la seguridad del ecosistema PHP moderno al demostrar que los componentes en lenguaje C subyacentes pueden ser manipulados mediante peticiones HTTP estándar de bajo volumen. Las organizaciones deben considerar la desactivación de session.upload_progress como un paso innegociable de endurecimiento de servidores (Hardening Baseline) y planificar de forma prioritaria la descontinuación definitiva de todas las versiones EOL (PHP 7.4 y 8.0) en su parque de infraestructura.