PHP2Shell: protege PHP con Cloudflare WAF mientras parcheas

protecciónphp2shell

Resume este artículo con tu IA

Cómo bloquear PHP2Shell (CVE-2026-109618/19) con las 7 reglas de Cloudflare WAF mientras actualizas PHP. Paso a paso, ID de reglas y verificación.

PHP mueve una parte enorme de la web: webs corporativas, tiendas online, intranets, portales de clientes, campus virtuales… Muchas veces sin que nadie en la empresa recuerde que está ahí. Por eso PHP2Shell afecta a tantas organizaciones a la vez.

El 21 de octubre de 2026 el proyecto PHP publicó parches de emergencia para CVE-2026-109618 y CVE-2026-109619, dos vulnerabilidades críticas en el núcleo de PHP que permiten la ejecución remota de código sin autenticación, con los privilegios del proceso del servidor web. Afectan a cualquier instalación de PHP que sirva peticiones web (PHP-FPM, Apache con mod_php, php-cgi, FrankenPHP, LiteSpeed), con independencia de la aplicación: WordPress, Drupal, Joomla o un desarrollo propio. Ya hay explotación activa.

Cloudflare desplegó, horas antes de la divulgación pública, 7 reglas específicas en su conjunto de reglas administradas (WAF) que bloquean los patrones de explotación conocidos. En esta guía te explicamos, paso a paso, cómo activarlas y dejarlas en modo Bloquear sin afectar al tráfico legítimo.

Importante: el WAF da tiempo, el parche resuelve. Las reglas del WAF son una capa de contención temporal. La corrección definitiva es actualizar PHP a 8.5.12, 8.4.27, 8.3.36 u 8.2.35 (o a un paquete de tu distribución con el parche retroportado). Actualizar el CMS o sus plugins no basta: el fallo está en PHP.

¿Tu web no pasa por Cloudflare? La prioridad es la misma: localizar dónde tienes PHP y actualizarlo cuanto antes. Si cuentas con otro WAF (AWS WAF, Azure, Akamai, Imperva o ModSecurity/Coraza), revisa qué reglas ha publicado tu proveedor para estas CVE. Las medidas complementarias del final de esta guía te sirven en cualquier caso.

Contenido de la guía

  1. Resumen y acciones prioritarias
  2. Contexto de la vulnerabilidad
  3. Alcance y requisitos previos
  4. Configuración paso a paso en Cloudflare
  5. Verificación y monitorización
  6. Falsos positivos y reversión
  7. Medidas complementarias
  8. Referencias

1. Resumen y acciones prioritarias

2CVE críticas · RCE sin autenticación
7Reglas WAF de PHP2Shell en modo Bloquear
5Pasos de configuración
~15 minTiempo estimado por zona
PlazoAcción
0-24 h · InmediatoActivar el conjunto de reglas administradas y poner las 7 reglas PHP2Shell en Bloquear en todas las zonas con aplicaciones PHP.
0-72 h · UrgenteActualizar PHP en servidores, contenedores y hosting gestionado expuestos a Internet.
Continuo · MonitorizaciónRevisar los eventos de seguridad filtrando por los ID de regla y ajustar excepciones ante falsos positivos.

2. Contexto de la vulnerabilidad

Ambos fallos se originan en que PHP deja la memoria en un estado corrupto cuando una petición termina de forma anómala. Los descubrieron investigadores de Calif, OpenAI y Wiz, que demostraron ejecución remota de código sin autenticación contra WordPress, Drupal y Joomla.

IdentificadorDescripciónSeveridad
CVE-2026-109618Encadenamiento de debilidades que provoca corrupción de memoria por agotamiento (out-of-memory) y permite ejecución remota de código con la cuenta del proceso web.Crítica
CVE-2026-109619Estado global obsoleto (stale global state) que permite use-after-free en heap sin autenticación, divulgación de memoria del proceso y ejecución remota de código.Crítica

Versiones afectadas y corregidas

RamaVulnerableCorregida
8.5< 8.5.128.5.12
8.4< 8.4.278.4.27
8.3< 8.3.368.3.36
8.2< 8.2.358.2.35
7.4 – 8.1TodasBackport en código fuente / proveedor LTS
≤ 7.3TodasMigrar a una versión soportada

Superficie expuesta

SAPI / despliegueRiesgo
Apache + mod_phpMáximo
PHP-FPMAlto
php-cgiAlto
FrankenPHPAlto
LiteSpeed (LSAPI)Alto

En mod_php existe un exploit demostrado que se dispara antes de ejecutar código de la aplicación.

