Flota

php2shell: con qué rapidez cerraron los hostings la vulnerabilidad crítica de PHP

El 21 de octubre de 2026, el proyecto PHP corrigió dos vulnerabilidades con las que un atacante, sin iniciar sesión, puede ejecutar código en el servidor. Pero solo quedan cerradas cuando el proveedor de hosting instala la actualización. En 27 sistemas propios y gestionados por nosotros fuimos anotando cuándo ocurrió, y te mostramos cómo comprobar tu estado.

El 20 de octubre, el proyecto PHP anunció para el día siguiente una versión de seguridad crítica, a las 14:00 UTC. El 21 de octubre, a las 16:00 h, hora alemana, estaban disponibles PHP 8.5.12, 8.4.27, 8.3.36 y 8.2.35. Lo que ocurre después ya no está, para la mayoría de quienes gestionan una web, en sus manos: quien usa hosting compartido o WordPress gestionado es vulnerable hasta que el proveedor lleva la actualización a sus servidores.

Mantenemos varios sitios web y aplicaciones en distintos proveedores de hosting, propios y de clientes. De 27 de ellos fuimos anotando aquella tarde cuándo llegaba la nueva versión. El resultado no es una prueba comparativa de hostings, pero sí una mirada honesta a lo distinto que es el ritmo de unos a otros.

Qué es php2shell

Según el aviso de seguridad del proyecto PHP, detrás del nombre hay dos errores en el manejo de la memoria entre dos peticiones. En CVE-2026-109618, una interrupción por falta de memoria puede dejar datos a medio terminar que PHP, al limpiar, da por válidos. En CVE-2026-109619 queda en memoria el estado interno de una petición después de que su memoria ya se ha liberado, y la siguiente petición del mismo proceso accede a él. Ambas están valoradas con CVSS 9.2 y, en el peor caso, permiten ejecutar código propio en el servidor.

Está afectada toda instalación de PHP que atiende peticiones web: PHP-FPM, Apache con mod_php, php-cgi, FrankenPHP y LiteSpeed. El riesgo es más alto con mod_php. El atacante no necesita iniciar sesión, y el ataque actúa antes de que WordPress o un plugin ejecuten siquiera código. Un plugin de seguridad, por tanto, no ve nada de esto.

Hasta qué punto ya hay ataques en marcha lo valoran las fuentes de forma distinta. El Cyber Centre canadiense informó el 21 y el 23 de octubre de una prueba de concepto pública, pero de ninguna explotación constatada todavía (aviso AL26-026). Según Help Net Security, Amazon vio un intento de explotación ya el 17 de octubre, cuatro días antes de la publicación.

Nuestra medición: 27 sistemas, siete proveedores y un servidor propio

Medimos desde fuera y solo en modo lectura. La mayoría de los proveedores indican la versión de PHP en la cabecera de respuesta X-Powered-By. La consultamos cada cinco minutos en Hostinger y STRATO, y lo hicimos en wp-login.php, porque esa página nunca sale de la caché y PHP se ejecuta seguro. En Raidboxes, la versión figuraba en el informe del sistema de WooCommerce. All-Inkl oculta la cabecera de respuesta; allí un archivo de prueba de una sola línea mostró la versión y se borró enseguida. En united-domains y CheckDomain, la versión no se podía leer desde fuera.

DóndeAntesParcheadoTiempo tras la publicación
STRATO (3 sitios web)8.2.348.2.35 a las 17:51 h; a las 17:46 h todavía la antigua1 h 51 min
Raidboxes (1 tienda)8.4.268.4.27 en la primera comprobación, a las 18:10 hcomo máximo 2 h 10 min
Servidor propio con Docker8.4.268.4.27 a las 18:51 h, tras la reconstrucción2 h 51 min
Hostinger (8 sistemas, LiteSpeed)8.3.35el 22 de octubre a las 6:53 h todavía 8.3.35; en la nueva medición del 26 de octubre, 8.3.36más de 14 h 53 min
All-Inkl, cuenta 1no medido8.3.36 el 22 de octubremenos de un día
All-Inkl, cuenta 28.4.24no se volvió a medirsin determinar
Proveedor desconocido detrás de Cloudflare8.2.29en la nueva medición del 26 de octubre, 8.2.35no medido
united-domains, CheckDomainVersión no legible desde fuera

