What’s new, in 20 seconds
- CVE-2026-111497 is an out-of-bounds write in Google's Brotli decoder, versions 1.0.3 through 1.2.0. Brotli released fixes in 1.2.1, 1.1.1 and 1.0.10, and Node.js shipped 22.23.4, 24.22.1 and 26.12.1 on October 21, 2026, crediting 'OpenAI Codex Security' researchers Khai Tran and Sylvie Mayer.
- The CVE record scores it CVSS v4.0 9.2, critical; Node.js rates it high. Python's Brotli 1.2.1 and brotlicffi 1.2.1.0 followed on October 22, Bun 1.4.4 the same day, and Envoy 1.40.0, 1.39.3, 1.38.6 and 1.37.8 on October 23. Istio had shipped Envoy's fix on October 15, and Microsoft patched .NET on October 25.
- Aikido named the wider problem 'HTTP2Shell' on October 23 because any HTTP client or server that decodes untrusted Brotli data can be exposed. Imperva reported lab code execution on an unpatched Node.js 24.22.0 image on October 22. CISA hadn't added the CVE to its Known Exploited Vulnerabilities catalog by October 26, and its October 23 assessment in the CVE record lists exploitation as 'none'.
Contents
HTTP2Shell is the name security firm Aikido gave on October 23, 2026, to CVE-2026-111497, a memory-corruption flaw in Google's Brotli decompression library that was first disclosed two days earlier as "Node2Shell." Node.js credits the report to OpenAI's Codex Security team. Because Brotli is bundled into runtimes, proxies and HTTP libraries, the fix has to arrive separately in each one. This security story lists what's affected and what to patch. It's the second critical, AI-found bug in widely used web software in one week, after PHP2Shell.
This story is based on the Node.js October 2026 security release, Google Brotli's release notes, the CVE record and its GitHub advisory, CISA's Known Exploited Vulnerabilities catalog, Envoy's, Istio's, Bun's and Microsoft's .NET advisories, the PyPI pages for Brotli and brotlicffi, and research posts by Aikido and Imperva, checked October 26, 2026.
The short version
- What: an out-of-bounds write in the Brotli decoder, in Brotli 1.0.3 through 1.2.0. Crafted compressed data can crash a process, leak memory or, potentially, run code.
- Fixed in: Brotli 1.2.1, 1.1.1 and 1.0.10; Node.js 22.23.4, 24.22.1 and 26.12.1; and downstream releases listed below.
- Severity: CVSS v4.0 9.2 (critical) in the CVE record; "High" from Node.js.
- Found by: the CVE record, filed by Google, and Node.js credit "OpenAI Codex Security" (Khai Tran and Sylvie Mayer); Envoy credits "OpenAI Security Research."
- Exploited? Not in CISA's Known Exploited Vulnerabilities catalog as of October 26, 2026.
What is HTTP2Shell?
The GitHub advisory, which mirrors the CVE record, describes a buffer overflow in Brotli's decoder (c/dec/decode.c) that lets "a remote unauthenticated attacker" use a crafted Brotli stream to corrupt memory, disclose memory, cause a denial of service "or potentially execute arbitrary code." Node.js disclosed it first, on October 21, so early coverage called it Node2Shell. On October 23, Aikido renamed its tracking "HTTP2Shell," saying the flaw affects "many libraries and applications using HTTP."
The flaw sits in a decompressor, so only code that decodes Brotli is at risk. Aikido notes that Apache's standard mod_brotli compresses but doesn't decode, and that Apache and Nginx don't decode Brotli by default.
Which versions fix CVE-2026-111497?
| Component | Fixed versions | Released | Source |
|---|---|---|---|
| Google Brotli (C library) | 1.2.1; 1.1.1 and 1.0.10 for older lines | October 21, 2026 | Brotli release notes |
| Node.js | 22.23.4, 24.22.1, 26.12.1 | October 21, 2026 | Node.js security release |
Python Brotli (PyPI) | 1.2.1 | October 22, 2026 | PyPI |
Python brotlicffi (PyPI) | 1.2.1.0 (bundles libbrotli 1.2.1) | October 22, 2026 | PyPI changelog |
| Bun | 1.4.4 (fixes 1.0.21 through 1.4.3; advisory rates it high) | October 22, 2026 (advisory October 23) | Bun release notes; GHSA-663w-cv8g-jj2p |
| Envoy | 1.40.0, 1.39.3, 1.38.6, 1.37.8 (1.36.12 also patched) | October 23, 2026 (advisory) | Envoy GHSA-3wvj-j6qm-62mr |
| Istio | 1.31.2, 1.30.6, 1.29.9 | October 15, 2026 | ISTIO-SECURITY-2026-007 |
| Microsoft .NET | Runtime 8.0.33, 9.0.22, 10.0.14 | October 25, 2026 | .NET security advisory |
Table 1The library fix landed on October 21; each runtime or proxy then shipped its own release, and Istio's came first. Source: the project pages listed, checked October 26, 2026.
Last verified: October 26, 2026
Bun's advisory adds that executables built with bun build --compile on an affected version stay vulnerable until they're rebuilt with 1.4.4.
Microsoft's .NET advisory of October 25 rates the flaw High (CVSS 3.1 score 8.1) in .NET and fixes it in runtimes 8.0.33, 9.0.22 and 10.0.14. ASP.NET Core and HttpClient don't decompress Brotli by default, so only apps that turn on Brotli decompression or call APIs such as BrotliStream directly are exposed. .NET Framework isn't affected. Self-contained and NativeAOT apps have to be rebuilt and redeployed, because updating the machine's shared runtime doesn't replace a decoder already built into them.
Node.js 25.x, 23.x, 20.x and older lines are end-of-life and get no fix, according to Aikido. Linux distributions may ship the fix as a backported brotli package without changing the upstream version number, and distribution builds of Node.js can use that system library, so check your vendor's advisory rather than the version string alone.
How do I know if my app is exposed?
Look for places where untrusted Brotli data gets decoded. Aikido's and Imperva's research name the common Node.js paths:
- Incoming requests: Express 5 and body-parser 2.x decompress request bodies sent with
Content-Encoding: br. A barenode:httpserver doesn't. - Outgoing requests: built-in
fetch()decompresses Brotli responses automatically, so a webhook target or any user-supplied URL could send one. - Direct use: passing untrusted input to
node:zlib's Brotli functions.
In Python, exposure is mostly indirect: Aikido says urllib3, requests, httpx (with its Brotli extra), aiohttp and Scrapy use Brotli or brotlicffi automatically when installed. Aikido warned on October 23 that advisory databases didn't yet map the CVE to either PyPI package. That has changed: by October 25, the reviewed GitHub advisory and the PyPA advisory database list Brotli (fixed in 1.2.1) and brotlicffi (fixed in 1.2.1.0), so scanners that use them can now flag older versions. For Envoy, the advisory says deployments are affected if they have the Brotli decompressor configured. Istio says its users are affected if they enable Brotli decompression, for example through an EnvoyFilter.
How do I patch or mitigate HTTP2Shell?
Upgrade every component that bundles Brotli, rebuild images and wheels, regenerate lockfiles and restart services. Node.js lists no workaround; Imperva advises checking the Node.js version inside each deployed image.
If you can't upgrade at once, Aikido suggests:
- rejecting inbound requests whose
Content-Encodingincludesbrat a proxy, load balancer or middleware, before any decoder runs; - removing
brfrom outgoingAccept-Encodingheaders and refusing to decode Brotli responses, because a malicious server can send Brotli regardless of what the client asks for; - in Python, uninstalling
Brotliorbrotlicffiwhere they're optional, which may break responses from servers that send Brotli anyway.
Imperva and, according to Aikido, Vercel have added firewall rules, but those don't cover responses your own code fetches.
Is HTTP2Shell being exploited?
There were no confirmed reports by October 26. CISA's Known Exploited Vulnerabilities catalog doesn't list CVE-2026-111497 (catalog version of October 23), and CISA's October 23 assessment, added to the CVE record, rates exploitation as "none." Aikido cites The Hacker News as saying no in-the-wild exploitation had been reported as of October 22. On the same day, Imperva reported that its researchers achieved code execution against the official Node.js 24.22.0 Linux arm64 image through fetch() and through Express 5 or body-parser 2, that it "took multiple attempts in our setup," and that Node.js 24.22.1 rejected the same input. Aikido says the first public proof of concept worked only against a deliberately weakened build.
How did OpenAI find it, and why did the fix take so long to ship?
Node.js credits the report to "OpenAI Codex Security," naming Khai Tran and Sylvie Mayer; the CVE record Google filed names the same team as finder, and Envoy's advisory credits "OpenAI Security Research." None of them says when the report arrived or whether a model found the bug on its own. OpenAI's Patch the Planet initiative, whose disclosure process is examined in our Patch the Planet analysis, has published a Brotli advisory page that, by its own description, covers affected software, fixed releases and how to disable Brotli decoding while patching.
The timing is the odd part. Aikido says the root cause was fixed in Brotli's source in February 2026 but wasn't treated as a security issue, so no release carried the fix until October 21. The upstream commit, "Detect and report invalid stream earlier," changes the decoder's block-switch error handling. Istio shipped Envoy's fix in its October 15 patch releases, six days before public disclosure, which suggests some downstream projects had advance notice.
CVE-2026-111497 from upstream commit to downstream fixes, 2026
- Feb.Root-cause fix committed to Brotli source, not labeled as securityAikido; GitHubReported
- Oct. 15Istio 1.31.2, 1.30.6, 1.29.9 ship Envoy's Brotli fixIstioConfirmed
- Oct. 21Brotli 1.2.1, 1.1.1, 1.0.10 and Node.js security releasesBrotli; Node.jsConfirmed
- Oct. 22Python Brotli 1.2.1, brotlicffi 1.2.1.0 and Bun 1.4.4PyPI; BunConfirmed
- Oct. 22Imperva reports lab code execution on Node.js 24.22.0ImpervaReported
- Oct. 23Envoy advisory; Aikido renames it HTTP2ShellEnvoy; AikidoConfirmed
- Confirmed
- Reported
AI-assisted bug reports are arriving faster than many projects can handle, as our Linux kernel disclosure story shows; Anthropic's OSS Scanner is another lab's attempt to find such bugs first.
What's confirmed, reported and uncertain
- Confirmed (projects): the affected Brotli range, every fixed version in the table, and the OpenAI credits from Node.js and Envoy.
- Confirmed (CVE record): CVSS v4.0 9.2, the impact description and the "OpenAI Codex Security" finder credit; CISA's "none" exploitation rating as of October 23, and no KEV listing as of October 26.
- Reported: Imperva's lab exploitation; the February source fix and "not treated as security" account (Aikido); no in-the-wild exploitation as of October 22 (The Hacker News, via Aikido); Python library exposure paths (Aikido).
- Uncertain: when OpenAI reported the bug, whether a model found it alone, which other products embed vulnerable Brotli builds, and whether exploitation is under way.
About this story
Based on the sources linked below. How we report: Editorial standards.
Sources · 17
- Wednesday, October 21, 2026 Security Releases — Node.js
- Releases (v1.2.1, v1.1.1, v1.0.10) — google/brotli, GitHub
- Detect and report invalid stream earlier (commit 0ed4268a) — google/brotli, GitHub
- CVE-2026-111497 — CVE Record (cve.org)
- GHSA-9v8h-qqgm-4m35 (CVE-2026-111497) — GitHub Advisory Database
- Known Exploited Vulnerabilities Catalog — CISA
Show all 17 sources
- GHSA-663w-cv8g-jj2p: Bundled brotli decoder has an out-of-bounds write — Bun (October 23, 2026)
- GHSA-3wvj-j6qm-62mr: Out-of-bounds write in Brotli decompressor — Envoy Proxy (October 23, 2026)
- Microsoft Security Advisory CVE-2026-111497: .NET Brotli Decoder Out-of-bounds Write Vulnerability — dotnet/announcements, GitHub (October 25, 2026)
- ISTIO-SECURITY-2026-007 — Istio (October 15, 2026)
- Bun v1.4.4 — Bun (October 22, 2026)
- Brotli — PyPI
- brotlicffi — PyPI
- Brotli vulnerability (CVE-2026-111497) — Patch the Planet
- Node2Shell evolves to HTTP2Shell — Aikido (October 23, 2026, updated October 24)
- Node2Shell: Node.js Brotli RCE (CVE-2026-111497) — Aikido (October 22, 2026)
- Node2Shell: from Brotli data to remote code execution — Imperva (October 22, 2026)






Comments (0)