La Crisis de Runtimes del "Black October": PHP2Shell, Vector Sin Parche CVE-2026-115560 y RCE Políglota HTTP2Shell en Brotli (CVE-2026-111497)

Crisis de Runtimes Black October PHP2Shell CVE-2026-115560 y HTTP2Shell Brotli RCE CVE-2026-111497
📌
Security Roundup Series: Fin de Semana del 26 de Octubre de 2026 • 8 min de lectura deep dive
🚨
Vulnerability Intelligence: CVE ID: CVE-2026-109618, CVE-2026-109619, CVE-2026-115560 y CVE-2026-111497 (CWE-416 (Use After Free), CWE-502 (Deserialización Insegura) y CWE-787 (Escritura Fuera de Límites)) Severity: CRÍTICA (EMERGENCIA EN RUNTIMES "BLACK OCTOBER") (CVSS 9.2 – 9.8) Threat Actor: Botnets Globales, Afiliados de Ransomware y Enjambres de Exploits Mutantes con IA Status: Explotación Masiva en la Naturaleza; Alerta Urgente de CISA Emitida el 23 de Octubre de 2026 Affected Systems: PHP 5.4–8.5 | Decodificador C Google Brotli 1.0.3–1.2.0 (Node.js, Python, Java brotli4j, Bun, Envoy, Rust FFI) Fixed In: PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 (+ mitigación php.ini) | libbrotli 1.2.1+ | Node.js 22.23.4 / 24.22.1 / 26.12.1

Para comprender por qué los líderes de seguridad de Anthropic, Cloudflare y OpenAI advirtieron durante el fin de semana sobre un "tsunami de vulnerabilidades" impulsado por IA en este "Black October", basta con observar el colapso simultáneo de la seguridad de memoria en dos de los componentes más ubicuos de internet: el manejo de sesiones multipart en PHP y la biblioteca C de descompresión Brotli de Google. En las últimas 96 horas, los equipos de defensa no solo han enfrentado la explotación masiva de PHP2Shell (CVE-2026-109618 y CVE-2026-109619) y una alerta urgente de CISA el 23 de octubre, sino también la revelación de un nuevo vector de deserialización en PHP sin parche (CVE-2026-115560) y la expansión de Node2Shell hacia HTTP2Shell (CVE-2026-111497), una corrupción de memoria en libbrotlidec que atraviesa fronteras FFI y JNI hacia Python, Java, Node.js, Bun y proxies C++.

Diagrama de Arquitectura Políglota de PHP2Shell, CVE-2026-115560 y HTTP2Shell
Anatomía técnica de la crisis de runtimes: Use-After-Free en RINIT de PHP2Shell, confusión de serialize_handler en CVE-2026-115560 y corrupción de heap en C de HTTP2Shell (CVE-2026-111497).

1. PHP2Shell (CVE-2026-109618 y CVE-2026-109619): Heap UAF Pre-Script Descubierto con IA

Descubiertas en agosto de 2026 por investigadores de Wiz, OpenAI y Calif utilizando modelos de IA frontera para analizar el ciclo de vida de punteros C durante la fase de inicialización de peticiones (RINIT) de PHP, CVE-2026-109618 y CVE-2026-109619 (CVSS 9.2) residen en main/rfc1867.c y ext/session/session.c. Dado que la configuración por defecto de php.ini habilita session.upload_progress.enabled = 1, cualquier petición HTTP POST multipart/form-data que incluya el campo PHP_SESSION_UPLOAD_PROGRESS obliga al motor PHP a iniciar la sesión y escribir en $_SESSION antes de que se ejecute una sola línea del script PHP de la aplicación.

  • CVE-2026-109618 (Puntero Colgante por Redimensionamiento de HashTable): Durante el análisis multipart, php_session_rfc1867_callback almacena punteros zval* crudos hacia elementos internos de $_SESSION. Al forzar una realocación de la HashTable de Zend a mitad de la subida, el búfer arData se libera mientras el puntero en caché queda colgante, provocando un Heap Use-After-Free determinista pre-autenticación.
  • CVE-2026-109619 (Corrupción en Salida por Agotamiento de Memoria OOM): Al combinar el progreso de subida con un agotamiento deliberado del límite de memoria (zend_bailout()), PHP omite las rutinas de limpieza de RFC1867 dejando punteros corruptos durante el cierre de la petición (RSHUTDOWN).

