Análisis Profundo y Explotación de la Vulnerabilidad PHP2Shell (CVE-2026-109618 / CVE-2026-109619)
Ficha Técnica del Documento
Código de Informe: RED-ADV-2026-PHP2SHELL
Clasificación de Severidad: CRÍTICA (CVSS v4.0: 9.2)
Aplica a: Servidores web y entornos de aplicación corriendo versiones de PHP desde la 5.4 hasta la 8.5 (sin actualizar).
Impacto Primario: Ejecución Remota de Código (RCE) sin autenticación (Unauthenticated Remote Code Execution).
Nivel de Explotación Observado: Explotación activa detectada en redes globales (In the Wild).
1. Resumen Ejecutivo
El equipo de Investigación de Amenazas de REDTISEG emite la presente alerta técnica sobre PHP2Shell, la denominación atribuida a un conjunto de dos vulnerabilidades críticas que residen en el núcleo del motor de PHP (Zend Engine).
Estas vulnerabilidades permiten a un atacante remoto no autenticado ejecutar comandos arbitrarios a nivel de sistema operativo en el servidor web receptor mediante el envío de solicitudes HTTP manipuladas. A diferencia de fallos convencionales en código de aplicaciones (como inyecciones SQL o subida de archivos maliciosos), PHP2Shell afecta a la capa más profunda del intérprete, comprometiendo la integridad del proceso del servidor web antes o durante la fase de inicialización de la solicitud.
2. Arquitectura Interna y Mecanismo del Fallo
El problema se origina en la interacción entre la gestión de memoria de bajo nivel del Zend Memory Manager (ZMM) y el ciclo de vida de inicialización de peticiones dentro del motor PHP (Server Application Programming Interface o SAPI).
Desglose de los CVEs:
CVE-2026-109618 — Corrupción de Memoria en Condición Out-Of-Memory (OOM):
Durante la fase
php_request_startup(), el intérprete asigna estructuras internas clave (tablas de símbolos globales, buffers de entradaPOST/GETy estructuras superglobales).Si la solicitud entrante fuerza al intérprete a alcanzar el límite de memoria del proceso (
memory_limito el límite del sistema), el asignador de memoria dispara una excepción de tipo Out Of Memory (OOM).El fallo: Las rutinas de limpieza (cleanup routines) invocadas al abortar la ejecución asumen erróneamente que ciertas estructuras de punteros fueron completamente inicializadas. Al liberar bloques de memoria parcialmente formados, se genera una corrupción de memoria en el heap, dejando punteros en un estado inconsistente (dangling pointers).
CVE-2026-109619 — Estado Global Inconsistente (Stale Global State):
En arquitecturas de servidores donde los procesos worker de PHP persisten para atender múltiples peticiones consecutivas (por ejemplo, Apache
mod_phpo pools de procesos enPHP-FPM), el fallo de limpieza del CVE-2026-109618 deja estructuras de memoria residuales corruptas en el estado global del proceso.La siguiente petición atendida por dicho worker reutiliza este estado “viciado”, permitiendo al atacante direccionar el flujo de ejecución del programa hacia zonas arbitarias de la memoria física del proceso mediante manipulación de punteros de función.
3. Morfología del Ataque y Cadena de Explotación (Kill Chain)
La ejecución del ataque no requiere credenciales ni interacción por parte del usuario. La cadena de explotación se compone de 5 fases estructuradas:
Fase 1: Prospección y Moldeo de la Solicitud (Payload Crafting)
El atacante envía una petición HTTP POST estructurada con cabeceras específicas y un cuerpo multipartes (multipart/form-data) diseñado con una distribución de tamaño idónea para sobrepasar el umbral de asignación de memoria sin sobrepasar las restricciones de capa de red.
Fase 2: Inducción de Excepción OOM
El motor PHP recibe la petición y comienza la reserva de buffers. Al procesar las estructuras de datos maliciosas, el intérprete agota el espacio asignado por el Zend Allocator, abortandoabruptamente el procesamiento e ingresando a las rutinas de desasignación de emergencia.
Fase 3: Corrupción del Heap y Punteros Huérfanos
Las rutinas de destrucción de variables destructuran la memoria en orden inverso. Al encontrar estructuras no inicializadas correctamente, el puntero de control de memoria es sobrescrito con valores inyectados por el atacante dentro del cuerpo de la petición HTTP.
Fase 4: Reutilización de Proceso (Process Hijacking)
El subproceso o thread afectado no finaliza de forma limpia. Al recibir la siguiente interacción, el hilo invoca la dirección de memoria sobrescrita buscando punteros de funciones nativas de C (por ejemplo, zend_execute_ex o execve).
Fase 5: Ejecución Remota de Código (RCE)
El atacante obtiene ejecución directa de comandos con los privilegios del usuario bajo el cual corre el servicio web (e.g., www-data, apache o nginx). Desde este punto, el atacante puede establecer una reverse shell, realizar movimiento lateral o comprometer bases de datos asociadas.
4. Particularidades de Entorno: mod_php vs. PHP-FPM
Módulos integrados (
mod_phpen Apache HTTPD): Representa el escenario de mayor peligro. Dado que PHP comparte el mismo espacio de direcciones que el proceso maestro o hijo de Apache, la explotación ocurre de forma previa a la ejecución de cualquier script.phpalojado en el servidor. Un atacante puede explotar la vulnerabilidad atacando cualquier URL válida o inexistente que sea procesada por el módulo.Procesadores independientes (
PHP-FPM/ FastCGI): Aunque la segregación de procesos aísla el servidor web principal (Nginx/Apache), los trabajadores dePHP-FPMsufren la misma condición de persistencia en los pools, lo que permite el secuestro del proceso worker y el compromiso de la aplicación.
5. Indicadores de Compromiso (IoCs) y Métodos de Detección
Los equipos de SOC y administradores de infraestructura de REDTISEG deben monitorear los siguientes eventos en sus sistemas de supervisión:
Registros de Servidor Web (Access & Error Logs):
Ráfagas inusuales de peticiones
POSTde gran volumen que resultan en respuestas con código de estado HTTP 500 (Internal Server Error).Mensajes en logs de error del tipo:
child process XXXX exited on signal 11 (SIGSEGV)oZend MM Heap Corrupted.
Anomalías de Memoria y Core Dumps:
Registros de consumo de memoria con picos abruptos y caídas repentinas de procesos
php-fpmohttpd.Generación imprevista de archivos core dump en el directorio del servidor web.
Firmas de Red / Inspección de Tráfico WAF:
Peticiones HTTP con encabezados
Content-Lengthatípicos combinados con un número elevado de variables form-data con nombres repetitivos o extremadamente largos.
6. Matriz de Versiones y Hoja de Ruta de Mitigación
No existe ninguna configuración del archivo php.ini ni regla de entorno que neutralice completamente el fallo sin actualizar los binarios del motor de PHP. La remediación definitiva requiere la sustitución de las librerías vulnerables.
Matriz de Actualización Recomendada:
| Rama de PHP | Estado de la Rama | Versión Vulnerable | Versión Mínima Segura |
| PHP 8.5 | Desarrollo / Release | $\le$ 8.5.11 | 8.5.12 |
| PHP 8.4 | Soporte Activo | $\le$ 8.4.26 | 8.4.27 |
| PHP 8.3 | Soporte Activo | $\le$ 8.3.35 | 8.3.36 |
| PHP 8.2 | Soporte de Seguridad | $\le$ 8.2.34 | 8.2.35 |
| PHP $\le$ 8.1 | EOL (Fin de Vida) | Todas las versiones | Sin parche oficial (Requiere Backport o Migración) |
7. Plan de Acción Recomendado para Clientes REDTISEG
Paso 1: Identificación e Inventario de Activos
Realizar un escaneo de versiones en toda la infraestructura de servidores utilizando sus herramientas de gestión de parches o mediante el comando
php -vy verificación de módulos instalados.
Paso 2: Aplicación de Parches Oficiales
Desplegar las versiones corregidas en entornos de prueba y proceder a la actualización en producción.
Importante: Es obligatorio reiniciar completamente los servicios (
systemctl restart php-fpm/systemctl restart apache2) tras instalar las actualizaciones para vaciar los procesos en memoria viciados.
Paso 3: Gestión de Sistemas Legacy (Versiones EOL)
Para sistemas que utilicen versiones obsoletas de PHP (PHP 5.x, 7.x, 8.0, 8.1), se debe verificar si el proveedor de la distribución Linux (Ubuntu, Debian, RHEL) ha liberado parches retrocompatibles (backports). En su defecto, se recomienda aislar los servidores tras un WAF con reglas heurísticas activas o detrás de un segmento VPN/ACL estricto mientras se planifica la migración.
Paso 4: Endurecimiento Operativo (Hardening)
Ajustar los límites de memoria (
memory_limit) a valores razonables acordes al uso real del aplicativo para mitigar vectores de consumo masivo.Restringir el tamaño máximo de peticiones
POSTpermitidas (upload_max_filesizeypost_max_size) a nivel del proxy inverso (Nginx / Cloudflare / F5).
Para asistencia técnica en el despliegue de parches, auditoría de vulnerabilidades o configuración de firmas en firewalls de capa de aplicación, póngase en contacto directamente con el área de Soporte Técnico y SOC de REDTISEG.
