jueves, 22 de octubre de 2026

Vulnerabilidad crítica en PHP (octubre 2026): cómo comprobar y actualizar tu web paso a paso

Esta semana se han publicado parches de emergencia para PHP, el lenguaje en el que funcionan millones de webs. Si tienes una web, una tienda online o simplemente programas en tu Mac, esta guía te lleva de la mano: qué versión tienes, cómo actualizarla y cómo comprobar que tu código sigue funcionando. Los ejemplos usan IONOS como hosting y un Mac, pero sirve igual para otros proveedores. No hace falta ser programador: cada comando lleva su simulación y su explicación.

🧭 Lo que vas a hacer
  1. Entender qué ha pasado (2 minutos).
  2. Mirar qué versión de PHP tiene tu hosting.
  3. Actualizar PHP en tu Mac.
  4. Comprobar que tus archivos PHP no tienen errores.
  5. Pasar una herramienta que detecta código incompatible con versiones nuevas.
  6. Subir de versión en el hosting con seguridad.

🚨 1. Qué ha pasado

El 21 de octubre de 2026 el equipo de PHP publicó las versiones 8.2.35, 8.3.36, 8.4.27 y 8.5.12. Corrigen dos vulnerabilidades críticas, identificadas como CVE-2026-109618 y CVE-2026-109619, que según el propio proyecto pueden permitir ejecución remota de código sin autenticación.

Dicho en llano: alguien desde internet podría conseguir que un servidor con una versión vulnerable ejecute órdenes suyas, sin necesitar ninguna contraseña. El proyecto PHP indica además que no hay mitigaciones completas: actualizar es la única opción segura.

⚖️ Sin alarmismo

Que exista el fallo no significa que tu web haya sido atacada. Significa que hay un parche y que conviene tenerlo puesto cuanto antes. Esta guía es para comprobarlo con calma.

¿Qué parte me toca a mí y cuál al hosting?

Son dos sitios distintos donde se ejecuta PHP:

  • El servidor de tu hosting (IONOS, por ejemplo). En un hosting compartido el servidor lo mantiene el proveedor: él aplica el parche y tú eliges la rama (8.3, 8.4...). En mi caso, IONOS escribió a sus clientes diciendo que ya lo había aplicado, también en versiones sin soporte oficial gracias a su servicio de Soporte Extendido para PHP. Aun así, conviene comprobarlo tú.
  • Tu ordenador. Si programas en local, tu copia de PHP no se actualiza sola.
🎣 Ojo con el phishing

Con noticias así circulan correos falsos que imitan a tu proveedor. No pulses enlaces de un correo: entra a tu panel escribiendo tú la dirección en el navegador, y comprueba que el remitente es del dominio oficial.

🔎 2. Mira qué versión de PHP tiene tu hosting

En el panel de IONOS entra en la sección de Hosting y busca la configuración de PHP (también puedes escribir «PHP» en el buscador del panel). Verás una lista como esta, con cada dominio y la versión que usa:

Configuración de PHP · ejemplo ilustrativo
DominioVersión PHPEstado
tudominio.comPHP 8.4Con soporte
otra-web.esPHP 8.3Con soporte
web-antigua.comPHP 7.4Sin soporte oficial

Recreación de ejemplo con dominios inventados. El diseño real del panel puede cambiar.

Cómo interpretarlo:

  • 8.2, 8.3, 8.4 o 8.5: ramas con parche oficial. Si el hosting ya lo ha aplicado, estás cubierto.
  • 8.1 o anterior: el proyecto PHP ya no las parchea. Algunos proveedores ofrecen soporte extendido, pero lo sensato es subir de rama en cuanto puedas.
📌 Y la versión exacta (el último número)

El panel suele mostrar solo la rama (8.3, 8.4). Si quieres ver la versión exacta, puedes crear un archivo de prueba, abrirlo en el navegador y borrarlo enseguida. Es importante borrarlo: enseña información interna de tu servidor.

info.php
<?php phpinfo(); ?>
👉 Cómo se usa: guarda esa línea en un archivo llamado info.php, súbelo a tu web, ábrelo (tudominio.com/info.php) y mira el título de la página, donde pone «PHP Version». Después elimínalo del servidor.

💻 3. Actualiza PHP en tu Mac

