We use cookies. Analytics only with your consent. Change your preferences anytime.

Back to newsroom
Seguridad

Vulnerabilidad de seguridad PHP 2026: PHP2Shell (CVE-2026-109618) y cómo proteger tu servidor

La vulnerabilidad de seguridad PHP PHP2Shell (CVE-2026-109618 y CVE-2026-109619) permite ejecutar código de forma remota sin autenticación. Te explicamos qué pasó, qué problemas derivados surgieron y los pasos verificados para proteger tus servidores PHP.

By AI Codes It Team Oct 23, 2026 14 min read

El 21 de octubre de 2026, el proyecto PHP corrigió una vulnerabilidad de seguridad en PHP clasificada como crítica. Los dos fallos, conocidos en conjunto como PHP2Shell, permiten a un atacante ejecutar código en un servidor web sin iniciar sesión. El problema no se limita a un plugin o framework concreto. Está en el propio entorno de ejecución de PHP, que impulsa WordPress, Laravel, tiendas online y miles de proyectos a medida.

Este artículo explica qué ocurrió, qué problemas derivados provocó y cómo proteger tus servidores. Cada afirmación procede de las fuentes originales enlazadas al final. Cuando las fuentes no coinciden o algo sigue sin estar claro, lo indicamos.

Vulnerabilidad de seguridad PHP PHP2Shell – código en pantalla como símbolo de la seguridad del servidor

¿Qué pasó? La vulnerabilidad de seguridad PHP PHP2Shell de un vistazo

El 21 de octubre de 2026, el equipo de PHP publicó las versiones 8.5.12, 8.4.27, 8.3.36 y 8.2.35. Estas versiones cierran dos debilidades críticas que permiten la ejecución remota de código (RCE) sin autenticación. El equipo había anunciado la publicación el 20 de octubre, describiendo dos vulnerabilidades críticas, cada una con una puntuación CVSS v4.0 de 9,2.

  • CVE-2026-109618: corrupción de memoria cuando PHP se queda sin memoria (RCE via OOM corruption)
  • CVE-2026-109619: uso de un estado global obsoleto después de liberar la memoria (RCE via stale global state)

Según el proyecto PHP, todas las instalaciones de PHP que atienden peticiones web están afectadas. Esto incluye PHP-FPM, Apache con mod_php, php-cgi, FrankenPHP y LiteSpeed. El proyecto considera que mod_php es el de mayor riesgo, porque un ataque allí puede tener éxito antes de que se ejecute cualquier código de la aplicación.

CVE-2026-109618: errores de memoria cuando se agota

Cuando PHP no puede obtener suficiente memoria mientras procesa una petición, interrumpe el procesamiento. Los datos internos de la petición pueden quedar solo parcialmente inicializados. La limpieza posterior trata entonces esos datos no válidos como válidos.

El análisis de Unit 42 de Palo Alto Networks describe el mecanismo así: el manejo de errores mediante longjmp() deja la memoria de la petición sin inicializar, lo que permite a un atacante llegar de forma fiable a la ejecución remota de código provocando el agotamiento de memoria. Según el proyecto PHP, las peticiones que lo consiguen pueden ser formularios multiparte o subidas de archivos. Pueden agotar la memoria aunque su tamaño esté dentro de los límites configurados.

CVE-2026-109619: estado obsoleto entre peticiones

PHP puede reutilizar un mismo proceso worker para varias peticiones seguidas. Si una petición termina con un error fatal o un tiempo de espera agotado, el estado interno puede no limpiarse por completo. Una petición posterior que atienda el mismo worker puede entonces acceder a memoria que ya fue liberada.

El proyecto PHP confirma vías de ataque a través de la función de progreso de subida de sesión y de los backtraces de errores fatales de PHP 8.5. Algunas vías afectan a mod_php y otras a PHP-FPM. El progreso de subida está activado por defecto y puede actuar como consumidor temprano del estado obsoleto.

