TL;DR
- What this is: A guide and vulnerability checker for CVE-2026-111497, a critical flaw in Google's Brotli decoder that allows remote code execution across multiple ecosystems. It is under active attack.
- Remediation guide: A check command and the fixed version for each stack.
- Vulnerability checker: A read-only tool that scans your system and reports any vulnerable package versions found. Jump to the checker.
The bug
- What it is
- An out-of-bounds write in the decoder of Brotli, Google's compression library, versions 1.0.3 to 1.2.0 (CVE-2026-111497). Runtimes and packages use it to unpack Brotli-compressed HTTP data.
- Fixed upstream in 1.0.10, 1.1.1 and 1.2.1, all released 2026-10-21.
- Every runtime, package or library that bundles or links that decoder inherits it.
- Impact
- Remote code execution, memory leaks or crashes. The CVE record rates it 9.2 Critical (CVSS 4.0). Node.js and Microsoft rate it High.
- Under active attack. CISA added it to its Known Exploited Vulnerabilities list on 2026-10-27.
- No login needed. Any app that decodes attacker-supplied Brotli is reachable: a request body sent with
Content-Encoding: br(Express 5, Koa body parsers,node:zlib) or a response fetched from a server the attacker controls (fetch(), Pythonurllib3,httpx,aiohttp). Clients are exposed as well as servers. - Code execution is proven on stock Node.js 24.22.0. Failed attempts crash the process, and each build needs its own offsets.
- Names
- Node2Shell: the flaw in the Node.js runtime, reached through Brotli request bodies.
- HTTP2Shell: the flaw in any HTTP client or server that decodes Brotli, such as Python's
urllib3,requests,httpxandaiohttpvia theBrotliandbrotlicffipackages. Unrelated to HTTP/2. - Python2Shell: the flaw in Python's
Brotliandbrotlicffipackages, which compile the same C decoder. - Brotli2Shell, Broccoli2Shell, Brotlipocalypse: names for the decoder flaw itself.
- Exploitation
- Attacks started within a day of disclosure. Vendor sensors have logged attempts from at least 20 IPs since 2026-10-21.
- No confirmed compromise yet. ELLIO replayed a captured exploit chain 50 times in a lab and got no shell.
- Public exploit code has been out since 2026-10-22.
- Related
- The pure-Go
andybalholm/brotlihas the same flaw, but in Go it can only crash the process. Fixed in v1.2.7. See the Go row.
- The pure-Go
Manual checks
Any row that matches means you are affected.
| Stack | Check | Affected if | Fix |
|---|---|---|---|
| Node.js | node --version |
|
|
| Bun | bun --version |
|
|
| Electron | npm ls electronplutil -extract CFBundleVersion raw -o - "/Applications/NAME.app/Contents/Frameworks/Electron Framework.framework/Resources/Info.plist" |
|
|
| .NET | dotnet --list-runtimes |
|
|
| Python | pip list 2>/dev/null | grep -iE '^(brotli|brotlicffi|curl[-_]cffi) ' |
|
|
| Java | mvn dependency:tree -Dincludes=com.aayushatharva.brotli4j./gradlew -q :app:dependencyInsight --dependency com.aayushatharva.brotli4j --configuration runtimeClasspath:app |
|
|
| Ruby | grep -E '^ brotli \(' Gemfile.lock |
|
|
| Go | go list -m all | grep brotli |
|
|
| Rust | grep -i brotli Cargo.lock |
|
|
| curl | curl -V | grep -io 'brotli/[0-9.]*' |
brotli/ in the output: not affected |
|
| Debian / Ubuntu | dpkg -l | grep brotli |
|
|
| Other Linux | rpm -qa | grep brotliapk info -v | grep brotlipacman -Q brotli |
|
|
Vendored Brotli source
If you vendor Brotli's C source, fixed code contains the error name BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH. This lists decoder files that lack it:
grep -rIlZ --include='decode.c' --include='decode.cpp' 'BrotliDecoderDecompressStream' . | xargs -0 -r grep -L 'BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH'
Copies older than 1.0.3 also show up but are not affected.
The Debian and Ubuntu security patches add the same error name. Compiled libraries show it as _ERROR_FORMAT_BLOCK_SWITCH (1.1 and later) or a bare BLOCK_SWITCH (1.0.x). Still judge OS packages by version.
Caveats per stack
Exceptions to the table above. Read the rows for the stacks you run.
Electron
| Case | What to know |
|---|---|
| Whose Brotli |
|
| Fixed in |
|
| Fix |
|
curl
| Case | What to know |
|---|---|
| Version output |
|
| Other users |
|
.NET
| Case | What to know |
|---|---|
| PowerShell |
|
| Visual Studio |
|
Python
| Case | What to know |
|---|---|
| Direct dependents |
|
| Through extras |
|
| Wheels with their own Brotli |
|
Distro python3-brotli |
|
Java
| Case | What to know |
|---|---|
jvmbrotli |
|
Ruby
| Case | What to know |
|---|---|
brotli gem |
|
Go
| Case | What to know |
|---|---|
| cbrotli |
|
| Bazel |
|
Rust
| Case | What to know |
|---|---|
brotlic-sys |
|
compu-brotli-sys |
|
Other -sys crates |
|
Linux and OS packages
| Case | What to know |
|---|---|
Debian and Ubuntu nodejs |
|
Ubuntu 20.04 nodejs |
|
| Debian bookworm |
|
| RHEL, AlmaLinux, Amazon Linux, SLE |
|
| Bundled copies on RPM distros |
|
Scanners and containers
| Case | What to know |
|---|---|
| Silent scanners |
|
| Container images |
|
Vulnerability checker
We've provided an open-source vulnerability checker that runs every check on this page against your machine in a single pass. It's read-only, makes no changes on your system. It reports vulnerable libraries, runtimes and packages. Usage is in the repository README.
It scans:
- Installed runtimes: Node.js, Bun, .NET and Electron apps
- Project dependencies: Python, npm, Java, Ruby, Go and Rust
- OS packages,
libbrotliand curl - Vendored Brotli source and decoder copies bundled inside apps
- Local Docker and Podman images
Usage
# Get the script git clone https://github.com/fieldse/brotli-http2shell-checker.git cd brotli-http2shell-checker less scripts/vuln-check-CVE2026-111497-brotli.sh # review before running # Run it ./scripts/vuln-check-CVE2026-111497-brotli.sh -r ~/src -q # scan a source tree and report problems only ./scripts/vuln-check-CVE2026-111497-brotli.sh -r /srv -c # also check local Docker or Podman images ./scripts/vuln-check-CVE2026-111497-brotli.sh -c -e podman # set the engine (by default Docker, then Podman) ./scripts/vuln-check-CVE2026-111497-brotli.sh --help
- FAIL
- A known-vulnerable version is present.
- WARN
- Needs manual review.
The script exits 1 on any FAIL. With --strict it exits 1 on any WARN, so it can be used for a CI gate.
Project source
View source: vuln-check-CVE2026-111497-brotli.sh.
Table of what it checks.
If you can't upgrade today
Reject request bodies with Content-Encoding: br at your proxy or gateway. This doesn't protect code that fetches Brotli responses from user-supplied URLs, so upgrade as soon as you can.
Sources
Versions on this page come from these advisories, checked on 2026-10-29.
Every version claim with its source
- CVE-2026-111497 record
- Google Brotli v1.0.10 release
- Google Brotli v1.1.1 release
- Google Brotli v1.2.1 release
- Node.js October 2026 security releases
- Bun GHSA-663w-cv8g-jj2p
- .NET announcement #494
- Microsoft MSRC CVE-2026-111497
- PyPI Brotli, brotlicffi GHSA-9v8h-qqgm-4m35
- curl_cffi v0.17.0 release notes
- Brotli4j GHSA-x524-jrqf-vwq6
- andybalholm/brotli GHSA-c9gr-gmg4-2vqv
- Debian security tracker
- Debian DLA-4855-1
- Debian DSA-6582-1
- Freexian ELA-1861-1
- Ubuntu CVE tracker
- Ubuntu USN-8956-1
- Red Hat CVE page
- SUSE CVE page
- Alpine security tracker
- Fedora Bodhi brotli updates
- Amazon Linux ALAS2023-2026-3334
Resources
Write-ups for background, exposure paths and detection.
- OpenSourceMalware: CVE-2026-111497 Brotli bug reaches far beyond Node.jsInventory of projects that bundle their own Brotli copy, and the fix-marker string.
- OpenSourceMalware: Python packages vulnerable to Node2ShellAffected PyPI packages and how to find them.
- Socket: eMudhra, Brotli, and the long tail of a security fixWhy vendored copies keep the bug alive after the upstream fix.
- Aikido: Node2Shell, Node.js Brotli RCEThe Node.js case and its exposure paths.
- Aikido: Python packages vulnerable, evolves to HTTP2ShellWhere the HTTP2Shell name comes from.
- Wiz: Broccoli2Shell, everything you need to knowOverview across Node.js, Bun and other affected software.
- Sysdig: Detecting the Node.js Brotli RCERuntime detection.
- Tenable: Brotli2Shell FAQCommon questions, via Security Boulevard.
- broccoli2shell.comCommunity tracker of affected projects.
- Blacklight SecurityPenetration testing, managed SOC and incident response in Australia and New Zealand.