Muchos servidores funcionan durante más tiempo del previsto. Una web o aplicación se pone en marcha, funciona, y el servidor que hay debajo se queda tal cual durante años. Hasta que un proveedor de hosting envía un aviso, un análisis de seguridad detecta una versión desactualizada o una vulnerabilidad sale en las noticias. Para entonces la actualización ya no es un paso sino varios, y nadie recuerda por qué está ahí esa tarea cron o ese módulo de Apache.
Actualizar un servidor exige cuidado y pruebas, pero gran parte del trabajo consiste en leer y comparar, una tarea tediosa, y ahí es donde ayuda la IA. Este artículo explica cómo funciona y qué puede hacer por tu servidor.
PHP2Shell: por qué importa ahora mismo
El 21 de octubre de 2026 el proyecto PHP publicó actualizaciones de seguridad de emergencia para dos vulnerabilidades críticas, conocidas como PHP2Shell (CVE-2026-109618 y CVE-2026-109619). Pueden permitir que un atacante ejecute código en el servidor sin iniciar sesión; qué vías de ataque funcionan depende del manejador de PHP, de la configuración y de la aplicación. Según el proyecto PHP, el riesgo es mayor con mod_php, donde un exploit ya demostrado lanza el ataque antes de que se ejecute código alguno de la aplicación. Eso significa que un sitio WordPress, Drupal o Joomla totalmente actualizado sigue expuesto si la versión de PHP que tiene debajo no está parcheada.
Según la Universidad de Bamberg, los fallos se remontan a PHP 5.4, que salió en 2012; para cualquier versión anterior, consulta el aviso de seguridad de tu proveedor de paquetes en lugar de suponer que no está afectada. Las versiones corregidas que publica el proyecto PHP son PHP 8.2.35, 8.3.36, 8.4.27 y 8.5.12. Las distribuciones de Linux y los proveedores incluyen la corrección en sus propios paquetes, a menudo con números de versión más bajos; Ubuntu 24.04, por ejemplo, la corrigió en la versión 8.3.6-0ubuntu0.24.04.13 del paquete php8.3. Así que lo que determina si un servidor está parcheado es el registro de cambios del paquete o el aviso de seguridad sobre CVE-2026-109618 y CVE-2026-109619, no solo el número de versión. Las demás versiones quedan así:
- PHP 8.1, 8.0 y 7.4: el proyecto PHP ya no publica actualizaciones para estas versiones. El equipo de seguridad sí publicó parches mínimos del código fuente, y algunas distribuciones de Linux y proveedores comerciales de soporte ofrecen correcciones adaptadas (backports). Un paquete así corrige estos dos fallos, pero la versión sigue sin soporte del proyecto PHP, así que comprueba qué cubre tu proveedor y planifica la actualización.
- PHP 7.3 y anteriores, incluido todo PHP 5.x: el proyecto PHP no ofrece ninguna corrección para estas versiones, ni siquiera un parche del código fuente. Algunos proveedores comerciales sí distribuyen paquetes con backports. Por ejemplo, CloudLinux informa de paquetes alt-php parcheados para PHP 5.2 a 5.6 y 7.0 a 7.4, paquetes ea-php parcheados de cPanel EasyApache y paquetes TuxCare ELS. Estos paquetes pueden darte tiempo mientras se planifica una actualización, pero no hacen que el proyecto PHP vuelva a dar soporte a estas versiones. La solución duradera sigue siendo actualizar a una versión con soporte.
- PHP 8.2: parcheada, pero esta versión llega al final de su vida útil el 31 de diciembre de 2026. A partir de entonces el proyecto PHP no publicará más correcciones de seguridad para ella, así que este es el momento de planificar el siguiente paso.
El proyecto PHP sí indica medidas temporales de configuración, pero deja claro que no hacen segura una instalación. Solo una actualización lo consigue.
Aparte de estos dos fallos, el proyecto PHP publicó un aviso informativo el 23 de octubre de 2026 sobre CVE-2026-115560, una tercera vía de ejecución remota de código que sigue abierta tras las versiones de emergencia. Se considera poco probable y solo afecta a aplicaciones que configuran session.serialize_handler como php_binary o php_serialize y después lo cambian a php en tiempo de ejecución con ini_set() antes de session_start(), con el progreso de subida de sesión (session upload progress) activado. Si tu aplicación está en ese caso, el proyecto PHP sugiere establecer session.upload_progress.enabled=0 hasta la próxima versión ordinaria de corrección de errores, que llegará con un aviso completo.
No solo PHP: Node.js, Python y más
Ese mismo día, Node.js publicó una actualización de seguridad que corrige diez vulnerabilidades, cuatro de ellas de gravedad alta. La más grave, CVE-2026-111497, está en la biblioteca de descompresión Brotli de Google y se conoce con varios nombres: Node2Shell, HTTP2Shell y Broccoli2Shell. Descomprimir datos proporcionados por un atacante puede llevar a la ejecución remota de código. Las versiones corregidas son Node.js 22.23.4, 24.22.1 y 26.12.1. Node.js 20 y anteriores, y las ramas impares 21, 23 y 25, han llegado al final de su vida útil y no reciben corrección del proyecto Node.js.
El fallo está en la biblioteca Brotli, que Node.js incluye, así que comprueba tanto el propio entorno de ejecución de Node.js como tus dependencias. Brotli está afectada a partir de la versión 1.0.3; las versiones corregidas son 1.0.10, 1.1.1 y 1.2.1, una por cada rama. Las distribuciones de Linux suelen aplicar la corrección sin cambiar el número de versión, así que lo que determina si estás afectado es el registro de cambios del paquete o el aviso de seguridad, no solo el número de versión. El fallo va mucho más allá de Node.js:
- Python: hay que actualizar los paquetes
brotliybrotlicffia 1.2.1 y 1.2.1.0 o posteriores. Ten en cuenta que clientes HTTP populares como requests (a través de urllib3), httpx, aiohttp y Scrapy usan estos paquetes automáticamente en cuanto están instalados. Tu código no tiene que mencionar Brotli en ningún sitio para estar afectado. - Java: brotli4j está corregido en la versión 1.24.0.
- .NET: corregido en 8.0.33, 9.0.22 y 10.0.14. .NET 7 no recibe corrección.
- Ruby y Go: también figuran como afectados. Que tu aplicación esté expuesta depende de la biblioteca Brotli que use. Una biblioteca que lleva su propia copia del decodificador sigue siendo vulnerable hasta que publique su propia actualización.
- PHP en Windows: se puede llegar al decodificador Brotli a través de la extensión cURL cuando la descompresión HTTP automática está activada. Los paquetes de Windows recompilados 8.2.35-1, 8.3.36-1, 8.4.27-1 y 8.5.12-1, publicados el 26 de octubre de 2026, incluyen Brotli 1.2.1. El sufijo
-1indica una recompilación del paquete y PHP sigue mostrando la misma versión, así que un paquete de Windows anterior de la misma versión de PHP no contiene la corrección de Brotli. - Otro software: curl, Bun, Envoy e Istio, así como los paquetes Brotli de las distribuciones de Linux. En el momento de escribir esto, no todas las distribuciones tenían ya una corrección lista.
Cabe destacar que parte de estas vulnerabilidades las encontraron investigadores que usaban IA. Si la IA ayuda a encontrar fallos que llevaban años sin detectarse, espero que las actualizaciones de seguridad sigan llegando a un ritmo mayor. Un servidor que va varias versiones por detrás no puede seguir ese ritmo.
Por qué las actualizaciones suelen aplazarse
La complejidad de una actualización varía de un servidor a otro. Aun así, gran parte del esfuerzo es una investigación y comparación tediosas, difíciles de estimar:
- Primero hay que averiguar qué hay realmente en el servidor: paquetes, extensiones de PHP, versiones de Node.js y Python, ajustes de configuración, hosts virtuales, tareas programadas y servicios.
- Hay que revisar cada aplicación en busca de código que ya no funciona en la nueva versión. Desde PHP 5 es un gran salto: las antiguas funciones
mysql_*se eliminaron en PHP 7.0, yeach()ycreate_function()en PHP 8.0, por citar algunas. - Las versiones antiguas de PHP suelen funcionar sobre una versión antigua del sistema operativo, que entonces también hay que actualizar, junto con la base de datos y el servidor web.
- Hay que leer las notas de versión y las guías de migración de cada componente y compararlas con tu configuración.
- Después hay que probarlo todo, idealmente sin tocar el sitio en producción.
La mayor parte de esto es leer y comparar con cuidado, lo que lo encarece cuando se hace todo a mano. Ahí es donde ayuda la IA.
Cómo uso la IA en una actualización
Aquí la IA no sustituye a la experiencia. Acelera la lectura, la comparación y los cambios repetitivos, mientras que yo sigo al mando de cada decisión.
1. Inventario del servidor
La IA me ayuda a escribir scripts que recorren el servidor de forma sistemática: paquetes instalados y sus versiones, extensiones de PHP y ajustes de php.ini, entornos de ejecución de Node.js y Python y sus dependencias, configuración del servidor web, tareas cron, servicios y archivos de registro. Después, la IA trabaja con la salida anonimizada de esos scripts, no con el servidor en producción. Así también salen a la luz las partes olvidadas, como una copia incluida de una biblioteca vulnerable, que de otro modo solo aparecerían después de la actualización.
2. Análisis del código
Herramientas de análisis estático como PHPStan, Rector y PHPCompatibility encuentran código obsoleto o eliminado en la versión de PHP de destino. Para Node.js y Python, npm audit y pip-audit informan de dependencias con vulnerabilidades conocidas, y npm outdated y pip list --outdated muestran qué dependencias se han quedado atrás. Estas herramientas cubren las dependencias del proyecto, no el propio entorno de ejecución de Node.js o Python, que se comprueba aparte. La IA repasa los resultados, los agrupa, propone cuáles son problemas reales y cuáles ruido, y sugiere correcciones concretas; yo contrasto esa clasificación con los avisos de seguridad y el código antes de actuar. En un salto de PHP 5 o 7 a una versión actual, es aquí donde la IA me resulta más útil.
3. Notas de versión y dependencias
Para cada componente, la IA compara los cambios entre la versión actual y la de destino con tu configuración y tu código: valores por defecto modificados, opciones eliminadas, paquetes que necesitan una versión principal más reciente. El resultado es una lista de puntos que importan específicamente para tu servidor, no una lista de comprobación genérica.
4. Plan de actualización
A partir de ahí elaboro un plan paso a paso: el orden de las actualizaciones, qué se prueba después de cada paso y cómo volver atrás si algo sale mal. En un salto grande, como de PHP 5.6 a 8.4, eso puede suponer pasos intermedios. Tras actualizar la base de datos, volver atrás suele significar restaurar la copia de seguridad en lugar de reinstalar el software antiguo, así que se acuerda de antemano qué se hace con los datos escritos después del cambio.
5. Primero, en una copia
La actualización se hace primero en una copia del servidor, por ejemplo un VPS clonado a partir de una copia de seguridad. Cómo se hace depende de cómo esté alojado el servidor. En el caso de un servidor dedicado físico (bare metal), primero restauro una copia en un VPS para el ensayo; el comportamiento específico del hardware necesita comprobaciones aparte, porque una copia virtual no puede reproducirlo. Antes de que la copia ejecute nada, se detienen sus tareas programadas, y el correo saliente, los proveedores de pago y otras integraciones reales se desactivan o se redirigen a cuentas de prueba, para que la copia no pueda actuar sobre datos reales ni sobre clientes. Cuando algo falla ahí, la IA ayuda a analizar los mensajes de error y los registros, y la solución se incorpora al plan. Una corrección de seguridad disponible no debería esperar a toda la migración: cuando un paquete mantenido corrige el fallo, esa actualización concreta puede probarse e implantarse primero, y la actualización más amplia del framework, el sistema operativo y la base de datos sigue su propio plan ensayado.
Antes del cambio, compruebo en la copia:
- Las pruebas automatizadas de la aplicación, si las hay
- Las funciones clave: inicio de sesión, formularios, búsqueda, y pedidos o pagos en modo de prueba
- Que las tareas programadas, las colas y los procesos en segundo plano se ejecutan sin errores
- Que el correo se genera correctamente (capturado, no enviado)
- Que las versiones, extensiones y ajustes de PHP, del servidor web y de la base de datos son los previstos
- Que los registros de errores siguen limpios y que las páginas responden más o menos igual de rápido que antes
Solo cuando la actualización funciona en la copia la llevo a cabo en el servidor de producción, en un momento acordado contigo y con una copia de seguridad reciente preparada.
6. Comprobación posterior
Después del cambio compruebo en el servidor de producción, para que los problemas salgan a la luz lo antes posible, idealmente antes de que tus usuarios o clientes los noten:
- Las mismas funciones clave, comprobadas de nuevo
- Los registros y las tasas de error, vigilados durante un periodo acordado
- Que lo que realmente se está ejecutando usa las versiones parcheadas: workers de PHP-FPM y Apache y procesos de Node.js reiniciados, contenedores reconstruidos y copias incluidas de bibliotecas como Brotli actualizadas. Un paquete actualizado en disco no sirve de nada a un proceso que sigue ejecutando el código antiguo.
Lo que la IA hace y lo que no
Normalmente la IA no tiene ningún acceso al servidor ni a datos privados. La uso para escribir los scripts que hacen el trabajo de inventario y actualización, a partir de copias de archivos de configuración, la salida del inventario y extractos de los registros, con las credenciales eliminadas y los nombres de dominio y otros datos identificativos anonimizados.
La IA comete errores. Puede proponer una corrección que parece plausible pero es errónea, o basar una conclusión en documentación desactualizada. Por eso la salida de la IA nunca se aplica sin revisar. Reviso cada cambio propuesto, se prueba primero en una copia, y las decisiones sobre tu entorno de producción las tomo yo, como persona.
La ventaja está en la rapidez y la minuciosidad. La IA puede ahorrar tiempo en la lectura y la búsqueda que implica una actualización y, como revisa de forma sistemática, puede ayudar a reducir los detalles que se pasan por alto. Eso puede abaratar una actualización bien fundamentada.
Qué puedo actualizar
- PHP, de 5.x y 7.x a una versión actual, incluidas extensiones y configuración
- Node.js y dependencias de npm
- Python y dependencias de pip
- El sistema operativo (p. ej., Debian o Ubuntu a una versión más reciente)
- Servidores web: Apache y nginx
- Bases de datos: MySQL y MariaDB
- Dependencias de Composer y frameworks
- Servicios complementarios como Redis y certificados TLS
¿Le toca a tu servidor una actualización?
¿Sigues usando PHP 5, 7, 8.0, 8.1 u 8.2, o una versión antigua de Node.js o Python? ¿No tienes claro qué versiones usa tu servidor? Ponte en contacto conmigo. Empezaré con un inventario y te diré qué implica la actualización y qué hará falta, antes de hacer ningún cambio.
Contacta conmigo para actualizar tu servidor.
Fuentes
- Noticias de php.net: aviso de PHP2Shell, versiones corregidas, backports para 7.4 a 8.1, medidas provisionales, compilaciones de Windows con Brotli, fin de vida de PHP 8.2
- php.net: aviso informativo sobre CVE-2026-115560 (23 de octubre de 2026)
- Versiones de PHP con soporte
- Versiones de seguridad de Node.js de octubre de 2026
- Aikido: paquetes de Python vulnerables a Node2Shell (Brotli CVE-2026-111497)
- Universidad de Bamberg: PHP2Shell und Node.js (rango de PHP 5.4 a 8.5.11; Ruby y Go incluidos)
- Mend: CVE-2026-111497
- Dr. Web: HTTP2Shell Brotli-Lücke in Node und Python
- BleepingComputer: PHP publica parches de emergencia para PHP2Shell
- Varonis: PHP2Shell
- CloudLinux: PHP CVE-2026-109618 y CVE-2026-109619 (paquetes alt-php, ea-php y TuxCare ELS parcheados)