Vulnerabilidad de seguridad PHP comprobación de la versión del servidor y estado de las actualizaciones

Por qué la vulnerabilidad de seguridad PHP provocó una reacción en cadena

Un fallo crítico en el núcleo de un lenguaje rara vez es un caso aislado. PHP2Shell trajo varios problemas derivados a la vez. Cada uno aumenta el riesgo si no actúas con rapidez.

Pruebas de concepto públicas e intentos de explotación

La situación es contradictoria, y eso la hace peligrosa. El 22 de octubre, Rapid7 informó de que existen varios exploits de prueba de concepto públicos. Sin embargo, cada uno solo funciona con una combinación concreta de sistema operativo, versión de PHP y servidor web. Rapid7 no ha observado explotación en el mundo real, pero sí varios informes de intentos de explotación, y advierte de que podría aparecer en cualquier momento una técnica más portable.

El Centro Nacional de Ciberseguridad de Nueva Zelanda (NCSC), por su parte, afirma tener conocimiento de informes de explotación activa. El panorama no está, por tanto, del todo cerrado. La conclusión que comparten todas las fuentes es la misma: aplicar el parche sin demora.

Estados de parche distintos según las distribuciones

Las distribuciones de Linux y los proveedores con soporte a largo plazo recibieron las correcciones con antelación, y algunas las distribuyen como backports bajo números de versión antiguos. El número de versión por sí solo no siempre indica si un sistema está protegido. Un paquete de Debian o Ubuntu con una versión anterior puede contener la corrección, mientras que un PHP 8.2.34 compilado por ti mismo no la contiene.

El proyecto PHP también advierte de que el repositorio voluntario rpms.remirepo.net no tenía actualizaciones el día de la publicación. Quien dependa de él debería cambiar a paquetes de la distribución o compilar desde el código fuente para poder aplicar las actualizaciones de inmediato.

Red Hat Enterprise Linux 6 y 7 presentan un problema adicional. Según un mensaje de oss-sec del 22 de octubre, Red Hat sigue marcando los paquetes de PHP como “under investigation” para CVE-2026-109618. Allí se publicó un backport no oficial para PHP 5.4 y 5.3. El fabricante no lo confirma y no debería pasar a producción sin pruebas.

Ramas antiguas de PHP sin futuro

PHP 8.1 y versiones anteriores ya no reciben actualizaciones periódicas del proyecto PHP. Para 7.4, 8.0 y 8.1, el equipo ha proporcionado backports mínimos, sobre todo para usuarios que compilan PHP por su cuenta. Según el proyecto PHP, PHP 8.2 llega al final de su vida útil el 31 de diciembre de 2026 y no recibirá correcciones de seguridad después de esa fecha.

Amazon Web Services lo refleja en su boletín de seguridad: para los entornos de ejecución al final de su vida útil, de 5.4 a 8.1, no hay una corrección prevista, y es necesario migrar a una rama soportada.

Una gran superficie de ataque en Internet

Palo Alto Networks informa de que su telemetría de Cortex Xpanse identificó más de 22,6 millones de instancias expuestas que podrían ser vulnerables a CVE-2026-109618 o CVE-2026-109619. Es una estimación basada en telemetría, no un censo, pero muestra la magnitud: PHP funciona en una gran parte de la web.

Por qué los WAF y los plugins de seguridad no bastan

Los fallos están en el intérprete, antes de que se ejecute el código de la aplicación. Un plugin de seguridad de WordPress o un cortafuegos a nivel de aplicación solo se activa después de que el código vulnerable ya se ha ejecutado. Varios proveedores de seguridad lo confirman. Actualizar tu CMS o framework no cierra el agujero. Solo lo hace un PHP actualizado.

Antecedentes: otras vulnerabilidades de PHP en 2026

