🛡 VULNERABILIDADES 🛡

Fallo en el decodificador Brotli que permite RCE en Node.js también afecta a Bun, Python y otro software ampliamente utilizado.

🛡CyberObservatorio
Fallo en el decodificador Brotli que permite RCE en Node.js también afecta a Bun, Python y otro software ampliamente utilizado.
Idioma

Fallo en el decodificador Brotli que permite RCE en Node.js también afecta a Bun, Python y otro software ampliamente utilizado.

Fuente: The Hacker News

**Vulnerabilidad Crítica en el Decodificador Brotli de Google: Una Amenaza para Múltiples Aplicaciones**

La ciberseguridad es un campo en constante evolución, donde nuevas vulnerabilidades emergen y amenazan la integridad de sistemas y aplicaciones en todo el mundo. Recientemente, se ha identificado una grave vulnerabilidad en el decodificador Brotli de Google, que se encuentra presente en una variedad de programas que desempaquetan datos comprimidos en este formato. Entre ellos se incluyen Bun, los paquetes Brotli y brotlicffi de Python, así como proxies Envoy configurados para descomprimir Brotli. La vulnerabilidad, identificada como CVE-2026-111497, permite que datos comprimidos maliciosos sobrescriban la memoria de un programa, lo que podría resultar en bloqueos, fugas de memoria o incluso la ejecución de código controlado por un atacante.

El descubrimiento de esta vulnerabilidad fue realizado por investigadores de Imperva, quienes demostraron que es posible ejecutar código en una versión de Node.js no parcheada. Sin embargo, hasta el momento no se han reportado ataques en el mundo real que aprovechen esta vulnerabilidad en otros software. La divulgación inicial del fallo tuvo lugar el 21 de octubre, fecha en la que Node.js y Google lanzaron correcciones, seguidas por actualizaciones en otros productos. Es importante resaltar que, dado que el error radica en el decodificador de Google y cada programa utiliza su propia copia, es imperativo que cada uno actualice su versión de manera independiente.

El formato Brotli, desarrollado por Google, se utiliza ampliamente en la web para reducir el tamaño de páginas y otros datos. La vulnerabilidad está en el código C que desempaqueta un flujo Brotli, lo que significa que se extiende a cualquier aplicación que reutilice dicho código, afectando desde entornos de ejecución hasta proxies y paquetes de Python. Un programa se encuentra en riesgo únicamente si decodifica datos Brotli que estén bajo el control de un tercero. En el caso de Node.js y Bun, esto ocurre cuando la función incorporada `fetch()` lee una respuesta con la cabecera `Content-Encoding: br`, o cuando códigos que manejan el cuerpo de solicitudes, como Express 5 y body-parser 2, desempaquetan una carga de Brotli. Es relevante mencionar que un servidor HTTP básico de Node.js no decodifica cuerpos de solicitud por sí mismo.

Envoy e Istio son vulnerables únicamente cuando la descompresión de Brotli está habilitada, por ejemplo, a través de un filtro de Envoy. En entornos donde esta funcionalidad está desactivada, el fallo permanece inaccesible. En el ámbito de Python, el riesgo proviene de tener instalado cualquiera de los paquetes Brotli o brotlicffi. Una vez que cualquiera de estos paquetes está presente, los clientes HTTP como requests, urllib3, httpx y aiohttp decodifican automáticamente las respuestas Brotli, exponiendo así a la aplicación sin necesidad de importar explícitamente Brotli en su código.

La implementación de un firewall de aplicaciones web puede ofrecer cierta protección, pero tiene sus limitaciones. Vercel, que introdujo reglas de firewall el mismo día de la divulgación, aclaró que tales reglas no cubren "respuestas que sus funciones obtienen de otros servidores". Por lo tanto, para mitigar el riesgo, es crucial actualizar el entorno de ejecución o la biblioteca involucrada.

La gravedad de la vulnerabilidad depende del software afectado. El equipo de Red Team de Imperva, que denomina su trabajo Node2Shell, logró ejecutar código proporcionado por un atacante en una versión no modificada de Node.js 24.22.0 para Linux en ARM64, tanto a través de una respuesta obtenida como mediante un cuerpo de solicitud de Express. El exploit requirió varios intentos, y aunque no se ha publicado, no se ha probado en otras versiones.