Aunque tu web esté en un hosting, es muy probable que tengas PHP también en tu propio ordenador para programar y probar. Esa copia no se actualiza sola: la tienes que actualizar tú. Son cuatro pasos y se hacen en la aplicación Terminal (la encuentras con Spotlight: ⌘ + Espacio y escribes «Terminal»).

📌 Qué versiones ya están corregidas

Cada rama de PHP tiene su propio parche. La tuya tiene que ser igual o superior a la de esta tabla:

Si usas la rama…Debes tener al menos…
PHP 8.58.5.12
PHP 8.48.4.27
PHP 8.38.3.36
PHP 8.28.2.35
PHP 8.1 o anteriorSin parche oficial: conviene subir de rama

Paso 1 · Mira qué versión tienes ahora

Escribe el comando y pulsa Enter. Pulsa ▶ Ver ejemplo para ver cómo se vería en tu pantalla.

Terminal — zsh
tu-usuario@mac ~ % php -v
PHP 8.5.5 (cli) (built: Apr 7 2026 16:24:10) (NTS)
Copyright (c) The PHP Group
Built by Homebrew
Zend Engine v4.5.5, Copyright (c) Zend Technologies
Simulación: tu salida puede variar un poco
👉 Cómo se lee: fíjate solo en el primer número, aquí 8.5.5. La versión corregida de la rama 8.5 es la 8.5.12, así que esta copia está desactualizada.
💡 Consejo

Si en lugar de la versión te sale command not found: php, es que no tienes PHP instalado en el Mac. Entonces no hay nada que actualizar; puedes instalarlo más adelante con brew install php si quieres probar tus proyectos en local.

Paso 2 · Actualiza la lista de Homebrew

Homebrew es el programa que instala y actualiza PHP en el Mac. Primero le pedimos que consulte cuáles son las últimas versiones disponibles.

Terminal — zsh
tu-usuario@mac ~ % brew update
==> Updating Homebrew...
Updated 2 taps (homebrew/core and homebrew/cask).
Simulación: tu salida puede variar un poco
👉 Cómo se lee: «Updated» significa que Homebrew ya conoce las últimas versiones. No ha cambiado nada en tu Mac todavía.

Paso 3 · Instala la versión con el parche

Ahora sí: le pedimos que actualice PHP. Homebrew te enseñará qué va a cambiar y te preguntará si quieres continuar. Escribe y (de «yes») y pulsa Enter. Puede tardar unos minutos, porque también actualiza librerías que PHP necesita.

Terminal — zsh
tu-usuario@mac ~ % brew upgrade php
==> Would upgrade 1 requested outdated package
php 8.5.5 -> 8.5.12 (29.4MB)
==> Would upgrade 1 dependent
composer 2.9.7 -> 2.10.3 (831.4KB)
==> Do you want to proceed with the upgrade? [y/n]
y
==> Upgrading php
php 8.5.12 instalado ✔
Simulación: tu salida puede variar un poco
👉 Cómo se lee: la línea amarilla te dice de qué versión a cuál pasa (8.5.5 → 8.5.12). Si Homebrew no te ofrece la nueva todavía, repite el paso 2 pasadas unas horas.

Paso 4 · Comprueba que ha funcionado

Cierra la ventana de Terminal, ábrela de nuevo y repite el comando del paso 1.

Terminal — zsh
tu-usuario@mac ~ % php -v
PHP 8.5.12 (cli) (built: Oct 19 2026 17:02:46) (NTS)
Copyright (c) The PHP Group
Built by Homebrew
Zend Engine v4.5.12, Copyright (c) Zend Technologies
Simulación: tu salida puede variar un poco
✅ Cómo se lee: ahora sale 8.5.12, la versión con el parche. Tu Mac está al día.
⚠️ Importante

Si usas un servidor local (por ejemplo php -S, MAMP o Apache) y lo tenías encendido mientras actualizabas, reinícialo para que use la versión nueva.

✅ 4. Comprueba que tus archivos PHP no tienen errores

Antes de subir de versión en el hosting, conviene saber si tu código se lleva bien con PHP moderno. La primera comprobación es la más sencilla: php -l (la «l» es de lint, revisar). Lee el archivo y te dice si PHP lo entiende. No ejecuta nada.

Un solo archivo

