¿Brecha de seguridad u oportunidad de mejora?
En octubre de 2026, una auditoría con IA encontró dos fallos críticos en el motor de PHP antes de que existiera un exploit funcional. Esta es la historia del descubrimiento y de la ventana que hubo para parchear antes de la explotación.
En esta entrada
Durante octubre de 2026 se habló de varias brechas de seguridad: los certificados TLS con claves débiles de eMudhra (eMudhra), la vulnerabilidad crítica de GitLab (GitLab), el zero-day de FortiMail (FortiMail) y el compromiso de credenciales de ConnectWise Cloud Backup (ConnectWise). La que más me interesa, por lo que enseña sobre el trabajo de defensa, es PHP2Shell: CVE-2026-109618 y CVE-2026-109619, dos fallos del motor de PHP que permiten ejecución remota de código sin autenticación (aviso de PHP).
La historia no empieza con un ataque. Empieza con una auditoría. Y esa diferencia —encontrar el fallo antes de que alguien lo explotara— es la oportunidad de la que quiero hablar.
1. Qué se descubrió
Los dos CVE son fallos de memoria en el núcleo de PHP. CVE-2026-109618 corrompe el estado cuando una petición agota memory_limit. CVE-2026-109619 deja estado global apuntando a memoria que ya fue liberada. Ambos tienen CVSS 4.0 9.2 y afectan a versiones sin parchear desde PHP 5.4. La solución completa son PHP 8.2.35, 8.3.36, 8.4.27 y 8.5.12 (aviso de PHP).
El impacto es RCE con los privilegios del worker, divulgación de memoria y denegación de servicio. Pero lo que hace especial a PHP2Shell no es solo el CVSS: el fallo está en el motor, no en WordPress, Drupal, Joomla ni en un plugin. Actualizar el CMS no bastaba (Wiz).
2. Cómo se descubrió
2.1 Una pista de veinte años
La historia se remonta a 2004, cuando Stefan Esser documentó la primera vulnerabilidad de PHP basada en el límite de memoria. En 2020, el bug #78876 reportó que ciertas variables largas podían causar OOM y dejar archivos temporales sin limpiar. En 2024, la auditoría de OSTIF y Quarkslab redescubrió el problema: se teorizó un exploit, pero no se encontró un vector concreto y el asunto quedó pendiente (Calif, PHP Foundation).
2.2 La auditoría de 2026
En 2026, OpenAI invitó a Calif a su iniciativa Patch the Planet y PHP entró como objetivo de alto impacto. Calif comenzó la auditoría el 30 de julio. El 1 de agosto ya había encontrado el primer error fatal por OOM y el primero de los puntos de interrupción que, encadenados, permitían RCE. El 11 de agosto reportó el primer fallo a PHP. El 14 compartió un PoC de RCE y el 15 PHP confirmó que funcionaba (Calif, PHP Foundation).
La investigación no fue un golpe de suerte aislado. Calif usó modelos de lenguaje para revisar el código, generalizar el patrón y buscar variantes. Wiz llegó por su cuenta con Wiz Atlas, Gemini 4 Argon y GPT-5.6 Sol, y confirmó RCE contra Drupal el 20 de agosto y contra WordPress el 21. El 24 reportó ambos fallos a PHP. OpenAI también reportó la misma causa raíz y envió vectores adicionales en septiembre (Wiz, PHP Foundation, OpenAI).
2.3 No fue un ataque
Conviene precisar esto: la brecha no se descubrió porque un grupo criminal la estuviera explotando. Se descubrió antes. Hasta donde muestran los registros públicos, fueron equipos de investigación con IA quienes encontraron los fallos y los reportaron de forma coordinada. Esa es la diferencia entre una brecha que se descubre por un incidente y una que se descubre por una auditoría: la primera llega tarde. La segunda abre una ventana.
Cuando Calif, Wiz y OpenAI coincidieron en la misma causa raíz, PHP dejó de tratarlo como un reporte más. El equipo de seguridad y la PHP Foundation pusieron el arreglo como prioridad y trabajaron en varias ramas a la vez (PHP Foundation).
3. La oportunidad: la ventana del defensor
OpenAI llama a esto una Defender's Window: un periodo en el que los defensores conocen el fallo antes de que los atacantes lo conviertan en un exploit funcional (OpenAI, Defender's Window). En PHP2Shell, esa ventana fue de unos dos meses y medio: del reporte inicial, el 11 de agosto, a la publicación de los parches, el 21 de octubre. No fue un regalo. Fue el resultado de encontrar el fallo primero.
Durante esa ventana, PHP preparó parches para cuatro ramas y backports para 7.4, 8.0 y 8.1. Distribuciones, proveedores de soporte extendido, nubes, CDN y WAF recibieron el parche antes de la divulgación para preparar paquetes y reglas. CISA coordinó con infraestructura crítica. Eso es lo que compra tiempo: no solo un parche, sino un ecosistema listo para distribuirlo el mismo día.
3.1 La ventana se estrechó
La coordinación no salió perfecta. El 20 de octubre, un día antes de la fecha prevista, los identificadores de los CVE empezaron a circular en foros y redes con una hora de publicación equivocada y un CVSS falso de 10.0. PHP adelantó el preaviso y movió la release del 22 al 21. Calif publicó por error un video con un PoC. Aunque lo borró, las copias circularon. El 21 de octubre, a las 07:41 UTC, Chainguard publicó imágenes con el parche antes del anuncio coordinado, y pocos minutos después ya se reportaban intentos de ataque (PHP Foundation, Sansec).
El primer intento documentado, sin embargo, es anterior: Amazon Threat Intelligence lo detectó el 17 de octubre, cuatro días antes de la divulgación, desde una IP asociada a una red de anonimización comercial (AWS). No hay un grupo concreto atribuido públicamente, pero el mensaje es claro: alguien ya estaba buscando el fallo antes de que existiera un parche. Eso no vuelve inútil la ventana. La vuelve finita.
4. Cuando la ventana se cerró
El 24 de octubre, Adel Karimi, de Perplexity, registró en honeypots evidencia de RCE confirmada mediante PHP2Shell. Los atacantes usaron agotamiento y divulgación de memoria, y luego intentaron contactar servidores externos con PHP, curl y wget. No se descargó malware adicional (BleepingComputer). El 26 de octubre, CISA añadió ambos CVE a su catálogo de vulnerabilidades explotadas y fijó el 29 de octubre como fecha límite para las agencias federales de Estados Unidos (CISA, Rapid7).
Para entonces ya había un volumen alto de intentos, aunque muchos eran sondas o PoC que no funcionaban en cualquier objetivo. La explotación sigue dependiendo de la versión, el SAPI, la configuración y la distribución de memoria. Pero la parte importante ya no es la probabilidad: es que el fallo dejó de ser teórico.
Referencias bibliográficas
Las fuentes se consultaron el 28 de octubre de 2026. Los enlaces abren en una pestaña nueva.
- eMudhra (2026). eMudhra Statement on Recent Certificate Security Incident. eMudhra. Consultar en línea.
- GitLab (2026). GitLab Critical Patch Release: 19.5.1, 19.4.3, 19.3.6, 19.2.9, 19.1.9, 19.0.10, 18.11.13. GitLab Docs. Consultar en línea.
- Abrams, L. (2026). Fortinet warns of critical FortiMail flaw exploited in zero-day attacks. BleepingComputer. Consultar en línea.
- ConnectWise (2026). Cloud Backup (formerly SkyKick) Service Interruption. ConnectWise Trust Center. Consultar en línea.
- PHP (2026). Security advisory: Critical remote code execution vulnerabilities, update now. PHP.net News Archive. Consultar en línea.
- The PHP Foundation (2026). Today's PHP security release and how we're strengthening PHP security. The PHP Foundation Blog. Consultar en línea.
- OpenAI (2026). Patch the Planet: global response coordination for critical PHP vulnerabilities. OpenAI. Consultar en línea.
- OpenAI (2026). The Defender's Window. OpenAI. Consultar en línea.
- Austin, R. (Calif) (2026). PHP2Shell: A tale of two PHP remote vulnerabilities. Calif Research. Consultar en línea.
- Tzadik, S., Tamari, S., Ohfeld, N. y Schwartz, T. (Wiz Research) (2026). PHP2Shell: AI uncovers critical RCE vulnerabilities affecting 70% of the Internet. Wiz Blog. Consultar en línea.
- AWS (2026). Amazon Threat Intelligence identifies PHP2Shell exploitation prior to public disclosure in MadPot. AWS Security Blog. Consultar en línea.
- Sansec Forensics Team (2026). PHP2Shell: PHP RCE (CVE-2026-109618, CVE-2026-109619). Sansec Research. Consultar en línea.
- Toulas, B. (2026). PHP2Shell security flaws now successfully exploited in the wild. BleepingComputer. Consultar en línea.
- CISA (2026). Known Exploited Vulnerabilities Catalog. Cybersecurity and Infrastructure Security Agency. Consultar en línea.
- Rapid7 (2026). CVE-2026-109618 and CVE-2026-109619: Critical Unauthenticated Remote Code Execution in PHP. Rapid7 Blog. Consultar en línea.
Para seguir leyendo
- Patch the Planet: la iniciativa de OpenAI para encontrar y cerrar vulnerabilidades críticas antes de que se exploten.
- Verificador de versiones de PHP de OpenAI: comprueba si una instalación está expuesta.
- Catálogo de vulnerabilidades explotadas de CISA: la referencia para priorizar parches.