OpenAI, cuyo equipo de Codex Security reportó la vulnerabilidad, la describe como una facilitadora de ejecución remota de código no autenticada en Brotli, identificando a Node.js, Bun y Envoy como software afectado. Según su análisis, el funcionamiento de la vulnerabilidad puede ser bidireccional. Hasta el momento, no se ha reportado explotación en el mundo real. La evaluación de CISA del 23 de octubre registró la explotación como "ninguna" y la automatización como "no", mientras que Red Hat indicó que no hay pruebas de concepto públicas fiables que demuestren la ejecución de código.

Las calificaciones de severidad varían según la entidad que las evalúe. Google, que asignó el CVE, lo califica con un 9.2, o crítico, en la escala CVSS 4.0. Por su parte, Node.js lo clasifica como alto, mientras que Red Hat lo valora con un 8.1, o importante.

La historia de la corrección de esta vulnerabilidad es inusual. El cambio que soluciona el fallo se añadió al código fuente de Brotli el 27 de febrero, pero no se lanzó una nueva versión de Brotli que lo incluyera hasta el 21 de octubre. OpenAI indicó que la causa raíz "fue realmente corregida en el código fuente de Brotli en febrero, pero no se conocía en ese momento que generaba una vulnerabilidad de seguridad, y no hubo una versión más reciente de Brotli".

Node.js agradece a Khai Tran y Sylvie Mayer del equipo de Codex Security de OpenAI por reportar la vulnerabilidad, así como a los mantenedores Matteo Collina y Antoine du Hamel por la corrección.

Es fundamental actualizar a una versión corregida de las que se mencionan anteriormente, reiniciar el servicio y reconstruir cualquier imagen de contenedor, ya que un proceso en ejecución mantiene el antiguo decodificador hasta que se reinicia.

En aquellos entornos donde aún no se puede actualizar, se recomienda detener la decodificación de Brotli no confiable. La página de divulgación de OpenAI y la firma de seguridad Aikido sugieren las siguientes medidas: rechazar solicitudes entrantes con `Content-Encoding: br` antes de que cualquier proxy o analizador decodifique el cuerpo; desactivar la decodificación automática de Brotli en los clientes HTTP y rechazar respuestas Brotli antes de que sean decodificadas. En el caso de Python, se recomienda desinstalar los paquetes Brotli y brotlicffi para que los clientes retrocedan a gzip y deflate.

Eliminar `br` del encabezado `Accept-Encoding` no es suficiente por sí solo, ya que un servidor puede enviar Brotli sin importar lo que el cliente solicite. Para Node.js, no se ha publicado ninguna solución alternativa, por lo que la actualización del entorno de ejecución sigue siendo el único remedio.

Los paquetes del sistema se están corrigiendo en diferentes momentos. Debian corrigió su paquete brotli para Debian 13 (trixie) el 23 de octubre en la versión 1.1.0-2+deb13u1. Por otro lado, Amazon Linux 2023 aún listaba sus paquetes de brotli y Node.js 24 como pendientes de corrección a fecha del 22 de octubre.

Es posible que los escáneres de dependencias aún no hayan marcado los paquetes de Python. El registro del CVE menciona el repositorio de Brotli de Google, no los paquetes de PyPI, y el aviso de GitHub todavía no lista ningún paquete afectado, lo que es lo que Dependabot consulta. Las entradas de aviso para los dos paquetes de Python, PYSEC-2026-4322 y PYSEC-2026-4323, se añadieron el 23 de octubre, por lo que también se recomienda verificar manualmente las versiones instaladas.

En conclusión, la vulnerabilidad CVE-2026-111497 representa un riesgo significativo para una amplia gama de aplicaciones y servicios que utilizan Brotli. La situación exige una atención inmediata por parte de desarrolladores y administradores de sistemas para mitigar los riesgos asociados y proteger la integridad de sus sistemas.

Brotli Decoder Flaw Behind Node.js RCE Also Affects Bun, Python and Other Widely Used Software

Source: The Hacker News