Terminal — zsh
tu-usuario@mac mi-web % php -l checkout.php
No syntax errors detected in checkout.php
Simulación: tu salida puede variar un poco
✅ Cómo se lee: «No syntax errors» = PHP entiende el archivo sin problemas.

Y así se ve cuando hay un fallo (aquí, una llave que sobra):

Terminal — zsh
tu-usuario@mac mi-web % php -l checkout.php
PHP Parse error: Unmatched '}' in checkout.php on line 12
Errors parsing checkout.php
Simulación: tu salida puede variar un poco
❌ Cómo se lee: te dice el archivo y la línea donde mirar. Ese mensaje es el que puedes copiar y pegar a quien te ayude a arreglarlo.

Todos los archivos de una carpeta

Sustituye ~/mi-web por la carpeta de tu proyecto. Un truco: escribe find y arrastra la carpeta desde el Finder a la ventana de Terminal; la ruta se escribe sola.

Terminal — zsh
tu-usuario@mac ~ % find ~/mi-web -name "*.php" -exec php -l {} \;
No syntax errors detected in /Users/tu-usuario/mi-web/index.php
No syntax errors detected in /Users/tu-usuario/mi-web/checkout.php
No syntax errors detected in /Users/tu-usuario/mi-web/data/pagos.php
Simulación: tu salida puede variar un poco
👉 Cómo se lee: una línea por archivo. Si tienes muchos y solo quieres ver los problemas, añade al final | grep -v "No syntax errors": si no sale nada, todo está bien.
📌 Qué comprueba y qué no

php -l solo confirma que el código está bien escrito para la versión de PHP que tengas en tu Mac. No avisa de funciones obsoletas ni de errores de lógica. Para eso sirve la herramienta del siguiente apartado.

🧰 5. Instala una herramienta que detecta código incompatible

PHPCompatibility revisa tu código y te dice qué funciones se han eliminado (dan error) o están obsoletas (funcionan hoy, pero dejarán de hacerlo) en la versión de PHP a la que quieres subir. Se instala una sola vez y vale para todos tus proyectos. Necesita Composer, que es el gestor de paquetes de PHP.

Paso 1 · Instala Composer

Terminal — zsh
tu-usuario@mac ~ % brew install composer
==> Installing composer
composer instalado ✔
Simulación: tu salida puede variar un poco
👉 Cómo se lee: si ya lo tenías, Homebrew te avisará de que ya está instalado. No pasa nada.

Paso 2 · Crea una carpeta para las herramientas

Terminal — zsh
tu-usuario@mac ~ % mkdir -p ~/php-tools && cd ~/php-tools
(no muestra nada: es normal, ha ido bien)
Simulación: tu salida puede variar un poco
👉 Cómo se lee: en Terminal, que no salga nada suele significar que todo ha ido bien. Solo cambia el prompt: ahora estás dentro de la carpeta php-tools.

Paso 3 · Instala la herramienta

Es un único comando largo, pulsa Copiar para no equivocarte. Durante la instalación Composer te preguntará si confías en un plugin necesario (phpcodesniffer-composer-installer). Responde y.

Terminal — zsh
tu-usuario@mac php-tools % composer require --dev squizlabs/php_codesniffer phpcompatibility/php-compatibility dealerdirect/phpcodesniffer-composer-installer
./composer.json has been created
Installing dependencies from lock file (including require-dev)
- Installing squizlabs/php_codesniffer
Do you trust "dealerdirect/phpcodesniffer-composer-installer" to execute code? [y,n,d,?]
y
- Installing phpcompatibility/php-compatibility
Instalación completada ✔
Simulación: tu salida puede variar un poco
👉 Cómo se lee: la línea amarilla es la pregunta de confianza. Es el plugin que conecta las dos herramientas; es el que hay que permitir.

Paso 4 · Comprueba que quedó instalada

Terminal — zsh
tu-usuario@mac php-tools % ~/php-tools/vendor/bin/phpcs -i
The installed coding standards are MySource, PEAR, PSR1, PSR2, PSR12, Squiz, Zend and PHPCompatibility
Simulación: tu salida puede variar un poco
✅ Cómo se lee: si al final de la lista aparece PHPCompatibility, ya lo tienes listo.

📋 6. Revisa tu proyecto y aprende a leer el resultado

