‹ Todas las noticias

Reportaje

php2shell: dos fallos en el núcleo de PHP obligan a parchear a toda prisa y apagan webs públicas en media Europa

PHP publicó el 21 de octubre parches de emergencia para CVE-2026-109618 y CVE-2026-109619, dos fallos del intérprete que permiten ejecutar código sin autenticación en cualquier servidor web con PHP. Varias administraciones europeas apagaron sus portales por precaución y los sensores de Amazon, Cloudflare y VulnCheck registran intentos de explotación, aunque nadie ha confirmado todavía una intrusión con éxito.

En 30 segundos

Dos vulnerabilidades críticas en el propio PHP, no en ninguna aplicación concreta, permiten a un atacante sin credenciales ejecutar código o leer la memoria del servidor web; la única solución completa es actualizar el intérprete y reiniciar todos los procesos.

Qué ha pasado

El 21 de octubre, a las 13:30 UTC, el equipo de seguridad de PHP publicó las versiones 8.5.12, 8.4.27, 8.3.36 y 8.2.35 para corregir dos vulnerabilidades críticas del intérprete, conocidas ya como php2shell. Según los avisos de PHP, ambas permiten ejecución remota de código sin autenticación con los privilegios del proceso web, y el caso de mayor riesgo es Apache con mod_php: PHP ha demostrado un exploit en el que una sola petición ejecuta código antes de que se cargue ninguna línea de la aplicación.

CVE-2026-109618 está en la gestión del agotamiento de memoria. Cuando una petición supera el límite de memoria, PHP la aborta con un salto brusco; si eso ocurre con los datos de la petición a medio inicializar, el cierre trata memoria inválida como válida. Una petición multipart manipulada basta para provocarlo sin salirse de los límites aparentes. CVE-2026-109619 es un estado global obsoleto: tras un error fatal, un proceso trabajador conserva punteros a la memoria de la petición anterior ya liberada, y una petición posterior puede usarlos antes de que se reinicialicen. Las rutas confirmadas pasan por el progreso de subida de sesión, activado por defecto aunque la aplicación no use sesiones, y en PHP 8.5 por las trazas de errores fatales.

La ruta de lectura de memoria es la que más preocupa a los analistas. Según Wiz Research, permite extraer memoria viva del trabajador, con contraseñas, tokens, claves de API y certificados de otras peticiones, sin llegar a ejecutar nada. Wiz y la firma Calif demostraron ejecución de código sin autenticar contra las imágenes oficiales más recientes de WordPress, Drupal y Joomla; Calif añade Magento y MediaWiki. El código vulnerable más antiguo data de PHP 5.4.0, de 2012.

Dos equipos llegaron al fallo de forma independiente: Calif, dentro del programa Patch the Planet de OpenAI, y Wiz Research, que informó a PHP el 24 de agosto. Ambos afirman que usaron modelos de IA para encontrar los fallos y adaptar los exploits a distintas versiones y disposiciones de memoria. Según la PHP Foundation, los primeros indicios de CVE-2026-109618 se vieron en 2024 durante una auditoría externa, pero la corrección se quedó parada durante meses, algo que la propia Fundación describe como un fallo estructural de decisión y recursos.

Lo que está confirmado y lo que no

Los datos disponibles apuntan a intentos de explotación, algunos anteriores a la divulgación, pero a día de hoy ninguna fuente ha confirmado una intrusión con éxito.

Por qué importa

El fallo está en la capa que casi toda la web dinámica comparte. Wiz y Cloudflare recuerdan que PHP sostiene cerca del 70 % de las webs con lenguaje de servidor conocido. VulnCheck detecta PHP en 2,6 millones de direcciones IP expuestas a Internet y considera vulnerables o probablemente vulnerables a casi todas; alrededor del 42 %, más de 1,1 millones, corre ramas sin soporte, de 3.x a 8.1, para las que no hay versión oficial, y solo unas 403.000 están en las ramas 8.2 a 8.5 con parche. Otras estimaciones van de 1,3 a 5,1 millones de servidores según la metodología.

