October 28, 2026

Brotli CVE-2026-111497 on CISA's KEV list: Node.js and .NET fixes by 10 November

CISA added Brotli CVE-2026-111497 to its exploited list on 27 October, due 10 November. Find where Node.js and .NET decompress Brotli, patch, ask vendors.

News

Tech

As of 28 October 2026, Brotli CVE-2026-111497 is a known-exploited vulnerability. CISA added it to its Known Exploited Vulnerabilities (KEV) catalog on 27 October with a due date of 10 November. Fixes exist for Brotli itself, for supported Node.js lines and for supported .NET releases. What nobody has published is how the exploitation works, and CISA lists ransomware use as "Unknown", so don't wait for that detail. If you run Node.js or .NET services, or pay someone who does, you have two weeks to find out where Brotli data gets decompressed and which runtime does it. For the wider run of releases we track, see our platform and language release notes.

What changed on 27 October

CISA's catalog lists the entry under Google Brotli as an "Unchecked Return Value" flaw, tagged CWE-252 and CWE-787. Its description says the bug can "corrupt adjacent decoder state memory, disclose sensitive memory contents, cause a denial of service, or potentially execute arbitrary code". CISA also notes the flaw affects an open-source third-party library that different products can bundle. That second point is the whole difficulty: you may run Brotli without ever having chosen it.

The National Vulnerability Database (NVD) record, still marked "Undergoing Analysis", adds that CISA's own SSVC assessment recorded exploitation as "active" on 23 October, four days before the KEV listing. The CVE was published on 22 October.

The due date is the deadline CISA sets for US federal agencies under Binding Operational Directive 26-04. A private company isn't bound by it. Our judgment: treat 10 November as your deadline anyway, because exploitation is confirmed and patches have been out since 21 October.

One caution on wording. The vendors describe memory corruption that can mean a crash, memory disclosure or code execution. Brotli's own release notes say the out-of-bounds write "permits remote code execution". None of that tells you remote code execution has happened in the wild, and CISA doesn't say how the bug is being used.

Who is exposed

NVD's description says Brotli "1.0.3 through 1.2.0" is affected and calls it a buffer overflow in the decoder. The fixed releases are 1.0.10, 1.1.1 and 1.2.1. NVD also lists a CVSS 4.0 score of 9.2 (critical), the score Google assigned.

RuntimeFixed in (releases published with the 21 October advisory)Exposure path
Node.js 22.x22.23.4Brotli data decompressed with node:zlib
Node.js 24.x24.22.1Same
Node.js 26.x26.12.1Same
.NET 88.0.33ASP.NET Core request decompression, HttpClient automatic response decompression, System.IO.Compression Brotli APIs
.NET 99.0.22Same
.NET 1010.0.14Same
.NET 11RC3Same

The Node.js security post, dated 21 October, rates it High. Its wording: an attacker who can supply Brotli data that an application decompresses with node:zlib "can corrupt process memory, which can lead to a crash, disclosure of process memory, or remote code execution". It doesn't say which inputs your application feeds into that call, so the question for your team is whether any code or middleware you run calls Brotli decompression on data from outside. Whether a given HTTP client or middleware does that by default isn't stated in either advisory, so check your dependencies rather than assume.

Microsoft's post of 25 October says the .NET paths are not on by default: "Request decompression and automatic response decompression are not enabled by default." Someone had to switch them on, or a library you use did. Microsoft says .NET Framework is not affected. For the others it says an unauthenticated attacker may be able to read or corrupt process memory.

If you ship a Next.js app on Node, the runtime patch is separate from framework advisories. Our write-up on which Next.js advisories hit your app covers the framework side.

Node.js lines with no fix

The Node.js previous-releases page lists Node 20, 23 and 25 as end-of-life. None appears in the fixed list, and the Node.js security post says "End-of-Life versions are always affected when a security release occurs". Treat services on those lines as exposed with no fix. The fix is a move to 22, 24 or 26, and that's a project with a date and a budget, not a hotfix. Our note on what an end-of-life Node line breaks shows how this plays out on a smaller scale.

Node 22 and 24 are LTS lines, so they're the sensible targets.

.NET and self-contained apps

Microsoft's warning is the one most teams will miss: "Installing a newer runtime on the host does not update the runtime bundled with your application." A self-contained .NET app carries its own runtime. Patching the server does nothing for it. You rebuild the app against a fixed runtime and redeploy.

How to patch Brotli CVE-2026-111497 before 10 November

1. Name one owner

Done means one named person for each of your in-house services, agency-built apps and vendor products, each with a date. If nobody can say who patches the runtime under an agency's Node service, you've found the real problem.