Ahora lo pasamos por tu proyecto. Cambia 8.4- por la versión a la que quieres subir (el guion final significa «esta versión o superiores»). Como antes, puedes arrastrar la carpeta desde el Finder para escribir la ruta al final del comando.

Terminal — zsh
tu-usuario@mac ~ % ~/php-tools/vendor/bin/phpcs -p --standard=PHPCompatibility --runtime-set testVersion 8.4- --extensions=php --ignore=vendor /ruta/de/tu/proyecto
............................................................ 60 / 73 (82%)
............. 73 / 73 (100%)
Time: 940ms; Memory: 18MB
Simulación: tu salida puede variar un poco
✅ Cómo se lee: cada punto es un archivo revisado y sin problemas. Si al final solo aparece «Time», no ha encontrado nada: puedes subir de versión con tranquilidad.

¿Y si salen errores?

Verás un bloque por cada archivo con problemas. Se interpretan así:

  • ERROR: ese código se romperá (o ya se rompe) en la versión que has indicado. Hay que arreglarlo antes de subir.
  • WARNING: funciona hoy, pero está obsoleto y dejará de funcionar más adelante. Conviene arreglarlo con calma.
Terminal — zsh
tu-usuario@mac ~ % ~/php-tools/vendor/bin/phpcs -p --standard=PHPCompatibility ... /ruta/de/tu/proyecto
FILE: /Users/tu-usuario/mi-web/checkout.php
------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
------------------------------------------------------------------------
25 | ERROR | Using 'break' outside of a loop or switch structure is invalid
| | and will throw a fatal error since PHP 7.0
Simulación: tu salida puede variar un poco
👉 Cómo se lee: te da el archivo, la línea (25), el tipo (ERROR) y la explicación. Con eso sabes exactamente dónde mirar.
🧪 Ojo: a veces es un falso positivo

Esta herramienta lee el código sin ejecutarlo y a veces se equivoca. El caso más típico es el mensaje de arriba («'break' outside of a loop») cuando el break está dentro de un bucle escrito en una sola línea y sin llaves, como este:

foreach ($lista as $x) if ($x == 1) { echo "ok"; break; }

Ese código es válido, pero la herramienta no lo entiende bien. Cómo salir de dudas: pasa php -l sobre ese archivo (apartado 4). Si PHP dice «No syntax errors detected», el archivo es correcto y el aviso era una falsa alarma. Si de verdad hubiera un break fuera de un bucle, PHP daría error fatal al cargar la página.

🚀 7. Sube de versión en el hosting con seguridad

Si la revisión sale limpia (o solo con falsos positivos), ya puedes cambiar la versión. Hazlo de una web en una web, empezando por la menos importante.

  1. Vuelve a la pantalla de configuración de PHP de tu hosting (apartado 2).
  2. Marca solo el dominio que quieras cambiar y elige la nueva versión (por ejemplo, de 8.3 a 8.4).
  3. Guarda. El cambio puede tardar unos minutos en aplicarse.
  4. Prueba la web. Mira la lista de abajo.
  5. Si algo falla, vuelve a la versión anterior desde el mismo panel y revisa el registro de errores.
🧪 Qué probar después de cambiar
  • La portada y varias páginas interiores.
  • Todos los formularios (contacto, registro, buscador...).
  • Si tienes tienda: carrito, checkout y pagos, con un pedido de prueba o en modo sandbox, nunca con uno real.
  • El panel de administración, subiendo una imagen.
  • Cualquier envío de emails o conexión con otros servicios.
📌 ¿Y si no sale nada raro pero la página sale en blanco?

Un error 500 o una página en blanco suele significar que PHP ha encontrado algo que no soporta. No vuelvas atrás a ciegas: mira primero el registro de errores del hosting, porque ahí aparece el archivo y la línea exactas. Si no lo localizas, vuelve a la versión anterior y pasa ese mensaje a quien te ayude con la programación.

🧾 8. Checklist final

Marca lo que ya has hecho (es solo para ti, no se guarda).

Fuentes: aviso de seguridad del proyecto PHP del 21 de octubre de 2026, en la web oficial de PHP, y notas de la versión 8.5.12 en GitHub. Los números de versión y los identificadores CVE son los publicados por el propio proyecto. Los dominios, rutas y salidas de terminal de esta guía son ejemplos ilustrativos.