Investigación de amenazas

PHP2Shell (CVE-2026-109618 y CVE-2026-109619): las fallas críticas de RCE en PHP y cómo defenderse

Autor: Equipo de Investigación de Amenazas de Moftgate(Investigador sénior de seguridad)•23 de octubre de 2026•Actualizado: 1 de noviembre de 2026•10 min de lectura•✓Revisado por expertos

PHP2Shell es el nombre de dos fallas críticas de ejecución remota de código sin autenticación en el núcleo de PHP. Cubrimos las versiones afectadas, el plan de parcheo y las mitigaciones temporales para quienes aún no pueden parchear, desde la perspectiva del defensor.

Conclusión clave

PHP2Shell son dos fallas críticas del núcleo de PHP divulgadas en octubre de 2026: CVE-2026-109618 y CVE-2026-109619. Ambas pueden permitir la ejecución remota de código (RCE) sin autenticación y tienen una puntuación de 9.2 en CVSS v4.0. La primera y única solución definitiva es actualizar PHP a una versión parcheada.

  • PHP2Shell no es un producto; es el nombre compartido de dos fallas críticas de RCE en el núcleo de PHP.
  • CVE-2026-109618: RCE por corrupción de memoria (OOM, motor Zend). CVE-2026-109619: RCE por estado global obsoleto; una ruta de ataque está ligada a session.upload_progress.
  • El equipo de PHP publicó los parches el 21 de octubre de 2026: 8.5.12, 8.4.27, 8.3.36 y 8.2.35.
  • Parchear es lo primero. Las mitigaciones temporales (desactivar session.upload_progress, una regla de WAF) son para cuando no puede parchear de inmediato; no son una solución permanente.

¿Qué es PHP2Shell?

PHP2Shell es el nombre dado a dos fallas de seguridad distintas en el núcleo del lenguaje PHP. Como las fallas están en el propio PHP, se ve afectada una superficie muy amplia, incluidos WordPress, Drupal, Joomla y aplicaciones a medida que funcionan sobre PHP. Lo más peligroso es que el ataque no requiere autenticación: el atacante no necesita una cuenta de usuario válida.

Una explotación exitosa da al atacante ejecución remota de código (RCE) en el servidor. A partir de ahí pueden seguir pasos como leer archivos, exfiltrar datos, crear nuevos usuarios y preparar el terreno para un ransomware. Por eso PHP2Shell se clasifica como crítica.

Las dos fallas: CVE-2026-109618 y CVE-2026-109619

CVETipoNota clave
CVE-2026-109618RCE por corrupción de memoria (OOM)Está en el núcleo del motor Zend; no se puede desactivar con un solo ajuste INI, por lo que la solución es el parche.
CVE-2026-109619RCE por estado global obsoletoUna ruta de explotación está ligada a session.upload_progress; desactivar ese ajuste es una medida parcial y temporal.

El proyecto PHP clasifica ambas fallas con 9.2 (crítica) en CVSS v4.0. El estado de la explotación cambia según la fuente y la fecha. El 23 de octubre de 2026, CrowdStrike escribió que solo vio pruebas e intentos fallidos. El 29 de octubre de 2026, Unit 42 de Palo Alto Networks informó de explotación activa contra interfaces de administración de PAN-OS expuestas a internet. No retrase el parche.

Versiones afectadas y parcheadas

  • En riesgo: todas las instalaciones de PHP que atienden solicitudes web. Esto incluye PHP-FPM, Apache mod_php, php-cgi, FrankenPHP y LiteSpeed. El equipo de PHP considera que el riesgo es mayor en mod_php.
  • Versiones parcheadas (21 de octubre de 2026): PHP 8.5.12, 8.4.27, 8.3.36 y 8.2.35.
  • PHP 8.1 y anteriores han llegado al fin de su vida útil (EOL) y no reciben versiones del proyecto PHP. El equipo de seguridad de PHP publicó backports de código limitados para 7.4, 8.0 y 8.1. PHP 8.2 llega a EOL el 31 de diciembre de 2026.
  • Los paquetes de las distribuciones siguen una vía separada. Los paquetes de Debian y Ubuntu, por ejemplo, pueden incorporar la corrección con un número de versión distinto al de la rama oficial.
  • Por eso, revise la versión del paquete de su propia distribución, no solo el número de la rama oficial.

