Last updated: October 29, 2026
CVE-2026-111497 — also called Node2Shell, HTTPS2Shell or Brotlipocalypse — is a critical out-of-bounds write in Google's Brotli decompression library that can lead to remote code execution in Node.js, Bun, Python apps, Envoy and Istio when they decompress malicious data. It is fixed in Node.js 22.23.4, 24.22.1 and 26.12.1, Brotli 1.0.10, 1.1.1 and 1.2.1, and Bun 1.4.4. For crypto users the practical risk sits in software that talks to the internet: trading bots, Telegram bots, self-hosted payment tools and desktop apps built on Node.js. Update them from official sources. And watch out for fake "urgent security update" downloads, which always follow news like this.
- 9.2 CVSS 4.0 severity
- 3 Node.js branches patched (22, 24, 26)
- 1.0.3 first affected Brotli version
- 6 major platforms affected
What is the Brotli bug?
Brotli is a compression format created by Google. Web servers use it to shrink pages and API responses, and clients unpack them automatically. The bug is in the decoder: on a specially crafted malformed block it asks for more input instead of stopping, and keeps writing bytes past the end of a small internal buffer. Depending on the program, that means a crash, leaked memory or, in the worst case, the attacker's code running on the machine. Every Brotli version since 1.0.3 is affected, and because the decoder is copied into many projects, patching one doesn't patch the others.
Researchers at Imperva published a working exploit for Node.js 24.22.0 on Linux ARM64. It needed no special build, though it can take several attempts. The bug was found by researchers on OpenAI's Codex Security team. At the time of writing, no mass exploitation has been reported.
Who is affected and which version fixes it
| Software | Fixed in | When it's exposed |
|---|---|---|
| Node.js | 22.23.4, 24.22.1, 26.12.1 (20.x and older: no patch) | fetch() auto-decompresses Brotli responses; node:zlib; some request-body parsers |
| Brotli library | 1.0.10, 1.1.1, 1.2.1 | Any program that decodes untrusted Brotli data |
Python Brotli / brotlicffi | 1.2.1 / 1.2.1.0 | If installed, Requests, urllib3, httpx and aiohttp may decode Brotli responses automatically |
| Bun | 1.4.4 | Versions from 1.0.21 |
| Envoy | 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12 | Only with the Brotli decompressor enabled |
| Istio | 1.31.2, 1.30.6, 1.29.9 | When Brotli decompression is set up via EnvoyFilter |
The attacker needs your program to unpack data they control: a malicious request sent to your server, or a malicious response from a server your program fetches. A plain Node.js HTTP server doesn't decompress request bodies on its own; frameworks and middleware can. The same Node.js release also fixed TLS certificate hostname checks that unusual IP-address formats could bypass (CVE-2026-106069, CVE-2026-105483) and a DNS bug that truncated hostnames at a null byte (CVE-2026-105482).
What it means for crypto users
- Bots and scripts. Trading bots, price trackers and Telegram bots are often written in Node.js or Python and constantly fetch data from APIs. If one of those servers is compromised, or you call an untrusted one, the response can carry the exploit. Update the runtime and rebuild Docker images: an image built last month still has last month's Node.js.
- Desktop apps on Electron. Many desktop crypto apps are built on Electron, which ships its own copy of Node.js. Updating Node.js on your computer doesn't touch it, so install the app's own update.
- Self-hosted tools. Payment plugins, node dashboards and anything else exposed to the internet: check what they run on and update.
- Fake updates. Scammers use big vulnerability news to push "emergency patches" that are really wallet stealers. Update only through the app itself or the developer's site, and verify the download. See also fake browser extensions.
- Hot wallets on servers. A remote code execution bug on a server that holds private keys means losing the keys. Keep long-term funds in a cold wallet, not on a machine that talks to the internet all day.
Checklist for developers and self-hosters
- Check versions:
node -v,bun --version,pip show brotli brotlicffi, and your Envoy or Istio version. - Update and rebuild: pull fresh base images (
node:22-alpineand others) and rebuild containers. Restarting the old container is not enough. - Upgrade from end-of-life branches: Node.js 20.x and older get no fix.
- Turn off what you don't need: don't decompress untrusted Brotli request bodies or upstream responses if your app doesn't require it.
- Scan: Trail of Bits published a Brotli Checker that finds vulnerable decoder copies in code, dependencies and containers.
Is notkyc affected?
No. We checked our stack after the disclosure: notkyc's backend doesn't decompress Brotli anywhere, and our servers already run the patched system library. Exchanges listed on notkyc run their own infrastructure, so watch their announcements too. Real incidents with listed services show up on the no-KYC track record.
Frequently asked questions
What is CVE-2026-111497?
A critical out-of-bounds write in Google's Brotli decoder, with a CVSS 4.0 score of 9.2. Malicious compressed data can crash a program, leak memory or run attacker code. It affects Node.js, Bun, Python Brotli packages, Envoy and Istio.
Which Node.js versions fix the Brotli bug?
Node.js 22.23.4, 24.22.1 and 26.12.1. Node.js 20.x and older are end-of-life and get no fix, so upgrade to a supported branch.
Is my browser affected?
The advisories name Node.js, Bun, Python packages, Envoy and Istio, not browsers. Keep your browser updated anyway; it is the program that touches the most untrusted data.
Can this bug steal my crypto?
Only indirectly: if attacker code runs on a machine or server that holds private keys or seed phrases. Keep keys off internet-facing servers, use a hardware wallet for savings and install updates from official sources only.
Why is it called Node2Shell or HTTPS2Shell?
They are nicknames for the same Brotli bug: crafted compressed data sent over HTTPS can end in a remote shell on a Node.js server. Node2Shell is the name of Imperva's working exploit.
Patch your tools, keep keys offline and swap without leaving accounts behind: compare offers on /swap — for example BTC → XMR. Related: GitLab's 12-year-old RCE bug and DNS hijacking of crypto sites.
Sources: Node.js security release, Xakep, SecurityLab.