El 20 de octubre de 2026, la comunidad de ciberseguridad se vio sacudida por la divulgación pública de dos vulnerabilidades de ejecución remota de código (RCE) de máxima gravedad en el intérprete de PHP. Conocidas en conjunto bajo la denominación PHP2Shell y registradas formalmente como CVE-2026-109618 y CVE-2026-109619, estas fallas alcanzaron un puntaje CVSS v4.0 de 9.2, elevándose a un crítico 10.0 por firmas como watchTowr debido a la ausencia de requisitos de autenticación y la extrema facilidad para automatizar ataques a gran escala.
Dado que PHP impulsa aproximadamente el 70% de todos los sitios web activos a nivel global —desde blogs en WordPress e e-commerce hasta infraestructuras bancarias y gubernamentales—, nos encontramos ante un riesgo sistémico sin precedentes.
1. El Descubrimiento: La Era del Hacking Impulsado por Inteligencia Artificial
Las vulnerabilidades de PHP2Shell fueron identificadas de forma independiente por dos firmas de seguridad de primer nivel: Calif (dentro del proyecto Patch the Planet de OpenAI) y Wiz Research.
Lo que convierte a este evento en un hito histórico es el uso intensivo de modelos de lenguaje e Inteligencia Artificial de frontera:
- Calif empleó GPT-5.6 Sol para auditar el código fuente en C del motor Zend Engine.
- Wiz Research integró Gemini 4 Argon junto a su plataforma Wiz Atlas.
Gemini 4 Argon analizó decisiones de diseño en la gestión de memoria que se remontaban a más de una década dentro del código de PHP. La IA automatizó el análisis del manejo de errores fatales por memoria agotada (Out of Memory - OOM), construyó la cadena de explotación (exploit chain), ajustó la disposición de la memoria RAM (heap grooming) según diferentes entornos de servidor y validó la efectividad de los parches.
Impacto del hallazgo: Lo que habitualmente requiere meses de investigación manual por equipos avanzados de ingeniería inversa fue resuelto por estas herramientas de IA en tan solo una semana.
2. Vectores Técnicos: ¿Por qué tus plugins y WAFs no pueden protegerte?
Ambas fallas residen en el núcleo del motor de PHP (Zend Engine) y se desencadenan antes de que el código de cualquier aplicación web (Laravel, WordPress, Drupal, etc.) comience a ejecutarse.
Esto implica que los plugins de seguridad tradicionales (como Wordfence), middlewares de autenticación o sanitizaciones en PHP son 100% ineficaces.
CVE-2026-109618: Corrupción de Memoria por Agotamiento OOM en Parsing
Cuando se recibe una petición HTTP POST (formularios, subida de archivos), el motor de PHP lee el cuerpo de la solicitud para poblar variables globales como $_POST.
- Cuando se recibe una petición HTTP POST (formularios, subida de archivos), el motor de PHP lee el cuerpo de la solicitud para poblar variables globales como $_POST.
- Si un atacante envía una solicitud maliciosa masiva que excede el límite (memory_limit), PHP genera un error fatal e interrumpe la ejecución con longjmp().
- Esto deja la memoria de la tabla hash corrupta. Al finalizar la petición y limpiar los datos, el motor reinterpreta bytes no inicializados como punteros de función.
- Mediante heap grooming, el atacante redirige estos punteros para ejecutar comandos arbitrarios en el sistema operativo (obteniendo control total del servidor vía /bin/sh).
CVE-2026-109619: Reutilización de Memoria y Exfiltración de Secretos (Use-After-Free)
En entornos de producción que usan procesos persistentes (PHP-FPM o mod_php), una petición fallida por OOM deja referencias de memoria global (como el rastro de la pila EG(last_fatal_error_backtrace) o session.upload_progress) apuntando a memoria liberada (dangling pointers).
Cuando el mismo proceso atiende una segunda petición, lee esta memoria residual corrupta. Esto permite a los atacantes extraer información confidencial directamente de la memoria RAM (claves API, tokens de sesión y credenciales) mediante el encabezado PHPSESSID.
3. ¿Está tu servidor expuesto?
Tu infraestructura se encuentra en riesgo si cumple con los siguientes criterios:
- Versión de PHP vulnerada: Ejecutas cualquier versión de PHP comprendida entre la 5.4 y las ramas 8.2 a 8.5 sin el parche del 21 de octubre de 2026.
- Procesos Persistentes: Uso de PHP-FPM o Apache mod_php.
Indicadores de Compromiso (IoCs) a inspeccionar
- Logs del Servidor Web: Peticiones HTTP POST entrantes hacia cualquier endpoint válido con nombres de parámetros gigantescos, claves vacías o arreglos profundamente anidados (ej. campo[a][b][c]...).
- Logs de Errores de PHP: Presencia atípica y repetida de:Fatal error: Allowed memory size of X bytes exhausted
- Procesos Sospechosos: Subprocesos como /bin/sh, curl, wget o python generados directamente por el usuario del servicio web (www-data, apache o nginx).
- Cookies Anómalas: Respuestas Set-Cookie devueltas con valores PHPSESSID inusualmente largos conteniendo caracteres binarios.
4. Plan de Acción: Solución Definitiva
La única solución real ante PHP2Shell es actualizar la instalación de PHP a la versión oficial parcheada.
Matriz de Versiones Seguras
- Para PHP 8.5 la versión mínima segura es 8.5.12
- Para PHP 8.4 la versión mínima segura es 8.4.27
- Para PHP 8.3 la versión mínima segura es 8.3.36
5. Medidas de Mitigación Temporal
Si por razones de compatibilidad no puedes aplicar el parche binario inmediatamente, implementa estas contramedidas de emergencia:
Deshabilitar session.upload_progress en php.ini
Elimina el vector de exfiltración de memoria (CVE-2026-109619). Configúralo directamente en el archivo del sistema (php.ini), ya que ini_set() a nivel de código no surte efecto:
session.upload_progress.enabled = Off
Bloquear Solicitudes Multipart en Nginx / Apache
Evita que el payload alcance el parser en C de PHP (Nota: Esto deshabilitará la carga de archivos en la aplicación hasta aplicar el parche definitivo):
Nginx
if ($http_content_type ~* "multipart/form-data") {
return 403;
}
Aislamiento de IP de Origen
Asegúrate de configurar el firewall del servidor (iptables / ufw) para aceptar tráfico únicamente desde las direcciones IP oficiales de tu WAF (Cloudflare, AWS WAF, etc.). Si un atacante descubre la IP directa del servidor, evadirá cualquier protección perimetral.