PHP2Shell: qué es y qué hacer
PHP2Shell es el nombre de dos fallos graves en el propio PHP, el lenguaje de muchos sitios web. Un atacante sin cuenta puede usarlos para ejecutar código en su servidor web o leer datos de la memoria del servidor. Una actualización de PHP corrige los dos.
Revisado el . Reglas del . Resumen en español de las guías en inglés.
Qué es PHP2Shell
El proyecto PHP publicó el 21 de octubre de 2026 un aviso de seguridad sobre dos fallos críticos. Los fallos están en PHP, no en el código de su sitio. Cada uno tiene su número CVE:
- CVE-2026-109618: ejecución de código a través de un estado que PHP deja inconsistente cuando se queda sin memoria.
- CVE-2026-109619: ejecución de código a través de un estado obsoleto que una petición deja a la siguiente (use-after-free).
Según php.net, está en riesgo toda instalación de PHP que atiende peticiones web, entre ellas PHP-FPM, Apache con mod_php, php-cgi, FrankenPHP y LiteSpeed.
Actualizar WordPress, un plugin, un tema u otra aplicación no cambia PHP. Su proveedor de alojamiento o el administrador del servidor tiene que instalar la actualización de PHP.
Versiones corregidas
Su rama son los dos primeros números de su versión de PHP. Necesita la versión corregida de su rama o una más reciente. Las cuatro versiones salieron el 21 de octubre de 2026 y corrigen los dos fallos.
| Rama | Versión corregida | Estado |
|---|---|---|
| 8.5 | 8.5.12 | Con soporte. |
| 8.4 | 8.4.27 | Con soporte. |
| 8.3 | 8.3.36 | Con soporte. |
| 8.2 | 8.2.35 | Con soporte hasta el 31 de diciembre de 2026. Prepare el paso a una rama más reciente. |
| 8.1 | ninguna | Fin de vida. Vea más abajo. |
| 8.0 | ninguna | Fin de vida. Vea más abajo. |
| 7.4 | ninguna | Fin de vida. Vea más abajo. |
Algunas distribuciones mantienen el número antiguo
Las distribuciones de Linux y los proveedores de alojamiento publican sus propios paquetes corregidos. Algunas, como Ubuntu y el PHP por defecto de RHEL 9, añaden la corrección y mantienen el número antiguo de PHP. Por ejemplo, Ubuntu 24.04 corrige PHP 8.3.6 con el paquete 8.3.6-0ubuntu0.24.04.13, y php -v sigue mostrando 8.3.6.
Un número bajo no siempre significa un PHP sin corregir.
Compare la versión del paquete, no solo el número de PHP. La página Fixed PHP packages on Linux (en inglés) da el paquete corregido de cada distribución.
Cómo ver su versión de PHP
En un alojamiento compartido, mire en su panel de alojamiento o pregunte a su proveedor. WordPress, Drupal y aplicaciones similares suelen mostrar la versión de PHP en su área de administración.
En su propio servidor, este comando muestra la versión de PHP de la línea de comandos. El sitio web puede usar otro PHP, por ejemplo PHP-FPM.
php -v
Para ver el PHP que sirve el sitio, cree en la raíz web un archivo con un nombre aleatorio que termine en .php, por ejemplo info-7f3k9q.php, con este contenido:
<?php phpinfo();
Ábralo una vez en el navegador y lea la versión en la parte superior. Borre el archivo enseguida: muestra muchos datos privados.
Qué hacer
- Actualice PHP. Instale 8.5.12, 8.4.27, 8.3.36 o 8.2.35, o una versión más reciente de la misma rama. Un paquete corregido de su distribución de Linux o de su proveedor también sirve.
- Reinicie PHP. Reinicie Apache, cada pool de PHP-FPM y los procesos de PHP de larga duración. Los procesos antiguos mantienen el código antiguo hasta que se detienen.
- Compruebe de nuevo. Mire otra vez la versión del PHP que sirve el sitio, no solo la de la línea de comandos.
Comandos para su propio servidor
Los comandos son los mismos que en las guías en inglés, con sus comentarios en inglés.
Debian y Ubuntu (ponga su rama en el nombre del servicio):
# show installed PHP packages and versions
dpkg -l | grep -E '^ii +(php[0-9.]*-(fpm|cgi|common)|libapache2-mod-php)'
# install the update
sudo apt update && sudo apt upgrade
# restart (use your branch, for example php8.3-fpm)
sudo systemctl restart php8.3-fpm
sudo systemctl restart apache2
RHEL, AlmaLinux y Rocky Linux:
# show the installed version (php8.4-common for PHP 8.4 on version 10)
rpm -q php-common
# show which module stream is enabled (marked [e])
dnf module list php
# install the update
sudo dnf upgrade 'php*'
# restart
sudo systemctl restart php-fpm
sudo systemctl restart httpd
Alpine, contenedores y paneles de alojamiento: vea Linux y Platforms (en inglés).
Nuestro consejo En un contenedor, descargue la imagen base actualizada, reconstruya su imagen y vuelva a crear el contenedor. Un simple reinicio mantiene el PHP antiguo.
En un alojamiento compartido
Usted no puede actualizar PHP; su proveedor sí. Copie este mensaje, añada su dominio y envíelo al soporte de su proveedor:
Hola:
¿Pueden confirmar que el PHP de mi alojamiento incluye las correcciones de PHP2Shell (CVE-2026-109618 y CVE-2026-109619)? Dominio: example.com
¿Qué versión y qué compilación exactas de PHP sirven mi dominio? ¿Es 8.5.12, 8.4.27, 8.3.36 o 8.2.35, una versión posterior de la misma rama, o una compilación con la corrección incorporada (backport)?
¿Reiniciaron PHP-FPM, el servidor web y los demás procesos de PHP después de la actualización?
Gracias.
PHP 7.4, 8.0 y 8.1
El proyecto PHP ya no publica versiones para estas ramas. Su equipo de seguridad publicó solo pequeños parches de código fuente. Para las ramas anteriores, el proyecto PHP no publicó nada. Pida a su proveedor una compilación corregida o pase a una rama con soporte. Vea PHP 7.4, 8.0 y 8.1 (en inglés).
Comprobar su sitio
El comprobador de php2shell.fyi lee lo que su sitio muestra en público y lista las señales de PHP que encuentra. No puede ver un paquete corregido detrás de un número antiguo. Confirme el resultado en el servidor o con su proveedor.
El comprobador, su resultado y las guías detalladas están en inglés.
Abrir el comprobador (en inglés)
Aviso oficial en español
INCIBE-CERT, del Instituto Nacional de Ciberseguridad (INCIBE), publicó un aviso sobre los dos fallos: Múltiples vulnerabilidades en PHP.