El martes 20 el equipo de seguridad de PHP hizo algo poco habitual: avisar con un día de antelación de que venía una publicación crítica. El miércoles 21 salieron PHP 8.5.12, 8.4.27, 8.3.36 y 8.2.35. Corrigen dos vulnerabilidades con CVSS 9.2 que permiten ejecutar código en el servidor sin autenticarse. El nombre con el que ya las conoce todo el mundo es PHP2Shell.
Si administras servidores, lo primero es mirar qué versión tienes y actualizar. Si sigues en 8.1 o anterior, no hay parche oficial: toca migrar, y esta vez no hay excusa. Mientras lo haces, Ondřej Surý ha publicado paquetes corregidos para Debian y Ubuntu de todas las ramas, de la 5.6 a la 8.5; conservan el número de versión, así que fíate del changelog y no de php -v. El viernes 23 PHP publicó además un aviso complementario sobre session.upload_progress: recomiendan desactivarlo hasta la siguiente versión de mantenimiento para cerrar otra vía, improbable pero posible, de ejecución remota. Y el lunes 26 salieron paquetes nuevos de PHP para Windows con Brotli 1.2.1, por el fallo HTTP2Shell que se alcanza a través de cURL. Si quieres saber si alguien llegó antes que tú, hay un script de triaje de solo lectura que revisa los rastros habituales.
Lo que más me ha llamado la atención es lo que ha pasado alrededor del parche. Amazon detectó intentos de explotación en sus honeypots el 17 de octubre, cuatro días antes de que se hiciera público. Cloudflare desplegó reglas en su WAF antes del anuncio. Y a las 48 horas ya había campañas intentando colar una variante de Mirai en servidores sin parchear. La ventana entre parche y explotación masiva ya no se mide en semanas.
Para entender cómo se gestionó todo por dentro, Volker Dusch, de la PHP Foundation, cuenta en Laravel News cómo se encontraron y corrigieron los fallos, y qué salió mal con la filtración del embargo. La propia Fundación explica qué va a cambiar en seguridad a partir de ahora. Y Daniel Scherzer, que empujó los commits a las 6:30 de la mañana con cuatro horas de sueño, lo narra en primera persona en The PHP Podcast, que tienes en la newsletter.
En el mundo WordPress, los sitios de WordPress.com ya estaban protegidos sin que tuvieras que hacer nada. Para el resto, el aviso en español de WordPress.org resume lo que hay que revisar.
Lo más importante
PHP2Shell es el nombre de las dos RCE críticas que PHP parcheó el miércoles 21. Afectan a cualquier instalación; si estás en 8.1 o anterior, no hay parche y toca migrar. El embargo se rompió, hubo intentos de explotación días antes del anuncio y a las 48 horas ya se intentaba desplegar Mirai en masa. Resumo lo imprescindible:
- Aviso de seguridad de PHP: actualiza ya a 8.5.12, 8.4.27, 8.3.36 o 8.2.35 — El anuncio oficial de PHP2Shell: dos vulnerabilidades con CVSS 9.2 que permiten ejecutar código sin autenticarse. Si sigues en 8.1 o anterior, no hay parche.
- Volker Dusch explica cómo se encontraron, corrigieron y filtraron los fallos — La entrevista más completa de la semana sobre lo que pasó dentro de la PHP Foundation, incluido el embargo roto.
- La PHP Foundation cuenta qué va a cambiar en seguridad — Lecciones del incidente y las medidas que vienen para que la próxima vez el proceso aguante mejor.
- Aviso complementario: desactiva session.upload_progress — Dos días después, PHP recomienda poner session.upload_progress.enabled a 0 hasta la siguiente versión de mantenimiento para cerrar otra vía, improbable pero posible, de ejecución remota.
- Millones de intentos de explotación para desplegar una variante de Mirai — De momento sin éxito, pero la ventana entre parche y ataque masivo se ha medido en horas, no en semanas.
- Alguien intentó explotar PHP2Shell cuatro días antes de que se publicara — Amazon detectó intentos contra sus honeypots el 17 de octubre: las vulnerabilidades circulaban antes del anuncio.
- Cloudflare desplegó reglas de WAF contra PHP2Shell antes del anuncio — Reglas activadas por defecto que usan señales de la petición y de la respuesta para cortar los intentos de explotación.
- Sury.org publica paquetes parcheados para todas las versiones de PHP, de la 5.6 a la 8.5 — Si usas Debian o Ubuntu con los repositorios de Ondřej Surý, hay paquetes corregidos también para las ramas sin soporte (8.1, 8.0, 7.4…). Conservan el número de versión, así que fíate del changelog y no de php -v.
- Nuevos paquetes de PHP para Windows por el fallo de Brotli (HTTP2Shell) — 8.5.12-1, 8.4.27-1, 8.3.36-1 y 8.2.35-1 incluyen Brotli 1.2.1, que corrige CVE-2026-111497. En Windows el descompresor vulnerable se alcanza a través de cURL si activas la descompresión automática de respuestas.
- Ya parcheaste, pero ¿te habían entrado? Un script de triaje de solo lectura — Un script que revisa logs y rastros habituales de explotación de PHP2Shell sin tocar nada en el servidor.
- Tu web de WordPress.com, protegida sin que tengas que hacer nada — Los sitios de WordPress.com ya estaban cubiertos antes de que el parche fuera público.
- El aviso de WordPress.org en español — Qué revisar en tu instalación y cómo comprobar la versión de PHP que ejecuta tu servidor.
PHP y Symfony
Con el susto encima, casi se nos pasa que Symfony AI ya está en beta y que Symfony 8.2 sale en noviembre. También hay RC nueva de PHP 8.6 y dos lecturas cortas que merecen el rato.
- PHP 8.6.0 RC4 disponible para pruebas — La versión final sigue prevista para noviembre. Si mantienes alguna extensión, es el momento de probarla.
- Symfony AI 1.0.0-BETA1 y un hackathon de IA y MCP — Primera prerelease camino de la 1.0, y cuatro semanas de hackathon para construir agentes y servidores MCP con Symfony.
- Symfony 8.2: transportes firmados y rotación de secretos en Messenger — La firma de mensajes pasa del componente al transporte, así que un mensaje inyectado en la cola ya no puede disparar handlers sensibles. Y los secretos se pueden rotar sin parar nada.
- No hay caché — Tomáš Votruba defiende que la caché es el precio de un lenguaje lento, y explica por qué ECS, Rector y PHPStan la necesitan y qué pasaría si no.
- Cómo encontrar los tests más lentos de PHPUnit — Rob Allen, con una receta corta para localizar qué tests te están frenando la suite.
Laravel
Semana tranquila en Laravel, con un paquete nuevo y un artículo sobre réplicas de lectura que resuelve un problema clásico con muy poco código.
- Réplicas de lectura sin datos obsoletos tras una escritura — El middleware PreventStaleDatabaseReads mantiene las lecturas del usuario en la base de datos principal justo después de guardar, para que el retraso de la réplica no le enseñe datos viejos.
- Screenshot: capturas y PDF desde PHP y Laravel — Renderiza HTML, vistas Blade o páginas web a PNG, JPEG o PDF con Chrome y lo guarda en el disco que elijas.
- Convertir respuestas de una IA en decisiones con reglas PHP — Tercer capítulo de la serie Decide with Jev: el modelo responde, pero quien decide es una clase PHP pequeña y testeable.
WordPress
WordPress 7.2 ya tiene beta, WooCommerce cambia su integración MCP y hay una brecha en TeamUpdraft que conviene atender hoy. También Akismet cumple años y sale del ecosistema WordPress.
- WordPress 7.2 Beta 1 ya se puede descargar y probar — Solo para entornos de pruebas. Cuantos más la probemos ahora, menos sorpresas en la versión final.
- WooCommerce 11.3 retira su endpoint MCP propio — Hay que migrar clientes y extensiones al WordPress MCP Adapter. La guía explica cómo.
- Brecha en TeamUpdraft: usan claves de UpdraftCentral para colar puertas traseras — Si usas UpdraftCentral, UpdraftVault o UpdraftClone, regenera las claves de conexión y revisa tus sitios.
- WordCamp Valencia, 31 de octubre y 1 de noviembre — Pensada para quien empieza y para quien quiere contribuir. Si estás cerca, merece la pena.
- WordPress Contributor Toolkit 2.0 — Interfaz nueva sobre el WordPress Design System, tema oscuro y traducciones a diez idiomas.
- Siete decisiones antes de dar permisos a un agente de IA — Qué conviene pensar antes de conectar un agente a tu web, ahora que pueden trabajar aunque no estés delante.
- Akismet cumple 21 años con módulo oficial para Drupal y SDK de PHP — El filtro antispam de Automattic sale del ecosistema WordPress: ya hay módulo para Drupal y una biblioteca PHP para usarlo en cualquier aplicación.
Más allá de PHP
PHP no fue el único que tuvo una mala semana: GitLab parcheó un CVSS 10 y el fallo de Brotli alcanza a Node.js, Python y .NET. Y una lectura sobre IA que va de números, no de humo.
- GitLab parchea un fallo con CVSS 10 que afecta a doce años de versiones — Ejecución remota sin autenticación en instalaciones autogestionadas desde la 7.0, de 2014. Si tienes GitLab propio, actualiza.
- HTTP2Shell: parches de emergencia por un fallo crítico en Brotli — El descompresor Brotli que llevan Node.js, Python y .NET permite ejecutar código con datos manipulados. Si descomprimes Brotli en el servidor, revisa tus dependencias.
- Cómo Cloudflare recortó un 68 % su factura de inferencia — Caché de prompts y enrutado de modelos en su revisor de código con IA. Números concretos, que es lo que se agradece.
Para escuchar
Si solo tienes tiempo para uno, el de The PHP Podcast: Daniel Scherzer cuenta cómo fue empujar los commits del parche a las 6:30 de la mañana.
- The PHP Podcast, 22 de octubre: la semana de PHP2Shell por dentro — Daniel Scherzer cuenta cómo empujó los commits del parche a las 6:30 de la mañana con cuatro horas de sueño.
- Freelandev #365: lidiando con PHP2Shell — Esther y Nahuai, en español, sobre una semana de revisar versiones, actualizar y migrar hostings de clientes.
- Jukebox #238: Static Site Importer, con Chris Huber — Cómo Data Liberation y el importador de sitios estáticos facilitan traer cualquier web a WordPress.
- La IA complica la traducción de WordPress — WordPress Podcast, en español: por qué cuesta más que nunca conseguir buenas traducciones de la interfaz.