CVE-2026-111497 started as a Node.js bug, but the flaw is in Google's Brotli decoder. It reaches Python, Bun, Envoy and Istio, and your scanner may not flag it.
What's affected
Brotli versions 1.0.3 through 1.2.0 carry the flaw, and anything that bundles that decoder inherits it: Node.js and Bun, the Brotli and brotlicffi packages on PyPI, and Envoy, which puts Istio in scope when Brotli decompression is turned on. The upstream fix is in Brotli 1.0.10, 1.1.1 and 1.2.1.
Node.js rates it high, and Google's CVE record scores it 9.2 under CVSS 4.0. Researchers have shown code execution on an unmodified Node.js 24.22.0 build, though not on every attempt. No exploitation in the wild had been reported as of October 22.
It reaches you in two directions
Inbound, the risk is any service that decompresses request bodies sent with Content-Encoding: br. Express 5 and body-parser 2.x do that out of the box. A bare Node.js HTTP server does not.
Outbound is the direction most teams will miss. HTTP clients decompress responses for you: Node's built-in fetch(), and in Python, requests, urllib3 and aiohttp whenever a Brotli package is installed, plus httpx with its brotli extra. Any server you call, through a webhook or a user-supplied URL, can send the bad data back.
Your scanner may not flag it
As of October 23, advisory databases had not mapped the CVE to the Python packages, so pip-audit, Dependabot and Safety may miss them. Check each environment and container image by hand with pip show Brotli brotlicffi. Plenty of teams have Brotli installed without ever importing it.
What to patch
End-of-life Node.js lines (25.x, 23.x, 20.x and older) get no fix. If you run Envoy outside Istio, check Envoy's own release notes. Then rebuild your container images, because an image pinned to an old tag stays vulnerable.
If you can't patch today, reject Content-Encoding: br at your edge. That only covers inbound traffic. Changing what your clients accept doesn't help, since a malicious server can send Brotli anyway, so the outbound side needs the upgrade.

The takeaway
The fix itself is easy. Finding every copy of Brotli is not, because it hides in runtimes, in Python packages nobody imported on purpose, and in the proxy in front of your services. If you're not sure where yours are, a Zazmic Security Posture Assessment will find them. Talk to us.