2. Inventory where Brotli runs

Done means a list of services with the Node.js or .NET version, whether the app is self-contained, and whether any code path decompresses Brotli. Search for node:zlib Brotli calls, ASP.NET Core request decompression settings, HttpClient automatic decompression and System.IO.Compression Brotli use. Container base images and bundled copies of the library come next, since CISA says other products can embed it.

3. Patch internet-facing systems first

Done means the fixed version is running, not just downloaded. The fixes are the Node.js releases published with the 21 October advisory (22.23.4, 24.22.1 and 26.12.1), and .NET 8.0.33, 9.0.22 and 10.0.14. .NET 11 users need RC3. For anything outside those lines, plan the upgrade rather than waiting for a backport.

4. Rebuild images and self-contained apps

Done means new images and binaries are deployed and the old ones removed. A base image pinned to an old Node tag keeps the old runtime until you rebuild it. The same goes for every self-contained .NET app.

5. Confirm what is running

Done means someone checked the runtime version on the live process, not the repository or the build file, and saved the output with the date. If an internet-facing service was unpatched from 21 October on, review it. That's our judgment, not a CISA instruction.

Questions to put to vendors and agencies

Send these in writing and ask for a written reply. A call isn't evidence.

  • Which Brotli version and which Node.js or .NET version does each product you supply to us bundle?
  • Do any of them use request decompression, node:zlib Brotli or Brotli through System.IO.Compression, and on what data?
  • When was each image or self-contained build last rebuilt, and when will the patched one ship?
  • Which of your products run on Node.js 20, 23 or 25, and what is the upgrade date?

Other runtimes and tools bundle Brotli too, and they publish their own advisories. Ask vendors about those as well. We haven't verified fix versions for any of them, so we're not listing numbers.

What this means for who owns runtime patching

The decision this week is who is accountable for runtimes across everything you run, including the services an agency or vendor operates for you. KEV puts a fixed date on that accountability, and a bundled-library flaw like this one is where an unowned estate shows up.

Decide three things by 10 November. Put a named owner on every segment. Require written answers from each supplier to the questions above. And if any service sits on Node 20, 23 or 25, approve the upgrade work now, since none of those lines is in the fixed list. The same questions feed your contractor paperwork: answering contractor security questionnaires is the next place to go. We'd keep suppliers' written answers in the same file as their security attestations. The previous KEV pattern, with the same inventory request, is in the PHP2Shell KEV plan.

FAQ

What is CVE-2026-111497?

It's a memory corruption flaw in the Brotli decoder, a compression library bundled in many products, including Node.js and .NET. NVD's description lists 1.0.3 through 1.2.0 as affected; fixed releases are 1.0.10, 1.1.1 and 1.2.1. The vendors describe outcomes from a crash to memory disclosure to code execution.

Is the Brotli vulnerability being exploited?

Yes. CISA added it to KEV on 27 October, which means exploitation is confirmed, and its SSVC assessment recorded "active" on 23 October. CISA hasn't said how it is exploited or whether ransomware groups use it.

Which Node.js versions are affected?

Node.js 26.x, 24.x and 22.x, with fixes in the releases published with the 21 October advisory (26.12.1, 24.22.1 and 22.23.4). The Node.js post says end-of-life versions are always affected when a security release occurs, and the previous-releases page lists 20, 23 and 25 as end-of-life, so treat those as exposed with no fix. Exposure arises when an application decompresses attacker-supplied Brotli data with node:zlib.

Does .NET Framework need patching?

No. Microsoft says .NET Framework is not affected. Modern .NET 8, 9, 10 and 11 are, and self-contained apps need a rebuild.

Do I need to act if I don't use Brotli on purpose?

Possibly. CISA flags this as a library that different products embed, so you can be exposed without choosing it. Inventory first, then ask your suppliers. If nothing decompresses Brotli data, you'll have a record that says so.

Sources

Share this article

Author Image

HighCircl Editorial Team

The HighCircl editorial team writes about hiring software engineers, nearshore development, and engineering team building. Our articles draw on direct experience sourcing and placing senior developers across Poland, Hungary, Slovakia, Serbia, Slovenia, Romania, and Spain — and on candid conversations with the CTOs and engineering leads who hire them.

HighCircl is a nearshore engineering network that delivers matched candidate shortlists in 72 hours. Every piece of content we publish is informed by real engagement data: actual developer rates, real hiring timelines, and what separates engineering teams that scale cleanly from those that stall.

Take Me to the Experts

Access our network of industry-leading software engineers.

Start Now