Hay que hacer dos salvedades. Medimos nuestras propias cuentas, no una muestra de todos los servidores de un proveedor. Los grandes proveedores suelen desplegar las actualizaciones servidor por servidor, así que otros clientes pueden haber recibido el parche antes o después. Y entre el 22 y el 26 de octubre no medimos en Hostinger, de modo que no sabemos cuándo llegó exactamente la 8.3.36.

Lo que sacamos en claro

El margen es amplio y no se ve

Entre el hosting más rápido y el más lento de nuestra medición hay al menos 13 horas, toda una noche. Desde fuera no se nota si el servidor de una web ya está parcheado. Quien no lo comprueba, no lo sabe.

Un servidor propio es tan rápido como su paso más lento

En nuestro servidor propio corre una aplicación en Docker, construida sobre la imagen oficial de PHP. La imagen con el número 8.4.27 apareció a las 17:45 h; la versión para los servidores Intel y AMD habituales, solo a las 18:47 h. Nuestra reconstrucción se ejecutó a las 18:51 h. Para que descargara la nueva imagen base y no tomara la antigua de la caché, tuvimos que modificar las instrucciones de construcción. Desde entonces, cada build trae la imagen actual.

Coolify, la plataforma con la que gestionamos ese servidor, publicó su actualización con la versión de PHP parcheada solo doce minutos después de la publicación. Aun así, a nosotros solo nos llegó con la actualización automática nocturna. Los fabricantes rápidos sirven de poco si la actualización se queda parada en tu sistema.

Las ramas antiguas de PHP ya no reciben nada

Un sistema seguía en PHP 8.1. Para 8.1 y anteriores, el proyecto PHP ya no publica versiones; solo hay correcciones mínimas en el código fuente para quienes compilan PHP ellos mismos. En hosting compartido, ahí solo ayuda pasar a una rama con soporte. Otro sistema ya estaba, antes de la versión de seguridad, cinco versiones por detrás: en 8.2.29 en lugar de 8.2.34. La buena noticia: la versión de seguridad también lo puso al día, y en la nueva medición funcionaba con 8.2.35.

Sin PHP no hay vulnerabilidad de PHP

Nuestra web principal, hafenstudios.com, no estaba afectada porque consiste en archivos HTML estáticos. Para un sitio WordPress eso no es una opción, pero muestra por qué las partes que no necesitan PHP tampoco deberían ejecutarlo.

Cómo comprobar tu versión de PHP en WordPress

  1. En el escritorio: Herramientas → Salud del sitio, pestaña Información, y despliega la sección Servidor. Ahí figura la versión de PHP con la que WordPress se está ejecutando.
  2. Compárala con la tabla: tu rama está parcheada a partir del número de la columna «Parcheada desde».
  3. Leer bien los añadidos: detrás del número puede haber una sigla del proveedor, por ejemplo 8.3.36-nmm1. Lo que cuenta es el número anterior.
Tu rama de PHPParcheada desdeCon soporte hasta
8.58.5.12vigente
8.48.4.27vigente
8.38.3.36vigente
8.28.2.3531 de diciembre de 2026
8.1 y anterioressin versiónfinalizado

Una excepción: algunas distribuciones de Linux y algunos proveedores incorporan la corrección a su propia versión sin cambiar el número. Si ves un número más antiguo y tu proveedor dice que ha parcheado, no hay contradicción. Entonces vale su confirmación por escrito.

Quien gestiona muchas webs puede consultar también, a partir de WordPress 6.9, la interfaz REST, con una contraseña de aplicación y solo en modo lectura: /wp-json/wp-abilities/v1/abilities/core/get-environment-info/run devuelve, entre otras cosas, la versión de PHP.

