vulnerabilities php2shell vulnerabilidad

Aviso Crítico de Seguridad PHP2Shell: Análisis de Amenazas CVE-2026-109618 y CVE-2026-109619 y Matriz de Vulnerabilidad

php2shell.run Research Lab •

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ísticaCVE-2026-109618CVE-2026-109619
Clase de VulnerabilidadCorrupción de Estado de Memoria por OOMEstado Global Residual / Use-After-Free (UAF)
Puntuación CVSS v4.09.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ónNinguno (No Autenticado)Ninguno (No Autenticado)
Exposición PredeterminadaHabilitada por defecto (session.upload_progress.enabled = On)Habilitada por defecto (session.upload_progress.enabled = On)
Punto de DisparoFase de análisis de cuerpo HTTP (antes de ejecutar código PHP)Ciclo de análisis multipart y desmantelamiento de sesión
Entornos ImpactadosPHP-FPM, Apache mod_php, FrankenPHP, LiteSpeed, Nginx UnitPHP-FPM, Apache mod_php, FrankenPHP, LiteSpeed, Nginx Unit
Versiones ImpactadasPHP 5.4 hasta 8.5 inclusivePHP 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 directiva session.upload_progress.enabled ha 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 PHPVersión Mínima Segura (Parche Oficial)Estado de Soporte y Recomendación
PHP 8.58.5.12 o superiorActualizar de inmediato vía gestor de paquetes o compilación
PHP 8.48.4.27 o superiorActualizar de inmediato
PHP 8.38.3.36 o superiorActualizar de inmediato
PHP 8.28.2.35 o superiorActualizar de inmediato
PHP 8.1 / 8.0 / 7.4 / 5.xSin 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.