PHP2Shell no es el único problema de seguridad de este año. Si revisas hoy un servidor, mira también los CVE anteriores, porque muchos afectan a las mismas ramas de versión.

  • CVE-2026-6735 (10 de mayo de 2026): XSS a través de la página de estado de PHP-FPM. Afectadas: PHP 8.2 anterior a 8.2.31, 8.3 anterior a 8.3.31, 8.4 anterior a 8.4.21 y 8.5 anterior a 8.5.6. La página de estado no está pensada para Internet público.
  • CVE-2026-7261 (10 de mayo de 2026): use-after-free en SoapServer cuando se usa persistencia de sesión y falla una petición SOAP. Riesgo: corrupción de memoria, fuga de información o caída del proceso.
  • CVE-2026-14355 (julio de 2026): desbordamiento de búfer en la implementación AES-WRAP-PAD de la extensión OpenSSL. Las aplicaciones que usan este algoritmo pueden corromper los metadatos del heap.
  • CVE-2026-17543 (30 de julio de 2026): inyección SQL en ext-pgsql por un escape incorrecto de barras invertidas. El registro CVE la puntúa como CVSS 4.0 8,1 (alta). Afectadas: 8.2 anterior a 8.2.33, 8.3 anterior a 8.3.33, 8.4 anterior a 8.4.24 y 8.5 anterior a 8.5.9.
  • CVE-2026-17544 (30 de julio de 2026): escritura fuera de límites en bccomp() mediante entradas manipuladas. Afectadas: 8.4 anterior a 8.4.24 y 8.5 anterior a 8.5.9.

El patrón es claro: las vulnerabilidades de PHP llegaron en varias oleadas en 2026. Si actualizas una sola vez al año, casi con seguridad estás expuesto.

Efectos derivados en el ecosistema: frameworks y librerías

Además del intérprete, las librerías que usan directamente las aplicaciones PHP tienen sus propios fallos. Un ejemplo de enero de 2026 muestra cómo la deserialización permite a un atacante ejecutar código: hasta la versión 1.6.3, Laravel Reverb pasa los datos de su canal de Redis directamente a unserialize() sin restringir qué clases pueden crearse. El NVD la puntúa con 9,8 (crítica). El aviso recomienda una contraseña fuerte para Redis, acceso solo desde una red privada o loopback, o establecer REVERB_SCALING_ENABLED=false si solo funciona un nodo de Reverb.

La lección es sencilla: tu código puede ser seguro y, aun así, una dependencia o el intérprete pueden abrir una puerta. Por eso la versión de PHP, las dependencias y la configuración del servidor deben revisarse juntas.

Vulnerabilidad de seguridad PHP guía paso a paso para reforzar el servidor

Cómo aumentar la seguridad: paso a paso

Los pasos siguientes siguen las recomendaciones del proyecto PHP, de Rapid7 y del aviso del SOC de Prime Infoserv. Están ordenados en el orden en que deberías aplicarlos.

Paso 1: comprueba tu versión de PHP y el origen del paquete

Ejecuta php -v en el servidor y compara la versión con la tabla siguiente. Comprueba también si el paquete de PHP viene de tu distribución, porque entonces cuenta la versión del paquete con su aviso de backport.

Rama de PHPVersión mínima con la correcciónEstado
8.58.5.12Corregida el 21 de octubre de 2026
8.48.4.27Corregida el 21 de octubre de 2026
8.38.3.36Corregida el 21 de octubre de 2026
8.28.2.35Corregida, fin de vida el 31 de diciembre de 2026
8.1 y anterioresSin versión periódicaSe requiere corrección del fabricante o migración

Paso 2: aplica el parche y reinicia todos los workers

Una actualización solo surte efecto cuando los procesos en ejecución se reinician. Los workers activos mantienen el binario antiguo hasta que se reinician, así que una actualización del paquete por sí sola no te protege. Una discusión en el repositorio de código fuente de PHP sobre el backport para PHP 7.4 describe exactamente este problema: los workers activos siguen usando el binario antiguo hasta que PHP-FPM se recarga o se reinicia.