Si tu hosting aún no ha parcheado

  • Preguntar. Basta una frase al soporte: ¿cuándo llega PHP 8.x.y con la corrección para CVE-2026-109618 y CVE-2026-109619? La respuesta también te dice con qué seriedad se lo toma tu proveedor.
  • Cambiar de rama. Muchos proveedores ofrecen varias versiones de PHP a elegir. Si otra rama ya está parcheada, puedes cambiarte a ella después de una prueba breve. Antes, una copia de seguridad; después, recorre la página de inicio, el inicio de sesión y los formularios.
  • Un firewall como puente. Cloudflare ha desplegado reglas contra las vías de ataque conocidas, también en el plan gratuito. Pero el proyecto PHP escribe con claridad que no existe una mitigación completa. El firewall no sustituye a la actualización.
  • En servidores propios: actualiza los paquetes, reconstruye los contenedores con una imagen base nueva y reinicia después todos los procesos de PHP. Los ajustes con los que el proyecto PHP permite cubrir el tiempo hasta la actualización figuran en el aviso de seguridad.

El 23 de octubre se añadió una adenda: una tercera vulnerabilidad, CVE-2026-115560, está en el indicador de progreso de las cargas en las sesiones. Solo actúa si una aplicación cambia en tiempo de ejecución el formato de almacenamiento de sus sesiones de PHP. WordPress no usa sesiones de PHP; en todo caso, entrarían en juego plugins que sí lo hagan. La corrección llegará con la siguiente versión regular y, hasta entonces, el proyecto PHP recomienda session.upload_progress.enabled=0. En hosting compartido, eso solo lo puede configurar el proveedor.

Y si de todos modos estás poniendo orden: las actualizaciones de PHP son solo una mitad. Por qué los plugins obsoletos son el problema más duradero lo explicamos en nuestro artículo sobre cómo actualizar los plugins de WordPress. Lo anticuados que siguen siendo en parte los requisitos mínimos del directorio de plugins lo muestra nuestro análisis: 8.131 plugins siguen indicando PHP 5 (en inglés).

¿Prefieres que lo revisemos?

En el chequeo de seguridad y refuerzo buscamos vulnerabilidades en el núcleo, el tema y los plugins, reforzamos el inicio de sesión, revisamos tus copias de seguridad y te entregamos un informe ordenado por urgencia. Precio fijo desde 490 €.

Solicitar un chequeo de seguridad

Preguntas frecuentes

¿Qué versiones de PHP corrigen php2shell?

PHP 8.5.12, 8.4.27, 8.3.36 y 8.2.35, todas publicadas el 21 de octubre de 2026. Cualquier número inferior dentro de la misma rama está afectado. Para PHP 8.1 y anteriores, el proyecto PHP ya no publica versiones: ahí solo ayuda pasar a una rama con soporte o contar con un proveedor que incorpore la corrección por su cuenta.

¿Cómo averiguo qué versión de PHP usa mi web de WordPress?

En el escritorio, en Herramientas → Salud del sitio, pestaña Información, sección Servidor. Ahí figura la versión de PHP con la que WordPress se está ejecutando. Un añadido como -nmm1 detrás del número procede del proveedor de hosting; lo que cuenta es el número anterior.

¿Está afectada mi web de WordPress aunque no muestre problemas de seguridad?

Sí, si funciona con una versión de PHP sin parchear. Las vulnerabilidades están en el propio PHP y actúan antes de que WordPress o un plugin ejecuten código. Un plugin de seguridad no ve nada de esto. Lo único que cuenta es la versión de PHP del servidor.

¿Sirve un firewall de aplicaciones web contra php2shell?

En parte. Cloudflare ha desplegado reglas contra las vías de ataque conocidas, también en el plan gratuito. Pero el proyecto PHP indica expresamente que no existe una mitigación completa y que solo la actualización es segura. Un firewall, como mucho, cubre el tiempo hasta que el proveedor de hosting parchee.

Mi hosting aún no ha parcheado. ¿Qué puedo hacer?

Pregunta al soporte cuándo llegará la versión parcheada. Comprueba en el panel del hosting si ya ofrecen otra rama de PHP parcheada y cámbiate a ella después de una prueba. Si tu web aún funciona con PHP 8.1 o anterior, ahora es el momento de migrar, porque para esas ramas ya no saldrá ninguna versión.

Volver al blog Un artículo de hafenstudios