Cronología

  • 20/10 · Aviso previo: el equipo de PHP anuncia la publicación inminente de parches de seguridad críticos.
  • 21/10, 03:02 UTC · Cloudflare: despliega las 7 reglas en sus conjuntos administrados (Free y de pago) y observa los primeros intentos de explotación.
  • 21/10 · Divulgación pública: publicación de PHP 8.5.12, 8.4.27, 8.3.36 y 8.2.35 y de los avisos de seguridad.

3. Alcance y requisitos previos

Esta guía aplica a todas las zonas (dominios) gestionadas en Cloudflare que publiquen aplicaciones o servicios basados en PHP, o en las que no tengas certeza de la tecnología del origen. Cubre la configuración del WAF a nivel de zona desde el panel de Cloudflare.

Cobertura según tu plan de Cloudflare

PlanConjunto de reglasQué tienes que hacer
FreeCloudflare Managed Free RulesetLa protección se despliega automáticamente. Solo tienes que verificarla (sección 5).
Pro · Business · EnterpriseCloudflare Managed RulesetSigue esta guía: activa el conjunto y confirma las 7 reglas en Bloquear.
TodosManaged Response Firewall DefaultLa regla de respuesta Default block for High confidence Signatures viene activa por defecto.

Antes de empezar, asegúrate de tener

  • Acceso: rol Super Administrator, Administrator o Firewall / WAF Admin sobre la zona.
  • Inventario: las zonas con backend PHP y el responsable técnico de cada aplicación.
  • Gestión del cambio: una ventana de cambio aprobada o el procedimiento de cambio de emergencia activado (riesgo crítico con explotación activa).
  • Línea base: el estado inicial del Conjunto de reglas administradas (activo o inactivo) y las anulaciones existentes, anotados.
  • Comunicación: un canal con negocio para avisar de posibles bloqueos de tráfico legítimo.

Elige tu escenario según el estado inicial

Escenario A · Conjunto ya activoEscenario B · Conjunto no activo
Mantén la configuración existente y verifica que ninguna anulación desactiva o rebaja la acción de las 7 reglas PHP2Shell. Fuérzalas a Bloquear si hace falta.Activa el conjunto (≈ 837 reglas) con la acción del conjunto en Registro (Log) para proteger producción, y anula solo las 7 reglas PHP2Shell a Bloquear.

El número total de reglas del conjunto administrado puede variar con las actualizaciones de Cloudflare. Si tu plan no ofrece la acción Registro, mantén la acción predeterminada del conjunto y refuerza la monitorización de eventos durante las primeras 48 h.

4. Configuración paso a paso en Cloudflare

Paso 1 · Accede a la zona

Inicio de la cuenta → Dominios → <dominio>

Inicia sesión en dash.cloudflare.com y selecciona la cuenta correspondiente. En el menú lateral, abre Dominios y selecciona el dominio que quieres proteger. Repite el procedimiento completo para cada zona del inventario con backend PHP.

Consejo: usa la Búsqueda rápida (⌘K / Ctrl+K) para localizar la zona directamente si gestionas muchos dominios.

PHP2Shell Cloudflare WAF
Figura 1 · Selección de la zona en el menú de la cuenta.

Paso 2 · Abre la configuración de seguridad

<dominio> → Seguridad → Configuración

Dentro de la zona, despliega el menú Seguridad y pulsa Configuración. Esta vista reúne las herramientas de detección y protección de la zona, incluido el WAF administrado.

PHP2Shell Cloudflare WAF
Figura 2 · Menú Seguridad → Configuración de la zona.

Paso 3 · Activa el Conjunto de reglas administradas de Cloudflare

Seguridad → Configuración → Conjunto de reglas administradas de Cloudflare

Localiza el bloque Conjunto de reglas administradas de Cloudflare (puedes filtrar por el grupo Exploits de aplicaciones web) y comprueba el interruptor de Estado:

  • Activo → Escenario A. Pulsa Ver conjunto de reglas para revisar las anulaciones existentes y continúa en el Paso 4.
  • Inactivo → Escenario B. Activa el interruptor; al desplegar el conjunto, establece la acción del conjunto en Registro (Log) y guarda.
PHP2Shell Cloudflare WAF
Figura 3 · Conjunto de reglas administradas de Cloudflare con el estado activado.

Escenario B: por qué empezar en modo Registro. Activar de golpe el conjunto completo (≈ 837 reglas) en bloqueo sobre una aplicación que nunca lo ha tenido puede generar falsos positivos y cortes de servicio. En modo Registro el resto de reglas solo registra eventos, lo que te permite analizarlos y pasarlas a bloqueo de forma controlada más adelante.

Las 7 reglas PHP2Shell, en cambio, deben quedar en Bloquear desde el primer momento mediante anulación individual (Paso 4).

Paso 4 · Anula las 7 reglas PHP2Shell a Bloquear

Ver conjunto de reglas → Buscar / filtrar por etiqueta → Anulaciones de reglas

