El 21 de octubre de 2026 el proyecto PHP publicó las correcciones de dos fallos críticos, y ese mismo día CERT-EU difundió el aviso 2026-018. Ambos están valorados con 9,2 y ambos se describen como ejecución remota de código sin autenticación. Si usted gestiona un sitio WordPress, una tienda en línea o cualquier otra aplicación PHP, esto le afecta, y la solución es una actualización, no un ajuste de configuración. Este artículo explica qué se sabe, cómo entra el ataque y qué debe hacer. Situación a 22 de octubre de 2026, según la versión 1.1 del aviso de CERT-EU.
Qué ha ocurrido
- Versión de seguridad anunciadaPHP anuncia con antelación una versión de seguridad
- Correcciones publicadas8.5.12, 8.4.27, 8.3.36 y 8.2.35
- Aviso 2026-018 de CERT-EUAmbos fallos valorados con 9,2
- Circula código de prueba de conceptoAtaques no confirmados, pero más probables
PHP anunció una versión de seguridad el 20 de octubre y publicó las correcciones el 21 de octubre a las 13:30 UTC. CERT-EU tituló su aviso «Critical Vulnerabilities in PHP» y enumera dos CVE: CVE-2026-109618 y CVE-2026-109619, cada uno con una puntuación de 9,2. CERT-EU añade que los detalles técnicos ya se debaten en público y que ha empezado a circular un primer código de prueba de concepto. El aviso no confirma ataques en curso, pero indica que esto hace más probable que los atacantes ya estén explotando los fallos. Trátelo como urgente.
Quién está afectado
Las versiones afectadas son todas las de PHP anteriores a la corregida en una rama con soporte, y todas las ramas que han llegado al final de su vida útil.
| Rama | Afectada por debajo de | Corregida en |
|---|---|---|
| PHP 8.5 | 8.5.12 | 8.5.12 |
| PHP 8.4 | 8.4.27 | 8.4.27 |
| PHP 8.3 | 8.3.36 | 8.3.36 |
| PHP 8.2 | 8.2.35 | 8.2.35 |
| PHP 8.1 y anteriores | todas las versiones | sin actualización regular; el equipo de seguridad de PHP publicó backports mínimos del código fuente para 7.4, 8.0 y 8.1 |
CERT-EU menciona PHP-FPM, Apache con mod_php, php-cgi, FrankenPHP y LiteSpeed. Según el equipo de PHP, mod_php conlleva el mayor riesgo. También pueden verse afectados los productos que incorporan PHP; CERT-EU remite a una lista del NCSC neerlandés al final de este artículo. Cuenta cualquier instalación que atienda peticiones web, tenga o no un formulario de subida de archivos.
Cómo llega un atacante al primer fallo
Nadie tiene que iniciar sesión. Según CERT-EU, una explotación demostrada prueba que una única petición sin autenticar puede desencadenar el ataque antes de que se ejecute código alguno de la aplicación. Ese es el punto que la mayoría pasa por alto: da igual que su WordPress esté al día, que sus plugins estén parcheados o que su formulario de contacto esté protegido. La petición llega primero al motor de PHP.
El primer fallo, CVE-2026-109618, funciona así:
- Llega una petición a una dirección que PHP atiende. Sin inicio de sesión, sin cuenta.
- PHP empieza a leer el cuerpo de la petición. CERT-EU cita como ejemplo el análisis de las subidas de archivos mediante formularios.
- PHP aplica su
memory_limitconlongjmp(). Cuando se supera el límite, abandona de golpe lo que estaba haciendo y termina la petición. - Si eso ocurre en mitad de la preparación de los datos internos de la petición, esos datos quedan a medio construir.
- La limpieza posterior trata los datos no válidos como válidos y libera memoria que nunca se inicializó. Esa memoria puede conservar todavía datos de asignaciones anteriores que controlaba el atacante.
- A partir de ahí, el aviso describe la ejecución remota de código en el servidor.
No describimos deliberadamente cómo dirige el atacante el último paso. Basta con saber que el punto de entrada no es su aplicación, y por eso nada dentro de su aplicación puede detenerlo.
El segundo fallo: un estado que sobrevive a su memoria
CVE-2026-109619 es un mecanismo distinto con el mismo resultado. PHP mantiene un estado interno para cada petición. Tras ciertos errores, como un error fatal, ese estado puede permanecer aunque la memoria que lo sustentaba ya se haya liberado. La siguiente petición atendida por el mismo proceso de trabajo puede entonces usar este estado obsoleto antes de que se restablezca de la manera habitual. El atacante necesita dos peticiones que lleguen al mismo proceso de trabajo; CERT-EU valora el resultado igual que el del primer fallo: ejecución remota de código.
Qué hacer hoy
¿Es el PHP de su servidor anterior a 8.5.12, 8.4.27, 8.3.36 o 8.2.35, o es 8.1 o anterior?
- SíAfectado por ambos fallos. Pase a la siguiente pregunta.
- NoCorregido para ambos fallos, siempre que esta sea realmente la versión que ejecuta su servidor web.
¿Puede actualizar hoy?
- SíActualice, reinicie todos los procesos de trabajo de PHP y compruebe la versión en ejecución.
- NoDesconecte el servidor de las redes públicas hasta que esté corregido. Los límites solo reducen el riesgo.
- Averigüe qué versión de PHP sirve realmente su sitio.
php -ven la línea de comandos muestra la versión de la línea de comandos, que puede diferir de la que usa su servidor web. Compruebephp-fpm -v, su panel de alojamiento o una página que llame aphpinfo(). En un alojamiento compartido, consulte a su proveedor. - Actualice a una versión corregida: 8.5.12, 8.4.27, 8.3.36 o 8.2.35. Las distribuciones suelen incorporar las correcciones sin cambiar el número de versión, así que busque los números CVE en el aviso de seguridad de su proveedor. En contenedores, vuelva a construir la imagen a partir de una base actualizada. El equipo de PHP señala que rpms.remirepo.net no tenía actualizaciones el día de la publicación y recomienda los paquetes de la distribución o una compilación desde el código fuente.
- Reinicie todos los procesos de trabajo de PHP. Una actualización en disco no modifica los procesos que ya están en marcha. Reinicie PHP-FPM o el servidor web y vuelva a comprobar la versión en ejecución.
- Si hoy no puede actualizar, aísle el servidor de las redes públicas hasta que la corrección esté instalada y verificada. CERT-EU es claro: solo una actualización corrige por completo estos fallos.
- Si utiliza PHP 8.1 o anterior, pida a su proveedor el backport o pase a una rama con soporte. Estas versiones no reciben actualizaciones regulares.
Medidas paliativas que reducen el riesgo pero no lo eliminan
CERT-EU enumera medidas que dificultan un ataque. Afirma sin ambigüedad que no hacen segura una instalación. Utilícelas mientras prepara la actualización, no en lugar de ella.
- Frente a CVE-2026-109618: establezca
memory_limit=-1de forma que las aplicaciones no puedan modificarlo, por ejemplo conphp_admin_valueen el pool de FPM, y compruebe que ningún pool, directorio ni aplicación vuelve a fijar un límite finito. Fije unpost_max_sizebajo (8M sin subidas, 32M con ellas) y mantengaupload_max_filesizepor debajo. Limite el tamaño de la petición, el número de campos, las partes multiparte, el número de cabeceras y la profundidad de anidamiento en el servidor web o en el proxy. Utilice un límite de memoria de contenedor o de cgroup como frontera de disponibilidad, pero noRLIMIT_ASniRLIMIT_DATA, que pueden provocar el fallo de asignación vulnerable. - Frente a CVE-2026-109619: establezca
session.upload_progress.enabled=0enphp.ini, en el pool de FPM o en una configuración del servidor que se aplique antes de analizar la petición (no conini_set()ni con.user.ini), y reinicie todos los procesos de trabajo. En PHP 8.5 establezca ademásfatal_error_backtraces=0. Elimine los ajustes por petición no válidos u obsoletos que imprimen diagnósticos antes de la inicialización, y corrija los errores fatales y los tiempos de espera de ejecución que un atacante pueda provocar.
Qué puede y qué no puede hacer SilentShield aquí
Esto no es un problema de bots, y preferimos decirlo antes que dejar que una página de producto insinúe lo contrario. El ataque alcanza el motor de PHP antes de que la petición llegue a nada nuestro, o a cualquier CAPTCHA, plugin o regla de cortafuegos dentro de su aplicación. Una protección contra bots en un formulario no lo detiene, y nadie debería decirle que sí. La única solución completa es la actualización de PHP.
La API y el panel de SilentShield no están escritos en PHP. El plugin de WordPress y el SDK de PHP se ejecutan dentro de su propio PHP, de modo que para ellos la actualización debe hacerse en su servidor. Una vez actualizado, la protección habitual contra bots y spam en formularios es tan útil como antes; simplemente nunca fue la respuesta a esto.