Ir al contenido principal

The Identity at the Core

La crónica de referencia de la gestión de identidades y accesos

Traducido automáticamente del original en inglés. La redacción puede contener imperfecciones. Leer el original en inglés

Tras PHP2Shell, llega su primo: Node2Shell

Conozca Node2Shell (CVE-2026-111497): cómo un fallo de memoria nativo de Brotli en Node.js convierte datos comprimidos no confiables en RCE, y por qué el IAM de carga de trabajo es el verdadero objetivo.

Por Paulo Barrilli
5 min de lectura88 visitas0 comentarios

Si pensaba que el departamento de marketing de seguridad se tomaba el resto de la semana de Halloween libre tras PHP2Shell, tengo malas noticias. Pocas horas después de que los avisos de PHP aterrizaran el 21 de octubre, una segunda vulnerabilidad fue bautizada en redes sociales: "Node2Shell".

Esta vez, el objetivo es CVE-2026-111497 (), una vulnerabilidad de gravedad alta a crítica divulgada en la publicación de seguridad de Node.js del 21 de octubre de 2026. Al igual que su primo PHP2Shell, el nombre está haciendo un gran trabajo de imagen (el propio Node.js nunca utilizó el término "Node2Shell" en su aviso), y de nuevo, la historia real se encuentra debajo del ruido: un fallo de corrupción de memoria nativo en C/C++ enterrado bajo un lenguaje de scripting con seguridad de memoria, listo para entregar a un atacante las llaves de cualquier identidad de servicio que mantenga el entorno de ejecución.

Analizamos qué confirman realmente el registro del CVE y los avisos oficiales, dónde reside la exposición real y por qué esta semana es una clase magistral sobre riesgo de identidad de carga de trabajo.

Lo que dice realmente el registro del CVE

A pesar del disfraz "2Shell" a juego, CVE-2026-111497 no es un fallo de inyección de JavaScript, ni es exclusivo de Node.js. Se trata de una escritura fuera de límites (CWE-787) en la biblioteca de compresión Brotli de Google en su versión original (versiones 1.0.3 a 1.2.0), que Node.js incluye dentro de su entorno de ejecución.

Estos son los hechos verificados hasta ahora:

  • El fallo: Cuando el decodificador de Brotli procesa un flujo comprimido malformado y especialmente diseñado, no se detiene ante una entrada no válida y escribe más allá del límite del búfer de memoria asignado (corregido mediante el commit de Brotli original 0ed4268a).

  • La puntuación: El registro del CVE de Google le asigna una puntuación CVSS v4.0 de 9,2 (Crítica), mientras que el aviso de seguridad de Node.js la califica como Alta y advierte explícitamente de que el impacto incluye Ejecución Remota de Código (RCE).

  • Las condiciones previas: Su aplicación está expuesta si descomprime datos Brotli no confiables. Esto ocurre directamente si su código invoca métodos de descompresión Brotli de node:zlib (zlib.brotliDecompress, createBrotliDecompress) sobre payloads suministrados por el usuario, o automáticamente cuando el fetch() nativo de Node (Undici) recibe una respuesta HTTP con Content-Encoding: br proveniente de un servidor upstream no confiable o controlado por el atacante.

  • El radio de impacto más allá de Node: Dado que el fallo reside en Brotli original, Bun (corregido en v1.4.4) y los paquetes Brotli / brotlicffi de Python (corregidos en 1.2.1) también publicaron actualizaciones de emergencia el 22 de octubre.

  • Versiones de Node afectadas y parcheadas: Node.js corrigió el fallo el 21 de octubre en v22.23.4, v24.22.1 y v26.12.1. Es fundamental destacar que Node.js 20 y versiones anteriores han alcanzado el fin de vida y no recibirán correcciones. Esto genera un enorme punto ciego operativo dado el número de contenedores de producción y funciones serverless que aún fijan Node 20.

  • Estado de explotación: Aunque múltiples repositorios de Prueba de Concepto (PoC) aparecieron en GitHub el 22 de octubre y los investigadores han demostrado ejecución de código intermitente contra contenedores Node 24 sin parchear, el catálogo de Vulnerabilidades Explotadas Conocidas (KEV) de CISA () sigue registrando la explotación activa como "ninguna".

La rivalidad entre hermanos: por qué Node2Shell es aún más sigiloso para el IAM