Desde Ver conjunto de reglas (o editando la regla de implementación Execute del conjunto en Reglas de seguridad → Reglas administradas), busca las reglas de PHP2Shell filtrando por las etiquetas cve-2026-109618 y cve-2026-109619 o por la descripción PHP Remote Code Execution Attack.

Selecciona las 7 reglas, establece Acción: Bloquear y Estado: Habilitado, y pulsa Aplicar configuración del conjunto de reglas. El resultado debe coincidir con la Figura 4.

PHP2Shell Cloudflare WAF
Figura 4 · Anulaciones de reglas: las 7 reglas PHP2Shell en acción Bloquear y estado Habilitado.

Referencia: ID de las reglas (Cloudflare Managed Ruleset · Pro, Business y Enterprise)

Cloudflare ha indicado que las descripciones de estas reglas pueden cambiar (inicialmente se publicaron como Generic Rules – Anomalous Execution 1-7). Identifícalas siempre por su ID. Todas llevan las etiquetas php, cve-2026-109618 y cve-2026-109619.

#ID de la reglaAcciónEstado
01c1d409ad838f47f59446f21cc438d5ddBloquearHabilitado
02f9a45927414245e3a64bb12d0a0c2f64BloquearHabilitado
03771c654ae1154d4daa72f4e1545d163cBloquearHabilitado
04217005865f0145f392300bac212afcc9BloquearHabilitado
0538efdb17ea594501bb55a1d71867b12eBloquearHabilitado
064148ae686fdb4d01be673fab9d9c073dBloquearHabilitado
071389aa259617437392ce149c48143645BloquearHabilitado
ID del conjunto (planes de pago)efb7b8c949ac4650a09736fc376e9aee
ID del conjunto (plan Free)77454fe2d30c4220b5701f6fdfb893ba
Regla de respuesta (todos los planes)afffe22785674c80a31875c848d2242a

Precedencia: las excepciones (skip) se evalúan antes que las anulaciones. Comprueba que ninguna regla de excepción omite el conjunto administrado para rutas o hosts PHP de la zona.

Paso 5 · Despliega y confirma la configuración

Reglas de seguridad → Reglas administradas

Guarda e implementa los cambios. Después, en Reglas de seguridad, filtra por Reglas administradas y comprueba que la regla de implementación del conjunto aparece habilitada y que sus anulaciones reflejan:

  • Acción del conjunto: predeterminada (Escenario A) o Registro (Escenario B).
  • Las 7 reglas PHP2Shell en Bloquear · Habilitado.
  • Ninguna anulación o excepción adicional que deshabilite estas reglas.

Deja constancia del cambio: zona, fecha y hora, escenario aplicado y persona que lo ejecutó.

5. Verificación y monitorización

Tras el despliegue, valida que la protección está operativa y vigila la actividad asociada. Que no aparezcan eventos no garantiza que las reglas estén activas: confirma siempre también la configuración (Paso 5).

Revisión de eventos de seguridad

  1. Acceso: abre Seguridad → Análisis → Eventos de la zona.
  2. Filtro: Agregar filtro → campo ID de regla → operador es igual a → introduce cada uno de los 7 ID (o filtra por el servicio Reglas administradas).
  3. Ventana: empieza con intervalos cortos (últimas 24 h) y amplía progresivamente.
  4. Análisis: expande cada evento para revisar petición, ruta, IP de origen, ASN, país y acción aplicada (Bloquear).

Lista de comprobación tras la implantación

  • ☐ Conjunto de reglas administradas de Cloudflare activo en la zona.
  • ☐ Las 7 reglas PHP2Shell en Bloquear · Habilitado, verificadas por ID.
  • ☐ Ninguna excepción que omita el conjunto en hosts o rutas PHP.
  • ☐ Aplicación accesible y funcional tras el cambio (prueba rápida de login, formularios y subida de ficheros).
  • ☐ Eventos de bloqueo revisados e IPs atacantes correlacionadas en tu SIEM/MDR y, si procede, bloqueadas.
  • ☐ En el Escenario B: revisión de los eventos en modo Registro a las 48-72 h para planificar el paso a bloqueo del conjunto completo.
  • ☐ Cambio documentado con evidencias (capturas de las anulaciones y de los eventos).

Revisa si hubo compromiso previo. Si ves bloqueos de estas reglas, o la zona estuvo expuesta sin protección antes del 21/10/2026, revisa en el servidor de origen: procesos hijos inesperados del usuario del servidor web, ficheros PHP nuevos o modificados en directorios web o de subida, y conexiones salientes anómalas. Ante cualquier indicio, escala a tu equipo de respuesta a incidentes (DFIR).

6. Falsos positivos y reversión

Gestión de falsos positivos