2. El Segundo Impacto en PHP: Vector Sin Parche CVE-2026-115560

Apenas 48 horas después de publicar PHP 8.5.12, 8.4.27, 8.3.36 y 8.2.35, el 23 de octubre se divulgó CVE-2026-115560, un vector RCE sin parche que afecta incluso a las versiones recién actualizadas cuando una aplicación cambia dinámicamente su manejador de serialización de sesiones:

// Patrón vulnerable en aplicaciones PHP:
// 1. php.ini inicia la petición en RINIT con el valor por defecto: session.serialize_handler = php
//    El atacante envía multipart PHP_SESSION_UPLOAD_PROGRESS con: "|O:8:"Exploit":..."
// 2. Durante la ejecución del script, la aplicación cambia dinámicamente el serializador:
ini_set('session.serialize_handler', 'php_serialize');
session_start(); // ¡Deserializa el delimitador '|' bajo el parser equivocado logrando Object Injection!

3. De Node2Shell a HTTP2Shell (CVE-2026-111497): Desbordamiento de Búfer Políglota en Brotli

Mientras los administradores de PHP aplicaban mitigaciones, los equipos de Node.js, Python y Java descubrieron que CVE-2026-111497 (CVSS 9.2/9.8) —inicialmente apodada Node2Shell— reside en la biblioteca C original Google Brotli 1.0.3 a 1.2.0 (c/dec/decode.c). Un fallo en el cálculo de distancias y expansión del búfer circular provoca una escritura fuera de límites en el heap (CWE-787) al descomprimir un flujo HTTP con Content-Encoding: br:

  • Node.js y Bun: Express 5, body-parser y fetch() delegan la descompresión en node:zlib sobre c/dec/decode.c. Corregido en Node.js 22.23.4, 24.22.1, 26.12.1 y Bun 1.4.4.
  • Python (Auto-Activación Silenciosa): Si el paquete C brotli o brotlicffi (< 1.2.1) está instalado en site-packages, bibliotecas como urllib3, requests, aiohttp y httpx añaden automáticamente Accept-Encoding: br y pasan las respuestas directamente al decodificador C vulnerable.
  • Java / JVM (brotli4j JNI): Frameworks como Netty (HttpContentDecompressor), Reactor Netty, Spring WebFlux / Cloud Gateway y Vert.x cargan automáticamente com.aayushatharva.brotli4j:brotli4j mediante JNI (libbrotlidec.so), exponiendo la memoria nativa de la JVM.

Telemetría y Mitigación de Emergencia

🛡️
Comandos de Blindaje Inmediato en PHP, Nginx, Python y Java # 1. PHP: Neutralizar TANTO PHP2Shell COMO el vector sin parche CVE-2026-115560 en php.ini echo "session.upload_progress.enabled = 0" | sudo tee -a /etc/php/*/fpm/conf.d/99-disable-upload-progress.ini sudo systemctl reload php*-fpm # 2. Mitigación en Nginx: Rechazar peticiones entrantes comprimidas con Brotli (Content-Encoding: br) if ($http_content_encoding ~* "br") { return 415; } # 3. Auditar entornos Python en busca de extensiones nativas brotli vulnerables (< 1.2.1) python3 -c " for mod in ('brotli', 'brotlicffi'): try: m = __import__(mod) print(f'[ALERTA] {mod} instalado en {m.__file__} (versión: {getattr(m, "__version__", "unknown")})') except ImportError: print(f'[OK] {mod} no presente') "