Si PHP2Shell fue un asalto a la puerta principal contra servidores web heredados y modernos, Node2Shell apunta al tejido conectivo de las arquitecturas cloud modernas: pasarelas de API, proxies de filtrado SSRF, procesadores de webhooks, capas Backend for Frontend (BFF) y orquestadores de agentes de IA que invocan fetch() a URLs externas en nombre de los usuarios.

¿Y qué más se publicó en ese mismo lote de seguridad de Node.js del 21 de octubre?

  • CVE-2026-105482: Un fallo de truncamiento en la resolución de DNS (dns.resolve*) mediante bytes NUL embebidos que permite a un atacante superar la comprobación de una lista de dominios permitidos para un dominio mientras consulta otro.

  • CVE-2026-106069 y CVE-2026-105483: Dos bypass de verificación de nombre de host TLS (tls.checkServerIdentity) que implican direcciones IP no canónicas y caracteres Unicode de ancho completo.

  • CVE-2026-106073: Un bypass en fs.realpathSync contra el modelo de permisos integrado de Node.

Uniendo todo esto, se aprecia la cadena ideal para un atacante: eludir una lista de URLs permitidas o una verificación TLS para engañar a un servicio Node.js y que realice una solicitud hacia un endpoint controlado por el atacante, devolver un payload malicioso con Content-Encoding: br, disparar la escritura fuera de límites de Brotli en código C nativo y saltar por encima del sandbox de JavaScript.

El botín de identidades dentro de un proceso Node.js

Una vez que un exploit aterriza en un worker de Node.js, el atacante no necesita depositar una web shell clásica en .php en disco (MITRE ATT&CK T1505.003) cuando process.env ya está en memoria. En los entornos de microservicios y serverless modernos, un entorno de ejecución Node comprometido es una mina de oro de identidades:

  • Proliferación de process.env: Entre en casi cualquier contenedor Node.js y vuelque las variables de entorno. Encontrará AWS_SECRET_ACCESS_KEY, DATABASE_URL, STRIPE_SECRET_KEY, claves de firma JWT internas y tokens OAuth de terceros en texto plano en memoria.

  • Identidad de carga de trabajo cloud y metadatos: Si ese servicio Node se ejecuta en Kubernetes o ECS sin un alcance estricto de rol de pod o tarea, o en EC2 con IMDSv1 habilitado (), un atacante que secuestre el proceso Node hereda de inmediato el rol IAM cloud asociado al nodo de cómputo.

  • Confianza saliente por defecto: A diferencia de los workers PHP tradicionales, que raramente necesitan llamar a URLs externas, los servicios Node están diseñados para comunicarse con todo. Un payload malicioso ejecutándose dentro del binario node se mezcla perfectamente con el tráfico HTTPS saliente normal, a menos que se aplique un filtrado estricto de egreso y tokens de corta duración vinculados a una audiencia específica.

Qué hacer antes del lunes

Primero, parchee el entorno de ejecución, no solo su package.json. Dado que Brotli está compilado dentro del propio binario de Node.js, npm audit fix no le salvará. Deberá reconstruir sus imágenes de contenedor base y actualizar los entornos de ejecución a Node.js 22.23.4, 24.22.1 o 26.12.1 (y Bun 1.4.4 o Brotli 1.2.1 donde corresponda). Si aún está en Node 20, este es su aviso de que fin de vida significa RCE sin parchear.

Segundo, si no puede parchear un servicio esta noche y este obtiene URLs externas no confiables o acepta cargas comprimidas, elimine br de las cabeceras Accept-Encoding salientes y bloquee Content-Encoding: br entrante en su WAF o proxy inverso hasta que el entorno de ejecución esté actualizado.

Por último, aproveche PHP2Shell y Node2Shell como ejercicio de simulación conjunto para su equipo de identidades. Dos lenguajes completamente distintos y dos fallos de memoria C nativa se publicaron el mismo día exacto, y ambos terminan con la misma pregunta: "Cuando el entorno de ejecución es engañado para ejecutar el código de un extraño, ¿qué permisos dejamos a su alcance para que los herede?"

Reduzca el rol IAM, saque los secretos de larga duración de process.env y audite sus identidades de máquina. La semana que viene habrá otro fallo "2Shell", y no le importará en qué lenguaje escribió su aplicación.

#node2shell#cve2026111497#php2shell#nodejs#brotli#workloadidentity#iam#secretsmanagement
Compartir:XLinkedInFacebook

Sea el primero en comentar

Solo para miembros: regístrese si tiene algo que valga la pena decir.

Todavía no hay comentarios.