Si alguna de las 7 reglas bloquea tráfico legítimo, mantén activos el conjunto y las reglas y aplica la medida más acotada posible:

  1. Identifica: localiza en Eventos el ID de regla, la ruta, el método y los parámetros implicados.
  2. Acota: crea una regla de excepción que omita únicamente ese ID para la ruta, el host o la IP de origen concretos (por ejemplo, integraciones de confianza).
  3. Compensa: prioriza el parcheo de PHP en ese origen y documenta el riesgo aceptado con fecha de caducidad de la excepción.

Plan de reversión

SituaciónCómo actuar
Escenario B con impacto generalizadoMantén las 7 anulaciones en Bloquear y verifica que la acción del conjunto está en Registro. Si el impacto persiste, revisa los eventos por ID antes de desactivar nada.
Falso positivo de una regla PHP2ShellExcepción acotada por ID de regla y ruta (ver arriba), manteniendo las 7 reglas activas a nivel global.
Error de configuraciónRestaura la línea base documentada (estado inicial del conjunto y anulaciones) y repite desde el Paso 3.

Aprobación: desactivar por completo las reglas PHP2Shell en una zona con PHP sin parchear expone un RCE crítico con explotación activa. Esa decisión requiere la aprobación expresa del responsable de seguridad, por escrito.

Quién hace qué

RolResponsabilidad
Operador SOC / MDREjecución de los pasos 1-5, verificación y monitorización de eventos.
Responsable de la aplicaciónPruebas funcionales, validación de falsos positivos y parcheo de PHP.
Responsable de seguridadAprobación del cambio, de las excepciones y aceptación de riesgos.

7. Medidas complementarias

Estas medidas aplican a cualquier servidor con PHP, esté o no detrás de Cloudflare.

  1. Corrección definitiva: actualiza PHP a 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35, reconstruye y redespliega los contenedores y verifica la versión efectiva (php -v y la SAPI en uso). Exige el parche a tus proveedores de hosting gestionado.
  2. Mitigación parcial de CVE-2026-109618: memory_limit=-1 (vía php_admin_value), post_max_size a 8M (sin subidas) o 32M, y límites de contenedor/cgroup que terminen solo el worker afectado.
  3. Mitigación parcial de CVE-2026-109619: session.upload_progress.enabled=0; en PHP 8.5, fatal_error_backtraces=0; reinicia todos los workers y corrige los errores fatales alcanzables por un atacante.
  4. Reducción de exposición: restringe el acceso a los servicios aún sin parchear (lista de permitidos, Zero Trust) o retíralos temporalmente; limita las subidas de ficheros y su tamaño.

8. Referencias

  • BleepingComputer · PHP ships emergency patches for critical PHP2Shell flaws (21/10/2026).
  • Endor Labs · PHP2Shell: critical vulnerabilities in PHP (CVE-2026-109618, CVE-2026-109619).
  • PPC Land · Cloudflare blocks PHP2Shell exploits 9 hours before PHP flaws went public.
  • Techdows · Cloudflare PHP2Shell WAF rule: how to turn it on and why it is not a fix.
  • Cloudflare Docs · WAF Managed Rules: anulaciones y excepciones de conjuntos administrados.

Información vigente a 23/10/2026. Cloudflare puede añadir o modificar reglas a medida que evolucionen las cargas de ataque; revisa periódicamente las etiquetas cve-2026-109618 y cve-2026-109619 en el conjunto administrado.

¿Te ayudamos a revisar tu exposición?

El equipo SOC/MDR de Cylum puede ayudarte a localizar dónde tienes PHP, aplicar esta configuración en tus zonas de Cloudflare o en tu WAF actual y vigilar los intentos de explotación mientras completas el parcheo.

Habla con nuestro equipo

Julián Delgado
Julián DelgadoHead of Offensive Security & MDR Julian David Delgado Piraquive es un profesional destacado en el ámbito de la ciberseguridad, especializado en seguridad ofensiva y respuesta ante incidentes. Actualmente, ocupa el cargo de Head of Offensive Security & CSIRT en Factum Information Technologies, donde lidera equipos de Red Team y servicios de detección y respuesta gestionada (MDR). Además, Julián es docente en el Máster de Ciberseguridad de iFP (Innovación en Formación Profesional), donde imparte formación práctica en hacking ético, pentesting y ejercicios de Capture The Flag (CTF). Su enfoque educativo se centra en proporcionar experiencias reales a sus estudiantes, preparando entornos de laboratorio que simulan escenarios de ciberataques y defensa.
El patrón especificado no existe.
Resumen de privacidad
cylum-dark

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Cookies estrictamente necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Cookies de terceros

Esta web utiliza Google Analytics para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

Dejar esta cookie activa nos permite mejorar nuestra web.