En resumen: Para comprobar la versión de PHP no basta con php -v. Hay que saber qué versión de PHP usa realmente el servidor web, si el paquete contiene la corrección, también como backport con número antiguo, y si tras la actualización se han reiniciado todos los procesos. PHP2Shell está corregida en 8.5.12, 8.4.27, 8.3.36 y 8.2.35.
Por qué el número de versión por sí solo no basta
Para PHP2Shell hay una lista clara de versiones corregidas. En la práctica, sin embargo, tres situaciones llevan a valoraciones erróneas:
- Varias instalaciones: la línea de comandos muestra PHP 8.3, pero el sitio web se ejecuta mediante un pool con PHP 8.1.
- Backports: las distribuciones y los proveedores de hosting incorporan en ocasiones las correcciones en paquetes existentes. Entonces Plesk, por ejemplo, sigue mostrando 8.2.34 aunque esté parcheado.
- Procesos antiguos: los archivos nuevos están en el disco, pero los workers en ejecución proceden todavía de antes.
Para la dirección y las personas no técnicas ayuda una regla sencilla: no pregunte solo «¿qué versión de PHP tenemos?», sino «¿está PHP2Shell cerrada en todos los servidores y cómo lo vemos?». Una respuesta sólida contiene tres pruebas: versión o backport, estado del paquete y momento del reinicio.
Por eso, la comprobación técnica tiene tres pasos: versión, estado del paquete, procesos en ejecución. Los comandos siguientes son de solo lectura. Los nombres de paquetes y servicios varían según la distribución, el origen de PHP y la interfaz de hosting; los ejemplos parten de PHP 8.3.
Comprobar la versión de PHP en la línea de comandos
php -v # versión de la línea de comandos
ls /etc/php/ 2>/dev/null # Debian/Ubuntu: ramas instaladas
php-fpm8.3 -v # versión del binario de FPM (el nombre varía según la distribución)
php -i | grep -E "^PHP Version|Server API|Loaded Configuration File"
En RHEL, AlmaLinux o Rocky, el binario de FPM suele llamarse php-fpm; con Software Collections o fuentes de terceros hay otras versiones en rutas propias. Plesk y cPanel traen instalaciones de PHP propias, que existen junto al PHP del sistema. Cómo proceder allí se describe en las páginas sobre Plesk y cPanel.
Qué versión de PHP usa un sitio web en el contexto web se ve de la forma más fiable en la configuración del pool o del VirtualHost, o en la interfaz de hosting. Una página phpinfo también lo muestra; créela solo brevemente, con protección de acceso y un nombre aleatorio, y elimínela inmediatamente después.
En el hosting compartido, normalmente no tiene acceso a la línea de comandos. Entonces la interfaz de hosting muestra la versión de PHP configurada para cada sitio web. Pero rara vez consta allí si se ha instalado un backport y se ha reiniciado. En ese caso, el camino fiable es la confirmación por escrito del proveedor de hosting.
Comprobar el estado del paquete y los backports
El estado del paquete muestra lo que su distribución ha entregado realmente:
# Debian/Ubuntu
apt policy php8.3-fpm
apt changelog php8.3-fpm | grep -i -E "CVE-2026-109618|CVE-2026-109619"
# RHEL, AlmaLinux, Rocky, Fedora
dnf info php-fpm
rpm -q --changelog php-fpm | grep -i -E "CVE-2026-109618|CVE-2026-109619"
Si uno de los números CVE figura en el changelog, el backport está incluido en el paquete instalado. Si falta la entrada, todavía no es una prueba de vulnerabilidad: algunos responsables de paquetes redactan los changelogs de otra forma. Entonces compare la versión del paquete con los avisos de seguridad de su distribución o pregunte al proveedor. Encontrará un modelo para esa consulta en Cómo preguntar a su proveedor de hosting por el estado del parche.
Importante: revise cada paquete de PHP instalado, no solo el primero. En servidores con varias ramas, con frecuencia una está parcheada y otra no.
¿Se está ejecutando realmente la versión nueva?
Una actualización solo es efectiva cuando se han reiniciado todos los procesos de PHP. Compare la hora de inicio de los procesos en ejecución con el momento de la actualización:
ps -o pid,lstart,cmd -C php-fpm8.3 # hora de inicio de los procesos FPM
systemctl status php8.3-fpm # desde cuándo se ejecuta el servicio
needrestart -r l # Debian/Ubuntu, si está instalado: muestra procesos obsoletos
Si la hora de inicio es anterior a la actualización, siguen en ejecución procesos antiguos. En Apache con mod_php vale lo mismo para los procesos de Apache. Cómo reiniciar correctamente se describe en Reiniciar PHP-FPM y todos los workers.
Deje el resultado por escrito: servidor, versión de PHP, versión del paquete, CVE en el changelog sí o no, momento del reinicio. Necesitará esta nota para la dirección, la aseguradora y una posterior revisión de rastros.
Interpretar el resultado
| Hallazgo | Valoración |
|---|---|
| Versión oficial 8.5.12, 8.4.27, 8.3.36 u 8.2.35, procesos reiniciados | PHP2Shell cerrada |
| Número anterior, números CVE en el changelog del paquete, procesos reiniciados | backport instalado, cerrada |
| Número anterior, sin entrada en el changelog, sin confirmación | sin aclarar, hay que aclararlo con el proveedor |
| PHP 8.1 o anterior sin backport confirmado | abierta, hacen falta medidas provisionales y migración |
| Procesos más antiguos que la actualización | falta el reinicio, la vulnerabilidad sigue activa |
Si un servidor queda en el estado «sin aclarar», trátelo como abierto: aplique medidas provisionales y haga seguimiento de la aclaración hasta que haya una prueba. La vista general completa de versiones figura en ¿Qué versiones de PHP están afectadas?.
¿Cómo ayuda PHP SOS en concreto?
Con el servicio de parcheo de PHP nos encargamos de la comprobación y del justificante:
- Encontrar todas las instalaciones, también las segundas versiones de paneles de hosting, Software Collections o contenedores.
- Valorar el estado del paquete: versión oficial, backport o abierta, con prueba del changelog o del proveedor.
- Controlar el reinicio, hasta que ya no se ejecute ningún proceso con código antiguo.
- Elaborar un protocolo de comprobación que pueda usar internamente y ante terceros.
Preguntas frecuentes
¿Por qué muestra php -v una versión distinta de la de mi sitio web?
En muchos servidores hay varias versiones de PHP instaladas. La línea de comandos usa una; el servidor web o un pool de FPM, otra. Compruebe por eso la versión que realmente se ejecuta en el contexto web, por ejemplo mediante el binario de FPM o la interfaz de hosting.
¿Cómo reconozco un backport?
En los paquetes de distribuciones, la corrección suele figurar en el changelog del paquete, a menudo con el número CVE. En Debian y Ubuntu ayuda apt changelog; en sistemas de la familia RHEL, rpm -q --changelog. Si falta la entrada, aclare el estado con el proveedor.
¿Puedo comprobar la versión de PHP en el menú de cliente del hosting?
Sí, la mayoría de las interfaces muestran la versión configurada para cada sitio web. Allí normalmente no se ve si se ha instalado un backport y se ha reiniciado. Para eso, el camino fiable es una confirmación por escrito del proveedor de hosting.