A memory-corruption flaw in Google's Brotli decoder sits in many programs that unpack Brotli-compressed data, among them Bun, the Python Brotli and brotlicffi packages, and Envoy proxies set up to decompress Brotli. Tracked asCVE-2026-111497, the flaw allows crafted compressed data to overwrite past the end of a buffer and corrupt a program's memory, potentially causing a crash, a memory leak, or the execution of attacker-controlled code. Imperva researchers have shown thatcode can run on one unpatched Node.js build. The same has not been demonstrated on the other software, and no real-world attacks have been reported. The flaw wasfirst disclosed on October 21, when Node.js and Google shipped fixes, and more have followed product by product since. Because the bug is in Google's decoder and each program ships its own copy of it, every one has to update that copy on its own. Brotli is a compression format from Google, used across the web to shrink pages and other traffic. The bug is in the C code that unpacks a Brotli stream, so it travels into anything that reuses that code, from language runtimes to proxies to Python packages. A program is exposed only if it decodes Brotli data that someone else controls. For Node.js and Bun, that happens when the built-in fetch() reads a response sent with Content-Encoding: br, or when request-body code such as Express 5 and body-parser 2 unpacks a Brotli upload. A plain Node.js HTTP server does not decode request bodies on its own. Envoy and Istio are affected only when Brotli decompression is enabled, for example, through an Envoy filter. Where it is off, the flaw cannot be reached. In Python, the risk comes from the Brotli or brotlicffi package being installed at all. Once either is present, HTTP clients such as requests, urllib3, httpx, and aiohttp decode Brotli responses on their own, so an application can be exposed without ever importing Brotli in its own code. A web application firewall helps only so far. Vercel, whichadded firewall ruleson the day of disclosure, said those rules do not cover "responses your functions fetch from other servers." For that path, only updating the runtime or library closes the hole. How far the flaw can be pushed depends on the software. Imperva's Red Team, which calls its work Node2Shell, ran attacker-supplied code on an unmodified Node.js 24.22.0 build for Linux on ARM64, delivering it both as a fetched response and as an Express request body. The exploit took several tries, has not been released, and was not tested on other builds. OpenAI, whose Codex Security team reported the flaw, describes it as enabling unauthenticated remote code execution in Brotli and lists Node.js, Bun, and Envoy as affected software. In its account, the flaw works both ways: No in-the-wild exploitation has been reported. CISA's October 23 assessment recorded exploitation as "none" and automation as "no," andRed Hatsaid there is no reliable public proof-of-concept for running code. Severity ratings differ by who is scoring. Google, which assigned the CVE, rates it 9.2, or critical, on the CVSS 4.0 scale. Node.js calls it high, and Red Hat rates it 8.1, or important. The fix has an unusual history. The change that closes the flaw was added to Brotli's source code on February 27, but no new Brotli release carried it until October 21. OpenAI said the root cause "was actually fixed in the Brotli source code in February, but it wasn't known at the time that it gave rise to a security vulnerability and there was no more recent release of Brotli." Node.js credits Khai Tran and Sylvie Mayer of OpenAI's Codex Security for reporting the flaw, and maintainers Matteo Collina and Antoine du Hamel for the fix. Update to a fixed version from the table above, then restart the service and rebuild any container image, because a running process keeps the old decoder until it restarts. Where you cannot update yet, stop decoding untrusted Brotli.OpenAI's disclosure pageand the security firmAikidoboth recommend: Reject incoming requests with Content-Encoding: br before any proxy or parser decodes the body. Turn off automatic Brotli decoding in HTTP clients, and reject Brotli responses before they are decoded. In Python, uninstall the Brotli and brotlicffi packages so clients fall back to gzip and deflate. Droppingbrfrom the Accept-Encoding header does not help on its own, because a server can send Brotli whatever the client asks for. For Node.js, no workaround has been published, so updating the runtime is the only fix. System packages are being fixed at different times. Debianfixed its brotli packagefor Debian 13 (trixie) on October 23 in version 1.1.0-2+deb13u1. Amazon Linux 2023 still listed its brotli and Node.js 24 packages as pending a fix as of October 22. Dependency scanners may not flag the Python packages yet. The CVE record names Google's Brotli repository, not the PyPI packages, and GitHub's advisory still lists no affected package, which is what Dependabot reads. Advisory entries for the two Python packages, PYSEC-2026-4322 and PYSEC-2026-4323, were added on October 23, so check the installed versions manually as well.

Fallo en el decodificador Brotli que permite RCE en Node.js también afecta a Bun, Python y otro software ampliamente utilizado. | Ciberseguridad - NarcoObservatorio