Prioridad 1: parchear

  • Identifique la versión de PHP en ejecución y cómo se ejecuta (mod_php, PHP-FPM, CLI).
  • Instale el paquete parcheado de su distribución y luego reinicie PHP-FPM o el servidor web.
  • Reconstruya las imágenes de contenedor desde una imagen base parcheada. Si solo parchea el contenedor en ejecución, la imagen sigue expuesta.
  • En servidores que alojan varias versiones de PHP, actualice cada una por separado.
  • Si está en una versión EOL, planifique la migración a una versión compatible; los backports de código son solo un puente temporal.

Si no puede parchear de inmediato

Las mitigaciones temporales pueden dificultar la explotación, pero no cierran la falla. CVE-2026-109618 está en el núcleo del motor Zend y no puede corregirse con ningún ajuste INI. Aplique las mitigaciones y parchee cuanto antes.

Mitigaciones temporales (un puente antes de parchear)

  • CVE-2026-109618: establezca memory_limit=-1 donde las aplicaciones no puedan cambiarlo (por ejemplo, php_admin_value). Esto no impide los fallos de asignación subyacentes.
  • CVE-2026-109618: reduzca post_max_size. Use 8M sin carga de archivos y 32M con carga de archivos. Mantenga upload_max_filesize por debajo de post_max_size.
  • No use RLIMIT_AS ni RLIMIT_DATA. Estos límites pueden causar el fallo de asignación vulnerable. Use un límite de contenedor o cgroup.
  • CVE-2026-109619: establezca session.upload_progress.enabled=0 en php.ini, un pool de FPM o la configuración del servidor (no con ini_set() ni .user.ini de FPM) y reinicie todos los workers. Esto bloquea las rutas de sesión confirmadas, no otras variantes.
  • CVE-2026-109619: en PHP 8.5, establezca fatal_error_backtraces=0 y reinicie todos los workers.
  • Corrija los errores fatales y los tiempos de ejecución agotados que un atacante pueda provocar.
  • Establezca límites en el servidor web, el proxy o el WAF para el tamaño de solicitud, el número de campos, las partes multipart, las cabeceras y la profundidad de anidamiento. También puede limitar las solicitudes POST multipart que contienen PHP_SESSION_UPLOAD_PROGRESS.
  • Pruebe estas medidas primero en un entorno de staging. El equipo de PHP indica que reducen la exposición, pero no hacen segura la instalación.

Un problema aparte: CVE-2026-115560

El equipo de PHP publicó un aviso sobre esta falla el 23 de octubre de 2026. Las versiones del 21 de octubre no la corrigen. Solo ocurre cuando una aplicación configura session.serialize_handler como php_binary o php_serialize, lo cambia a php en tiempo de ejecución con ini_set() y mantiene activo session upload progress. Si usa esta configuración, establezca session.upload_progress.enabled=0. El equipo de PHP indicó que publicará el aviso completo con la próxima versión regular.

Detección: ¿cómo saber si fue explotado?

La explotación por corrupción de memoria puede provocar que el proceso objetivo se caiga y se reinicie. Se recomienda una detección por capas:

  • Comportamiento de procesos: que el proceso PHP-FPM o del servidor web lance un shell, un escáner de red o una herramienta de cifrado es una alarma fuerte.
  • Registros de caídas y segfault: deben investigarse las entradas de segfault/caída repentinas y repetidas en el servidor web.
  • Integridad de archivos: los archivos nuevos o modificados inesperados en la raíz web deben generar una alerta.
  • Registros de acceso: busque solicitudes multipart inusuales que contengan un campo PHP_SESSION_UPLOAD_PROGRESS y solicitudes cortas repetidas a archivos desconocidos.
  • Tráfico saliente: las conexiones externas inesperadas desde el servidor pueden indicar exfiltración de datos.