La reacción ha sido inusual: en vez de esperar el parche, decenas de organizaciones apagaron sus webs. Según Reuters, el proveedor federal alemán ITZBund desconectó varias webs en una medida «puramente preventiva», el Ministerio del Interior francés apagó las webs de las prefecturas, el Ministerio de Exteriores belga hizo lo mismo aunque el centro nacional de ciberseguridad belga no registró ataques, el centro estatal finlandés Valtori cerró los servicios web públicos del Gobierno, el Gobierno checo apagó su web y la Fundación Wikimedia desconectó varios sistemas. En Países Bajos, tras el aviso del NCSC, cayeron Overheid.nl, el Puerto de Róterdam, la federación de fútbol KNVB, las webs de los cinco mayores partidos y numerosos hospitales. En Alemania, el hospital Charité retiró toda su presencia web; el BSI recomendó esa medida y CISA la respalda: quien no pueda actualizar, o siga en PHP 8.1 o anterior, debe desconectar sus sistemas PHP hasta parchear.

En España, INCIBE-CERT publicó el 21 de octubre el aviso INCIBE-2026-762 con la importancia máxima de su escala. No consta ninguna desconexión preventiva de webs españolas ni, al cierre de este reportaje, un aviso del CCN-CERT. WordPress, PrestaShop, Drupal, Joomla y Moodle sostienen buena parte de las webs de pymes, ayuntamientos y comercios electrónicos españoles, a menudo en hosting compartido donde es el proveedor quien actualiza PHP.

El precedente pesa: CVE-2024-4577 (php-cgi) y CVE-2019-11043 (PHP-FPM) entraron en el catálogo KEV y se usaron en campañas de ransomware. Y la corrección de ahora cierra las rutas conocidas, no el patrón de fondo: Datadog y la propia PHP advierten de que pueden aparecer variantes, también en ramas que quedarán sin parche.

Cómo saber si está afectado y qué hacer

Han aparecido decenas de comprobadores gratuitos por URL, incluido uno publicado por OpenAI. Casi todos leen solo la versión que el servidor anuncia en sus cabeceras, así que no ven nada si está oculta y marcan como vulnerable un servidor cuya distribución ha retroportado el parche sin cambiar el número de versión, como hace Ubuntu 22.04. OpenAI lo reconoce en el suyo: un resultado «desconocido» no significa seguro. Además, enviar los dominios de la empresa a un servicio de terceros es entregar un inventario de objetivos.

El escáner activo de Assetnote sí comprueba el comportamiento provocando el agotamiento de memoria, pero mueve unos 29 MiB por ruta y puede tumbar trabajadores: solo contra sistemas propios y fuera de horas de servicio. La comprobación fiable es local: consultar la versión del paquete instalado y compararla con la corregida por la distribución (Debian 13: php8.4 8.4.27-1~deb13u1; Debian 12: php8.2 8.2.35-1~deb12u1; Ubuntu: avisos USN-8948-1 y USN-8948-2 del 21 de octubre para todas las LTS, incluidas las de soporte ampliado hasta PHP 5.5) o buscar los dos CVE en el registro de cambios del paquete; verificar que la versión que sirve la web (mod_php, FPM o contenedor) es la misma que la de la línea de comandos; y confirmar que los trabajadores se han reiniciado o la imagen se ha reconstruido. Un paquete nuevo con el proceso antiguo en memoria sigue siendo vulnerable.

Qué vigilar ahora

Las señales útiles están por debajo de la aplicación, así que los registros de WordPress o Drupal dirán poco. Según Datadog y Wiz, conviene correlacionar peticiones multipart inusualmente grandes con errores de memoria agotada en «Unknown on line 0» o respuestas HTTP 500 repetidas, cookies PHPSESSID anormalmente largas o malformadas en las respuestas, caídas de trabajadores y, sobre todo, procesos PHP que lanzan shells o herramientas de descarga. La ausencia de estas señales no demuestra que el sistema esté limpio.

Fuentes

Sobre el grupo: Global

Vulnerabilidades (4)

CVESeveridadExplotación activaPublicadaEstado NVD
CVE-2019-11043Crítica (9.8)⚠ Explotación activa28/10/2019Analizada
CVE-2024-4577Crítica (9.8)⚠ Explotación activa9/6/2024Analizada
CVE-2026-109618Crítica (9.2)—21/10/2026Modificada
CVE-2026-109619Crítica (9.2)—21/10/2026Modificada

Las reivindicaciones las publican los propios grupos criminales y no están verificadas hasta que la organización o la prensa las confirman. Los nombres de personas físicas (autónomos, profesionales individuales) se anonimizan conforme al RGPD. Nunca enlazamos a sitios de filtración ni a datos robados. Para solicitar la retirada o anonimización de una entrada, contacte con el administrador del sitio.