Reinicia el servicio de PHP de forma dirigida (por ejemplo, systemctl restart php8.3-fpm; el nombre del servicio depende de tu distribución). Después comprueba php -v y el estado del servicio. Si ejecutas varias versiones de PHP en paralelo, reinicia cada una por separado.

Paso 3: medidas provisionales si no puedes parchear de inmediato

Si no puedes actualizar de inmediato, estas medidas reducen la superficie de ataque. No sustituyen al parche. El proyecto PHP recomienda lo siguiente:

  • Quitar el límite de memoria: establece memory_limit=-1, preferiblemente con php_admin_value en el pool de FPM o en la configuración de Apache, para que las aplicaciones no puedan cambiarlo. Reinicia todos los workers después.
  • Limitar el tamaño de las subidas: sin subida de archivos, post_max_size = 8M; con subidas, post_max_size = 32M. upload_max_filesize debe ser menor que post_max_size.
  • Desactivar el progreso de subida: establece session.upload_progress.enabled=0 en php.ini o en el pool de FPM y reinicia todos los workers. Hacerlo con ini_set() o .user.ini llega demasiado tarde.
  • Desactivar los backtraces de errores fatales (solo PHP 8.5): establece fatal_error_backtraces=0 y reinicia los workers.
  • Limitar la entrada en el proxy: define el tamaño máximo de la petición, el número de campos de entrada, las partes multiparte y la profundidad de anidamiento en el servidor web o el proxy inverso, incluidas las peticiones sin cabecera Content-Length.

Precaución: quitar el límite de memoria hace que el servidor sea más sensible a las fugas de memoria. Configura límites de contenedor o cgroup para que solo se elimine el worker afectado. Según el proyecto PHP, no se deben usar RLIMIT_AS ni RLIMIT_DATA como sustituto, porque pueden activar la ruta de error vulnerable.

Paso 4: restringe el acceso cuando sea posible

Las áreas de administración internas y las páginas de estado no deben estar en Internet abierto. Colócalas detrás de una VPN o de una lista blanca de IP. Un sitio web público no puede protegerse de este modo, por eso en ese caso parchear es el paso más importante.

Paso 5: revisa los logs, incluida la actividad pasada

Varias fuentes informan de que se observaron intentos de explotación antes de que existiera el parche. Un artículo de DEV Community recomienda revisar los logs desde el 17 de octubre. Es una recomendación de segunda mano, no oficial. El aviso del SOC de Prime Infoserv señala lo esencial: la ausencia de alertas no demuestra que no haya pasado nada. Busca en concreto peticiones inusuales con cuerpos multiparte muy grandes, errores fatales inesperados y caídas repentinas de workers.

Si encuentras indicios, trata el servidor como comprometido. Restablece las credenciales, revisa los cron jobs, los archivos nuevos y las conexiones salientes.

Paso 6: aclara la situación con tu proveedor de hosting y las fuentes de paquetes

Si usas un proveedor de hosting, pregunta por escrito qué versión del paquete incluye la corrección para CVE-2026-109618 y CVE-2026-109619. No te conformes con una frase general de que “todo está parcheado”. Lo mismo vale para las ramas antiguas: solo un proveedor que nombre ambos CVE explícitamente puede confirmar el estado.

Una pregunta útil para tu proveedor es: “¿Qué versión de PHP está en mi servidor, incluye la corrección para CVE-2026-109618 y CVE-2026-109619, y se reiniciaron los workers de PHP después?”. La tercera pregunta se olvida a menudo y es decisiva. En hosting compartido, comprueba también si el proveedor reinicia los workers o si tienes que hacerlo tú desde el panel de control.

Paso 7: refuerzo a largo plazo