Si observa señales de explotación

Aísle el servidor de la red y conserve los registros y una imagen de memoria. Inicie su proceso de respuesta a incidentes, rote las credenciales y no restaure el sistema antes de analizar la causa raíz.

Cómo ayuda Moftgate frente a esta falla

Moftgate no sustituye al parche; primero debe actualizar PHP. Pero el agente de endpoint de Moftgate supervisa de forma continua el comportamiento de los procesos y los cambios de archivos en los endpoints, incluidos los servidores, lo que ayuda a detectar pronto un intento de explotación. Que el proceso PHP-FPM lance un comando anómalo, o que se escriba un archivo inesperado en la raíz web, genera una alerta en la consola central. La copia de seguridad WORM integrada mantiene una copia inmutable de los datos si el ataque llega a la fase de ransomware. El motor de DLP bloquea la salida si el atacante intenta sacar datos con el acceso obtenido.

Conclusión estratégica

La única solución real para PHP2Shell es el parche. Las mitigaciones temporales ganan tiempo; la supervisión del endpoint basada en comportamiento ofrece alerta temprana hasta el parcheo y después. Ambas deben trabajar juntas.

Experiencia del autor y estándares editoriales
E
Equipo de Investigación de Amenazas de MoftgateInvestigador sénior de seguridad

El Equipo de Investigación de Amenazas de Moftgate estudia las amenazas a aplicaciones web y endpoints con fines defensivos. Este artículo es solo para defensa y concienciación y no contiene código de ataque funcional ni herramientas de explotación.

✓Revisado técnicamente por: Consejo Asesor de Seguridad de Moftgate
Preguntas frecuentes

Respuestas de expertos a las preguntas clave de profesionales

¿Qué es exactamente PHP2Shell?

Es el nombre compartido de dos fallas críticas en el núcleo de PHP (CVE-2026-109618 y CVE-2026-109619). Ambas pueden permitir la ejecución remota de código sin autenticación.

¿A qué versiones de PHP debo actualizar?

Las versiones parcheadas que el equipo de PHP publicó el 21 de octubre de 2026 son 8.5.12, 8.4.27, 8.3.36 y 8.2.35. Revise también la versión del paquete con backport de su distribución. PHP 8.1 y anteriores son EOL; migre a una versión compatible.

¿Basta con desactivar session.upload_progress?

No. Ese ajuste es una medida temporal que dificulta una ruta de CVE-2026-109619 y no bloquea toda la explotación. CVE-2026-109618 está en el núcleo del motor Zend y no puede desactivarse con ningún ajuste INI. La única solución definitiva es el parche.

¿Los parches del 21 de octubre también corrigen CVE-2026-115560?

No. CVE-2026-115560 es una falla aparte. Solo ocurre en aplicaciones que cambian el serialize handler a php en tiempo de ejecución. Para ellas, el equipo de PHP recomienda session.upload_progress.enabled=0.

¿Cómo sé si fui explotado?

Las señales incluyen que el proceso PHP-FPM o del servidor web lance comandos anómalos, registros repetidos de segfault/caída, archivos inesperados en la raíz web y solicitudes inusuales que contienen PHP_SESSION_UPLOAD_PROGRESS. En caso de duda, aísle el servidor e inicie la respuesta a incidentes.

Fuentes autorizadas y estándares regulatorios

SEGURIDAD EMPRESARIAL Y RESILIENCIA DEL NEGOCIO

Logre visibilidad completa de endpoints con Moftgate

Despliegue en su infraestructura soberana en menos de 15 minutos. Los primeros 200 endpoints son gratis el primer año.