Skip to content

Brotli Vulnerability: Why Node.js, Bun and Envoy Users Should Check Their Dependencies

Key Takeaways & Executive Summary

A critical flaw in a compression library can hide inside the runtimes you trust. Here is what the Brotli vulnerability means for Node.js, Bun, and Envoy users, and how to check whether you are exposed.

You updated every npm package last week. The lockfile is clean, and the audit report is green.

And your Node.js server is still vulnerable.

The reason is simple: the flawed code is not in your packages. It sits inside the runtime itself, as a private copy of a compression library you never chose. That is the lesson of the Brotli vulnerability, and it is why dependency checks have to go deeper than package lists.

Do This Today: A 6-Step Checklist

  1. Find your runtime versions: Check Node.js, Bun, Envoy or Istio, .NET, and Python Brotli packages on servers, in containers, in CI, and in build tools.
  2. Update to a fixed version: See the table below. Move off end-of-life Node.js lines.
  3. Rebuild what bundles a runtime: Containers, compiled executables, and desktop apps keep their own copies until rebuilt.
  4. Check Python: Update the brotli and brotlicffi packages.
  5. If you cannot patch, reduce exposure: Disable Brotli decoding where possible, as covered below.
  6. Restart and verify: Confirm the running processes use the new versions.

What Brotli Is, and What Went Wrong

Brotli is a compression library from Google. It is widely used to shrink web traffic, and many programs bundle a copy of its decoder to unpack Brotli-compressed data.

Item Plain English
The flaw An out-of-bounds write: the decoder can be tricked into writing past the end of a buffer
The trigger Crafted Brotli-compressed data that the program decodes
The risk A crash, a leak of process memory, or in some setups, running attacker-chosen code
Severity 9.2 Critical (Google, CVSS 4.0). Node.js rates it High, and Red Hat rates it 8.1, Important

Who Is Affected, and the Fixed Versions

Software Affected Fixed Notes
Google Brotli 1.0.3 to 1.2.0 1.0.10, 1.1.1, 1.2.1 The upstream library
Node.js Unpatched 22.x, 24.x, 26.x 22.23.4, 24.22.1, 26.12.1 18, 20, 23, 25 are end of life and get no fix
Bun 1.0.21 up to 1.4.3 1.4.4 Rebuild compiled executables
Envoy 1.36.11, 1.37.7, 1.38.5, 1.39.2 1.36.12, 1.37.8, 1.38.6, 1.39.3, 1.40.0 Only if Brotli decompression is configured
Istio Branches using affected Envoy See the Istio advisory Only with Brotli decompression enabled
Python brotli and brotlicffi packages 1.2.1 and 1.2.1.0 Fixed on PyPI
Others .NET, PowerShell, and more Vendor updates Check each vendor

When You Are Really Exposed

The flaw is in decoding, so what matters is whether your software decompresses Brotli data that someone else controls.

You may be exposed if:

  • A Node.js app fetches content from servers you do not control and decodes Brotli responses.
  • An application uses node:zlib or Bun’s fetch to decompress Brotli.
  • An Envoy or Istio proxy is configured with the Brotli decompressor.
  • A tool or service decompresses uploaded or downloaded Brotli files.

You are generally less exposed if:

  • You only serve Brotli-compressed files to visitors, and never decode untrusted Brotli.
  • Your Envoy setup does not have Brotli decompression turned on.

Check each case against your own setup. Exposure depends on how data reaches the decoder.

How to Check Your Versions

Tool Command What to look for
Node.js node --version Below 22.23.4, 24.22.1, or 26.12.1 needs updating
Bun bun --version Below 1.4.4 needs updating
Envoy envoy --version Compare with the fixed versions, then check for the Brotli decompressor in your config
Python pip show brotli brotlicffi Below 1.2.1 (brotlicffi 1.2.1.0) needs updating

Run these inside each container or build image too, not only on your laptop. The version a container reports is the one that matters for that service.

Why This Is a Dependency Problem

  1. Copies are bundled inside runtimes: Updating your npm packages does not update the Brotli code inside Node.js or Bun.
  2. Containers freeze old versions: A base image keeps the old runtime until you rebuild it.
  3. Desktop apps carry several copies: Electron-based tools can include Brotli in both the browser engine and the embedded Node.js runtime, and fixing one does not fix the other.
  4. The fix was quiet: Reports say a fix landed in Brotli’s source in February 2026 without being marked as a security fix, so scanners that watch for security labels could have missed it.
  5. End-of-life software has no safety net: No update is coming, so you must upgrade.

A Short Timeline

Date (2026) What happened
February 27 A fix landed in Brotli’s source code, not marked as a security fix
October 21 Fixed Brotli versions and Node.js security releases were published, and Node.js disclosed the flaw
October 22 Advisories and fixes appeared for the Python Brotli packages
October 23 Bun and Envoy published advisories
October 24 to 26 Further vendors released updates, including Linux distributions, .NET, and PowerShell

If You Cannot Patch Yet

Measure Why it helps
Disable Brotli decoding where you can Removes the vulnerable code path from your traffic
Stop accepting Brotli from untrusted sources Reduces how often attacker data reaches the decoder
Use a patched container image or distribution package Gets the fix without waiting for your own upgrade
Isolate and monitor affected services Limits damage if something goes wrong

These are stop-gaps. Updating is the complete fix.

FREQUENTLY ASKED QUESTIONS

FAQs About the Brotli Vulnerability

What is CVE-2026-111497?

CVE-2026-111497 is an out-of-bounds write flaw in Google’s Brotli decoder. Crafted compressed data can corrupt memory and may lead to a crash, a leak, or code execution.

What is Node2Shell?

Node2Shell is a nickname for the Node.js side of CVE-2026-111497. The same flaw has also been called HTTP2Shell and Brotli2Shell as it was found in other software.

Which Node.js versions fix the Brotli vulnerability?

Node.js 22.23.4, 24.22.1, and 26.12.1. Node.js 18, 20, 23, and 25 are end of life and will not receive a fix, so upgrade to a supported line.

Is Bun affected by the Brotli vulnerability?

Yes. Bun versions from 1.0.21 up to 1.4.3 are affected, and Bun 1.4.4 fixes it. Rebuild any compiled executables that bundle Bun.

Is Envoy affected by the Brotli vulnerability?

Envoy is affected only if the Brotli decompressor is configured. Fixed versions include 1.40.0, 1.39.3, 1.38.6, 1.37.8, and 1.36.12. Istio is affected in the same case.

Do I need to turn off Brotli compression on my website?

Not because of this flaw. The issue is in decoding untrusted Brotli data. Serving compressed pages to visitors is different, but update any software that also decodes Brotli.

Is the Brotli vulnerability being exploited?

Researchers have demonstrated code execution on an unpatched Node.js build, and public proof-of-concept code exists. Treat unpatched, exposed systems as urgent.

Rehan Naeem

Technical Analyst & Systems Contributor