Esta semana circuló un reel de seguridad con 15 números CVE de PHP, Next.js, Node.js, nginx, GitLab y Java, la mayoría con la etiqueta CRITICAL. Comprobé cada ID contra el aviso del propio fabricante el 25 de octubre de 2026. Las 15 son reales, la vulnerabilidad nginx 2026 y el par de PHP incluidos. Ninguna de las 15 está en el catálogo KEV de CISA (versión 2026.10.23), y la evaluación de CISA marca la explotación como "none" en todas salvo en CVE-2026-96889, que lleva la marca "poc".
"Black October" no es una campaña con nombre. Es un grupo de avisos corrientes que cayeron juntos: nginx y Next.js el 14 de octubre, GitLab el 12 y el 21-22, PHP, Node.js y una alerta de Oracle para Java el 21. Tres etiquetas del reel inducen a error, y eso cambia a quién le corre prisa. Abajo: una tabla resumen y, por producto, cómo comprobarlo y cómo cerrarlo.
Resumen: a quién afecta y qué instalar#
| Producto | IDs | Gravedad real | Condición | Corregido en |
|---|---|---|---|---|
| nginx | CVE-2026-15176, CVE-2026-93479, CVE-2026-97205 | F5: CVSS v4 9.2. nginx.org: "Medium" | Configuración concreta: alias + rewrite, map con capturas regex, aio + SSI. Ejecución de código solo con ASLR desactivado o eludido | 1.30.6 stable, 1.31.7 mainline |
| PHP | CVE-2026-109618, CVE-2026-109619 | CVSS v4 9.2 | 109618: análisis de multipart; 109619: dos peticiones en el mismo worker | 8.2.35, 8.3.36, 8.4.27, 8.5.12 |
| Node.js | CVE-2026-111497, 105482, 105483, 106069 | High (valoración de Node) | Brotli vía node:zlib; comprobaciones de nombre de host; TLS a IP poco habituales | 22.23.4, 24.22.1, 26.12.1 |
| GitLab | CVE-2026-110264, CVE-2026-97229 | CVSS v3.1 10.0 | Instancia propia (self-managed), sin solución temporal | 19.5.1 y los parches de cada línea, abajo |
| Java | CVE-2026-91403 | CVSS v3.1 9.1 | Cadena TLS a través de CA intermedias de eMudhra comprometidas | Alerta de Oracle, ver Patch Availability Document |
| Next.js | CVE-2026-96889 y dos GHSA | CVSS v4 9.5 / 9.5 / 8.2 | Ver el artículo aparte | 16.4.1, 15.5.28 (última 16.4.3) |
Las tres etiquetas engañosas:
- CVE-2026-96889 aparece en el reel como Next.js. La CVE en sí es un use-after-free en librsvg (CNA Red Hat, CVSS v3.1 7.8). Next.js se ve afectado porque su optimizador de imágenes usa sharp, que incluye librsvg.
- CVE-2026-111497 es un fallo del decodificador Brotli (CNA Google, producto Brotli). Te llega a través de Node, que lo valora como High, no Critical, y solo si descomprimes Brotli enviado por un atacante.
- El "CRITICAL" de nginx es la puntuación CVSS v4 de F5. El propio proyecto nginx califica las tres como "Medium".
Vulnerabilidad nginx 2026: tres fallos, tres configuraciones#
Corregidas el 14 de octubre en 1.30.6 (stable) y 1.31.7 (mainline). F5 las puntúa con CVSS v4 9.2 y v3.1 8.1. La ejecución de código exige ASLR desactivado o eludido, por eso nginx.org dice Medium.
¿Me afecta? Solo si tu configuración contiene el desencadenante. Comprueba la versión y haz grep sobre la configuración completa:
nginx -v
nginx -T 2>/dev/null | grep -nE 'alias|rewrite|request_filename|aio|ssi|map'- CVE-2026-15176: desbordamiento de búfer al combinar
aliasconrewrite, mássetoreturncon$request_filename, o$request_filenamedentro delog_format. Evita esa combinación hasta actualizar. - CVE-2026-93479: desbordamiento de búfer en la evaluación de scripts, en un
mapcon regex donderootolog_formatusan las capturas. Afecta a 1.30.0-1.30.5 y 1.31.2-1.31.6. Mitigación del aviso: capturas con nombre limitadas al bloque. - CVE-2026-97205: use-after-free con
aiojunto con SSIinclude virtual. Desactiva aio o SSI.
Cómo cerrarlo: actualiza a 1.30.6 o 1.31.7. La misma versión corrige CVE-2026-95101 (inyección en el cuerpo de petición HTTP/3) y CVE-2026-97629 (falsificación de tickets de sesión TLS), así que merece la pena aunque tu configuración esquive los tres desencadenantes. Fuentes: los avisos de nginx.org y los artículos de F5 K000162416, K000162607, K000162608.
Vulnerabilidad PHP: dos RCE corregidas el 21 de octubre#
Ambos avisos (GHSA-w8hw-w9fx-j79w y GHSA-6wmf-4rv5-p3rp en php/php-src) tienen CVSS v4 9.2. Corregidas en 8.2.35, 8.3.36, 8.4.27 y 8.5.12.
CVE-2026-109618, "RCE por corrupción de memoria al agotarse". Sin autenticación. Se validó una RCE completa por HTTP contra Apache mod_php, durante el análisis del cuerpo multipart y antes de que corra el código de tu aplicación. FrankenPHP probablemente es vulnerable. FPM lo es según el análisis del código, pero no se mostró un exploit completo. Hasta actualizar: post_max_size conservador, límite de partes multipart, bloquear multipart en el frontend si no hay subidas, reiniciar workers. RLIMIT_AS y RLIMIT_DATA no sirven, lo dice el propio aviso.
CVE-2026-109619, "RCE por estado global obsoleto". Necesita una petición productora y una consumidora en el mismo worker. Confirmada en mod_php mediante fatal_error_backtraces (PHP 8.5), con un segundo camino por el progreso de subida de sesión. Medidas temporales: fatal_error_backtraces=0, session.upload_progress.enabled=0, quitar los ajustes INI por petición, como PHP_VALUE, reiniciar workers.
Comprueba con php -v y php -i | grep -E 'post_max_size|upload_progress|fatal_error_backtraces'. Hay informes de terceros sobre un PoC público, pero PHP no los ha confirmado.
Actualización de seguridad de Node.js: 22.23.4, 24.22.1 o 26.12.1#
Publicadas el 21 de octubre, en el boletín de seguridad de Node.js. Node 20 llegó al fin de vida en abril de 2026 y no recibe correcciones, así que en 20 la respuesta es cambiar de versión, no parchear.
| CVE | Qué es | Valoración de Node | Cuándo importa |
|---|---|---|---|
| CVE-2026-111497 | Escritura fuera de límites en el decodificador Brotli | High (registro CVE: CVSS v4 9.2) | Descomprimes Brotli de un atacante con node:zlib |
| CVE-2026-105482 | dns.resolve* trunca nombres en un carácter NUL | High, 7.4 | Validas un nombre de host contra una lista permitida y luego lo resuelves. Como parche rápido, rechaza \0 |
| CVE-2026-105483 | Elusión de la comprobación de host TLS con IP de dígitos de ancho completo | High, 7.4 | Solo Node 24 y 26; 22 no está afectado. El cliente se conecta a hosts con dígitos no ASCII |
| CVE-2026-106069 | Elusión de la comprobación de host TLS con IPv4 con cero inicial, como 0127.0.0.1 | High, 7.4 | El cliente se conecta a IPv4 no canónicas |
La misma versión trae correcciones medium (CVE-2026-105481, contrabando de respuestas con keep-alive, CVE-2026-106072, CVE-2026-106074), una actualización del almacén de certificados que retira la confianza en intermedios de eMudhra y actualizaciones de OpenSSL, c-ares, Undici y SQLite. Para saber si esta actualización de seguridad de Node.js llegó a un contenedor, node -v en tu portátil no demuestra nada. Ejecuta docker run --rm <image> node -v y reconstruye. Una imagen node:22 descargada el mes pasado sigue llevando el Node viejo.
Vulnerabilidad GitLab: puntuación 10.0 y sin solución temporal#
- CVE-2026-110264: desbordamiento de enteros en el compilador de expresiones regulares, CVSS v3.1 10.0, sin autenticación "en determinadas condiciones". Corregida en 18.11.13, 19.0.10, 19.1.9, 19.2.9, 19.3.6, 19.4.3 y 19.5.1 (versión de parche del 22 de octubre). No hay solución temporal.
- CVE-2026-97229: desbordamiento de enteros en el compilador de regex de CI/CD, CVSS 10.0. Un regex manipulado y sin autenticar en la configuración de CI. Corregida en 19.2.8, 19.3.5 y 19.4.2 el 12 de octubre.
GitLab ya parcheó GitLab.com y Dedicated. Si gestionas tu propia instancia, el afectado eres tú: la versión aparece en la página Help o con gitlab-rake gitlab:env:info; pasa al parche de tu línea. Sin solución temporal, la única medida hasta entonces es no dejar la instancia expuesta a internet.
Java: una alerta sobre certificados, no sobre ejecución de código#
CVE-2026-91403 es una Oracle Security Alert fuera de ciclo del 21 de octubre para Java SE y GraalVM, componente JSSE, CVSS v3.1 9.1. Según la alerta, la corrección retira la confianza en certificados intermedios comprometidos de eMudhra. Mi lectura del riesgo práctico es un ataque de intermediario TLS con un certificado encadenado a esos intermedios, no ejecución remota de código. Es una inferencia mía, no palabras de Oracle.
Afectadas según la lista: Java SE 8u511, 11.0.33, 17.0.21, 21.0.13, 25.0.5, 27.0.1 y GraalVM for JDK 17.0.21 y 21.0.13. No pude confirmar los números de build corregidos; tómalos del Patch Availability Document de Oracle. Ejecuta java -version y compara. Node publicó el mismo cambio de eMudhra ese mismo día.
Next.js: tres avisos, un artículo aparte#
A Next.js le afectan tres avisos: dos RCE sin autenticación (en funciones use cache y en la Image Optimization API con SVG) y un DoS por Server Actions. La corrección es 16.4.1 o 15.5.28, y la última es 16.4.3. Las condiciones, los comandos grep y lo que encontré en mis servidores están en el análisis de la vulnerabilidad Next.js de octubre de 2026.
Cómo leer una lista de CVE que da miedo#
- Mira de quién es la puntuación. El mismo fallo puede ser 9.2 en CVSS v4, 8.1 en v3.1 y "Medium" en la tabla del propio fabricante. Este mes el ejemplo es nginx. Pregunta quién asignó el número: el fabricante, la CNA o un agregador.
- Lee la condición antes que la nota. "RCE sin autenticación" junto a "requiere
aiomás SSIinclude virtual" o "requiere ASLR desactivado" es otro problema distinto de una RCE en una instalación por defecto. - Abre CISA KEV. Estar en el catálogo significa explotación confirmada. No estar no es garantía, pero separa "parchear esta semana" de "parchear esta noche".
- Busca el componente real. CVE-2026-96889 iba con etiqueta de Next.js y vive en librsvg. Si buscas en tu pila por nombre de producto, se te escapa.
- Cuenta lo que de verdad ejecutas. Una lista de 15 se encoge rápido al tachar los productos que no tienes.
Qué necesitó mi pila#
Tengo siete sitios Next.js en Docker en un servidor, con Dokploy y Traefik delante. Sin nginx, PHP, Java ni GitLab. De las 15, me tocaron Next.js, Node.js, sharp y las imágenes base de Docker. El resultado de la auditoría (6 de 7 sitios vulnerables, la imagen fijada por digest que congeló un parche viejo de Node, el ajuste dangerouslyAllowSVG que no necesitaba) está en el artículo complementario.
Si alojas por tu cuenta una wiki u otras herramientas junto a tus aplicaciones, las mismas reglas valen para ellas; describí una instalación así en ClewWiki como wiki de equipo autoalojada.