PHP2Shell demuestra por qué no basta con parchear una sola vez:

  • Usa versiones soportadas: planifica el cambio antes de que expire una versión. El resumen oficial está en php.net, en “Supported Versions”.
  • Activa las actualizaciones de seguridad automáticas: para el sistema operativo y el paquete de PHP, cuando tu configuración lo permita.
  • Aplica el principio de mínimo privilegio: el usuario del servidor web solo debe tener permisos de escritura en las carpetas que realmente necesita. Un worker comprometido con pocos permisos causa menos daño.
  • Mantén las dependencias actualizadas: revisa periódicamente los paquetes de Composer en busca de vulnerabilidades conocidas, por ejemplo con composer audit.
  • Bloquea las funciones peligrosas: en disable_functions, bloquea solo lo que de verdad no necesitas. Prueba después a fondo, porque un bloqueo demasiado estricto rompe aplicaciones.
  • Oculta los errores en producción: los mensajes de error detallados ayudan a los atacantes. Registra los errores internamente.
  • No guardes secretos en el código: las claves de API y las contraseñas pertenecen a variables de entorno o a un gestor de secretos.

Checklist: revisa la vulnerabilidad de seguridad PHP en 10 minutos

  1. Versión: php -v muestra 8.5.12, 8.4.27, 8.3.36, 8.2.35 o una más reciente.
  2. Origen del paquete: ¿el paquete de PHP viene de tu distribución o de tu proveedor, y la corrección está confirmada allí?
  3. Workers reiniciados: no quedan procesos de PHP antiguos después de la actualización.
  4. Progreso de subida desactivado: si no puedes parchear de inmediato, el ajuste está puesto y activo.
  5. Accesibilidad: las áreas de administración y las páginas de estado no son públicas.
  6. Logs: se han revisado las peticiones inusuales y las caídas de workers desde el 17 de octubre.
  7. Dependencias: composer audit no muestra hallazgos críticos.
  8. Fin de vida: sabes hasta cuándo está soportada tu versión de PHP.
  9. Copias de seguridad: existe una copia actual y probada fuera del servidor.
  10. Responsable: hay una persona designada que vigila las actualizaciones.

FAQ: vulnerabilidad de seguridad PHP PHP2Shell

¿Me afecta si mi sitio solo tiene páginas estáticas?
Depende de si PHP atiende peticiones web en el servidor. Si PHP se ejecuta y procesa peticiones, es vulnerable, tenga o no tu sitio subidas de archivos.

¿Ayuda actualizar mi CMS, por ejemplo WordPress?
No. Los fallos están en el intérprete de PHP. Debes actualizar la versión de PHP.

¿Basta con cambiar la configuración en lugar de actualizar?
No. El proyecto PHP afirma explícitamente que las medidas provisionales no hacen segura una instalación. La actualización es la única solución completa.

Uso PHP 8.1. ¿Qué hago?
PHP 8.1 ya no recibe actualizaciones periódicas. Usa una corrección del fabricante con cobertura confirmada o migra a una rama soportada.

¿Está comprometido mi sitio si no veo nada raro?
No necesariamente, pero no puedes descartarlo. La ausencia de alertas no demuestra seguridad, por eso la revisión de logs es importante.

Conclusión

La vulnerabilidad de seguridad PHP PHP2Shell es uno de los avisos más graves del año. Afecta al propio entorno de ejecución, no requiere inicio de sesión y ha provocado una cadena de problemas derivados: una situación de explotación poco clara, backports incoherentes, ramas al final de su vida útil y una gran superficie de ataque en Internet. La solución es clara, pero exige actuar: llevar PHP a una versión parcheada, reiniciar los workers, revisar los logs y restringir el acceso.

Si tu sitio web funciona con un constructor o una plataforma, pregunta a tu proveedor qué versión de PHP usa y con qué rapidez aplica las actualizaciones de seguridad. Si gestionas tus propios servidores, la responsabilidad recae directamente en ti.

Fuentes


Sigue leyendo: Crear página web con IA gratis · Mejor creador de páginas web con IA · Alternativas a Lovable

Filed under //
Seguridad AICODESIT
Share //
From reading to building

Ready to build yours?

Everything you just read about, you can try in the browser — describe your idea and watch the AI write, host and deploy it in about a minute.