PHP2Shell, vulnerabilidades críticas en PHP y cómo proteger tu servidor
![]()
El 21 de octubre de 2026, el equipo de desarrollo de PHP publicó actualizaciones de seguridad para corregir dos vulnerabilidades críticas identificadas como CVE-2026-109618 y CVE-2026-109619, conocidas conjuntamente como PHP2Shell. Ambas tienen una puntuación CVSS 4.0 de 9,2 sobre 10 y pueden permitir la ejecución remota de código sin autenticación en sistemas vulnerables.
Puedes consultar los detalles en el aviso oficial de seguridad de PHP.
El problema afecta al propio intérprete de PHP, por lo que su alcance va mucho más allá de un gestor de contenidos concreto. Cualquier aplicación web que utilice una versión vulnerable de PHP puede estar expuesta, independientemente de si está desarrollada con WordPress, Laravel, Symfony, PrestaShop, Drupal, Joomla o código propio.
En este artículo explicamos en qué consisten estas vulnerabilidades, cómo comprobar si un servidor está afectado y qué medidas aplicar para corregirlas en entornos Linux, hosting, Apache, Nginx y contenedores.
¿Qué son las vulnerabilidades PHP2Shell?
Las vulnerabilidades PHP2Shell afectan a la gestión interna de memoria y al estado de determinadas estructuras del intérprete PHP.
Los dos fallos identificados son:
- CVE-2026-109618: un error relacionado con la gestión de situaciones de falta de memoria (Out of Memory u OOM) puede interrumpir el procesamiento de una petición cuando ciertos datos internos todavía no se han inicializado correctamente.
- CVE-2026-109619: determinados estados internos pueden conservar referencias a memoria que ya ha sido liberada, permitiendo que posteriores operaciones utilicen información obsoleta.
En determinadas condiciones, estos errores pueden aprovecharse para ejecutar código de forma remota. El riesgo es especialmente importante porque un atacante no necesita disponer de una cuenta de usuario para intentar explotar el fallo.
Para ampliar la información técnica, consulta el aviso de CERT-EU sobre las vulnerabilidades críticas de PHP.
Si la explotación tiene éxito, las consecuencias dependerán de los permisos del proceso PHP y de las restricciones del sistema. Entre los posibles impactos se encuentran:
- Acceso a información sensible procesada por la aplicación.
- Modificación o creación de archivos en el servidor.
- Instalación de código malicioso.
- Acceso a credenciales disponibles para el proceso comprometido.
- Uso del servidor como punto de entrada para nuevos ataques.
Esto no significa que todos los servidores vulnerables hayan sido comprometidos, pero sí que deben tratarse como sistemas expuestos hasta aplicar una corrección.
¿Qué sistemas están afectados?
El problema afecta a las instalaciones de PHP que procesan peticiones web, independientemente de la aplicación que se ejecute sobre ellas.
Entre los entornos que deben revisarse se encuentran:
- Servidores Apache con
mod_php. - Nginx con PHP-FPM.
- Apache o Nginx que deleguen las peticiones a PHP-FPM.
- Instalaciones que utilicen
php-cgi. - Servidores LiteSpeed o FrankenPHP.
- Aplicaciones PHP desplegadas mediante Docker u otros sistemas de contenedores.
- Paneles de alojamiento que administren varias versiones de PHP.
- Entornos de desarrollo, pruebas y producción accesibles desde redes no confiables.
Según el aviso oficial de PHP, todas las instalaciones de PHP que atienden peticiones web deben revisarse. El equipo de PHP considera especialmente arriesgadas algunas configuraciones con Apache y mod_php, en las que una petición puede activar la vulnerabilidad antes de que se ejecute el código de la aplicación.
Por este motivo, actualizar una aplicación o instalar un complemento de seguridad no es suficiente: hay que corregir el intérprete PHP que utiliza el servicio web.
1. Comprobar la versión de PHP
El primer paso consiste en identificar la versión que ejecuta realmente la aplicación.
En servidores Linux
Ejecuta el siguiente comando por SSH:
php -vEste comando muestra la versión de PHP disponible en la línea de comandos. Sin embargo, puede no coincidir con la que utiliza el servidor web.
Para identificar los servicios PHP-FPM:
systemctl list-units --type=service --all | grep phpEn sistemas Debian o Ubuntu, también puedes revisar los paquetes instalados:
dpkg -l | grep -E 'php[0-9]+\.[0-9]+'Si utilizas Nginx, revisa la configuración del sitio para localizar la directiva fastcgi_pass. Esta indicará el socket o la dirección a la que se envían las peticiones PHP.
Si utilizas Apache, comprueba si trabaja con PHP-FPM o con un módulo PHP integrado.
En hosting compartido o paneles de administración
Si no tienes acceso SSH, busca en el panel de alojamiento la sección de configuración de PHP. Según el proveedor, puede aparecer como «Versión de PHP», «PHP Selector» o «Configuración del lenguaje».
Si no puedes consultar la versión, solicita al proveedor que confirme qué versión de PHP atiende tus aplicaciones y si ya ha aplicado las correcciones.
Importante: no basta con comprobar la versión de PHP de una única aplicación si el servidor aloja varios sitios web. Cada sitio puede utilizar una versión o una instancia diferente.
2. Versiones corregidas de PHP
Las versiones publicadas para corregir estas vulnerabilidades son las siguientes:
| Rama de PHP | Versión corregida |
|---|---|
| PHP 8.5 | 8.5.12 |
| PHP 8.4 | 8.4.27 |
| PHP 8.3 | 8.3.36 |
| PHP 8.2 | 8.2.35 |
Puedes comprobar estas versiones en el archivo oficial de avisos de PHP.
Si utilizas alguna de estas ramas, actualiza como mínimo a la versión indicada o a una revisión posterior que incluya las correcciones.
Las ramas PHP 8.1 y anteriores ya no reciben soporte de seguridad ordinario por parte del proyecto PHP. Debes planificar la migración a una versión compatible y mantenida. Si dependes de un proveedor que ofrece parches especiales para versiones antiguas, confirma expresamente que ha aplicado las correcciones correspondientes.
Ten en cuenta que algunas distribuciones Linux incorporan parches de seguridad sin cambiar la versión principal que muestran sus paquetes. Por ello, debes comprobar también los avisos de seguridad de la distribución utilizada.
Puedes consultar las versiones disponibles en la página de descargas oficiales de PHP.
3. Cómo actualizar PHP en Debian y Ubuntu
En servidores propios, la actualización debe realizarse mediante el sistema de paquetes o el mecanismo de instalación que se haya utilizado originalmente.
Paso 1. Realizar una copia de seguridad
Antes de modificar PHP, guarda una copia de los archivos de las aplicaciones, sus bases de datos y las configuraciones necesarias para restaurar el servicio.
Si administras un servidor de producción, planifica una ventana de mantenimiento cuando sea necesario y verifica que la copia de seguridad sea recuperable.
Paso 2. Actualizar la información de los repositorios
En Debian y Ubuntu:
sudo apt updateComprueba qué versiones están disponibles para la instalación actual:
apt-cache policy php8.3-fpmEste ejemplo corresponde a PHP 8.3-FPM. Cambia el nombre del paquete por el que realmente utilice tu servidor.
Si tu aplicación utiliza paquetes de la distribución, comprueba los avisos de seguridad de esa distribución. Si utilizas un repositorio externo, verifica su procedencia y que publique los paquetes corregidos.
Paso 3. Instalar las actualizaciones
Si el repositorio configurado proporciona una actualización que incorpora las correcciones, ejecuta:
sudo apt upgradeEste comando actualiza los paquetes instalados que puedan actualizarse según la configuración de APT. No garantiza que se instale una versión corregida si los repositorios todavía no la ofrecen.
Si necesitas migrar a otra rama de PHP, revisa previamente las extensiones, las dependencias y la compatibilidad de las aplicaciones.
Paso 4. Reiniciar el servicio correspondiente
Una vez actualizados los paquetes, verifica que el servicio PHP esté funcionando con la versión corregida.
Por ejemplo, para PHP 8.3-FPM:
sudo systemctl restart php8.3-fpm
sudo systemctl status php8.3-fpmAdapta el nombre a la versión instalada.
Si Apache utiliza un módulo PHP integrado, puede ser necesario reiniciar Apache para que cargue la versión actualizada:
sudo systemctl restart apache2En Nginx con PHP-FPM, actualizar o reiniciar Nginx por sí solo no corrige una versión vulnerable de PHP-FPM. Debes asegurarte de que el proceso PHP que atiende las peticiones utiliza los paquetes corregidos.
Paso 5. Verificar el resultado
Comprueba la versión de la línea de comandos:
php -vDespués, verifica la versión efectiva utilizada por la aplicación mediante sus herramientas administrativas o mediante los mecanismos de diagnóstico disponibles en tu entorno.
Si hay varias instancias de PHP instaladas, confirma que todas las que procesan peticiones web están corregidas.
4. Cómo actuar en Apache y Nginx
La actualización de PHP debe adaptarse a la arquitectura del servidor.
Apache con mod_php: actualiza el módulo PHP correspondiente y reinicia Apache cuando proceda. No presupongas que cambiar la versión de PHP CLI modifica automáticamente el módulo cargado por Apache.
Nginx con PHP-FPM: actualiza la instancia PHP-FPM utilizada por cada sitio y comprueba que Nginx sigue apuntando al socket o servicio correcto.
Apache con PHP-FPM: actualiza PHP-FPM y verifica la conexión entre Apache y la instancia correspondiente.
Varios sitios en un mismo servidor: identifica qué versión utiliza cada sitio. Algunos paneles de administración permiten seleccionar una versión diferente para cada dominio.
En todos los casos, después de la actualización comprueba que las aplicaciones responden correctamente, que los registros no muestran errores nuevos y que los procesos PHP activos se han sustituido cuando sea necesario.
5. ¿Qué ocurre si utilizas Docker?
Los contenedores también deben revisarse. Actualizar PHP en el sistema operativo del servidor no actualiza automáticamente la versión incluida en una imagen de contenedor.
Si utilizas una imagen oficial de PHP, revisa la etiqueta configurada en el Dockerfile o en el archivo de despliegue. Actualiza la imagen base a una versión corregida compatible con tu aplicación.
Por ejemplo, si tu servicio utiliza PHP-FPM, la imagen elegida debe corresponder a una revisión corregida de la rama utilizada. No basta con reconstruir el contenedor si el Dockerfile sigue apuntando a una imagen vulnerable.
Un procedimiento general sería:
- Identificar todas las imágenes que contienen PHP.
- Seleccionar una imagen corregida y compatible.
- Reconstruir las imágenes de la aplicación.
- Probar el nuevo despliegue en un entorno controlado.
- Desplegar los contenedores actualizados.
- Confirmar la versión PHP dentro de los contenedores en ejecución.
Evita depender de etiquetas genéricas que puedan cambiar de contenido sin que quede registrada la versión exacta. Para despliegues reproducibles, documenta las imágenes utilizadas y su revisión.
6. ¿Y si no puedes actualizar inmediatamente?
La prioridad debe ser aplicar el parche. Según el aviso oficial de PHP, no existe una mitigación completa que sustituya a la actualización.
Si no puedes actualizar de inmediato:
- Contacta con el proveedor de alojamiento o con el equipo responsable del servidor.
- Reduce temporalmente la exposición del servicio cuando sea viable.
- Revisa los registros de acceso, errores y actividad del sistema.
- Asegúrate de que las copias de seguridad estén disponibles y sean recuperables.
- Planifica una actualización urgente y documenta los sistemas que continúan pendientes.
Un cortafuegos de aplicaciones web, las restricciones de acceso y otras medidas defensivas pueden reducir ciertos riesgos, pero no garantizan que un intérprete vulnerable esté protegido.
Si no es posible corregir un servidor expuesto a Internet, considera aislarlo temporalmente de las redes públicas hasta que la actualización se haya aplicado y verificado. Esta recomendación también aparece en el aviso de CERT-EU.
7. Comprobar posibles indicios de compromiso
Si el servidor estuvo expuesto a Internet mientras ejecutaba una versión vulnerable, actualizar PHP es necesario, pero no demuestra que no haya ocurrido una intrusión.
En sistemas Linux, comienza revisando los registros disponibles. Algunas ubicaciones habituales son:
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/apache2/access.log
/var/log/apache2/error.logLas rutas y los nombres pueden variar según la distribución y la configuración.
Busca actividad anómala, errores repetidos, peticiones sospechosas y cambios inesperados. La ausencia de una cadena concreta en los registros no descarta un ataque.
También conviene revisar:
- Archivos ejecutables modificados sin autorización.
- Procesos y conexiones de red inesperados.
- Nuevas cuentas o cambios de permisos.
- Tareas programadas desconocidas.
- Credenciales o claves almacenadas a las que pudiera haber accedido un atacante.
- Alertas de seguridad del proveedor de alojamiento.
Si encuentras indicios de compromiso, conserva las evidencias, limita el acceso al sistema y realiza una investigación antes de eliminar archivos o restaurar copias. En incidentes confirmados puede ser necesario reconstruir el servidor desde una base limpia, corregir el vector de entrada y rotar las credenciales afectadas.
8. Lista de comprobación para administradores
Antes de cerrar la incidencia, confirma estos puntos:
- He identificado todas las instancias de PHP que procesan peticiones web.
- He comprobado la versión y el estado de los parches de seguridad.
- He actualizado todas las instalaciones vulnerables.
- He revisado las versiones utilizadas por contenedores y entornos de pruebas.
- He reiniciado o sustituido los procesos PHP cuando ha sido necesario.
- He verificado que las aplicaciones funcionan correctamente.
- He revisado los registros si existía exposición a Internet.
- He documentado las versiones corregidas y las tareas pendientes.
- He confirmado que dispongo de copias de seguridad recuperables.
Conclusión
Las vulnerabilidades PHP2Shell demuestran que la seguridad de una aplicación web depende también de sus componentes subyacentes. Aunque el código de la aplicación esté actualizado, una versión vulnerable de PHP puede poner en riesgo todo el servicio.
La respuesta debe comenzar por identificar las instancias afectadas, instalar las actualizaciones correspondientes y verificar que los procesos que atienden las peticiones están ejecutando la versión corregida. Si el servidor estuvo expuesto durante un periodo de vulnerabilidad, también es recomendable evaluar posibles indicios de compromiso.
Mantener PHP actualizado, controlar las dependencias y verificar cada entorno de ejecución son tareas esenciales para reducir la superficie de ataque de cualquier infraestructura web.