Pasos de Remediación

  1. Actualizar PHP y Desactivar Upload Progress: Actualice a PHP 8.5.12, 8.4.27, 8.3.36 o 8.2.35 y configure session.upload_progress.enabled = 0 en todos los archivos php.ini.
  2. Actualizar Brotli en Todos los Ecosistemas: Actualice libbrotli del sistema a 1.2.1+, Node.js a 22.23.4 / 24.22.1 / 26.12.1, Python brotli/brotlicffi a 1.2.1+ y Java brotli4j a 1.20.0+.

Read more

Guía de Blindaje Empresarial para el Black October Runtimes Políglotas ESXi VMDK y Sandboxes de IA

Guía de Blindaje Empresarial para el "Black October": Protección de Runtimes Políglotas, Integridad .pth en Python, Cifrado VMDK en ESXi y Sandboxes de IA

📌Security Roundup Series: Fin de Semana del 26 de Octubre de 2026 • 8 min de lectura deep dive🛡️Vulnerability Intelligence: CVE ID: ARQUITECTURA DE DEFENSA EN PROFUNDIDAD (Seguridad de Memoria en Runtimes, Integridad de Cadena de Suministro, Aislamiento ESXi y Contención de IA) Severity: MANUAL ESTRATÉGICO Y DE INGENIERÍA (CVSS

By James Luther
SafePay AA26-293A Emperador Ransomware AB InBev Capcom ID 11.77M y PingCAP TiDB Cloud

Forense de Ransomware y Megabrechas: Alerta SafePay de CISA (AA26-293A), Emperador Ataca a AB InBev, Capcom ID (11.77M) y PingCAP TiDB Cloud

📌Security Roundup Series: Fin de Semana del 26 de Octubre de 2026 • 7 min de lectura deep dive🏛️Incident Overview: Target / Organization: Objetivos Globales: SafePay (600+ Organizaciones), AB InBev, Capcom ID (11.77M), PingCAP TiDB Cloud, CenterPoint Energy (7.49M) y Burger King Japón (11.18M) Threat Actor / Attribution: Grupo

By James Luther
Cadena KEV Plex2Shell Siemens Romulus CVE-2026-110936 FortiSIEM CVE-2026-106173 y Cisco Expressway

Cadenas de Exploits Empresariales y KEV: RCE en Plex2Shell, DLL Sideloading "Romulus" en Siemens (CVE-2026-110936), FortiSIEM gRPC y Cisco Expressway

📌Security Roundup Series: Fin de Semana del 26 de Octubre de 2026 • 7 min de lectura deep dive🛡️Vulnerability Intelligence: CVE ID: CVE-2026-96652..96656, CVE-2026-110936, CVE-2026-106173 y CVE-2026-76466 (CWE-918 (SSRF), CWE-427 (Ruta de Búsqueda No Controlada), CWE-22 (Path Traversal) y CWE-295 (Validación TLS)) Severity: CRÍTICA (CISA KEV E INFRAESTRUCTURA EMPRESARIAL)

By James Luther
CVE-2026-91403 Crisis WebPKI de eMudhra Claves Privadas de 8 Bits y Revocación en Oracle Java SE

CVE-2026-91403 y la Crisis WebPKI de eMudhra: Cómo Claves Privadas de 8 Bits (< 256) Forzaron Revocaciones de Emergencia en Java y Sistemas Operativos

📌Security Roundup Series: Fin de Semana del 26 de Octubre de 2026 • 6 min de lectura deep dive🚨Vulnerability Intelligence: CVE ID: CVE-2026-91403 (CWE-331 / CWE-326 (Entropía Insuficiente / Fuerza de Cifrado Inadecuada)) Severity: CRÍTICA (EMERGENCIA CRIPTOGRÁFICA WEBPKI) (CVSS 9.1) Threat Actor: Cualquier Adversario con Capacidad de Interceptación TLS MitM o

By James Luther