{"id":1215,"date":"2026-11-03T11:00:00","date_gmt":"2026-11-03T00:00:00","guid":{"rendered":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/"},"modified":"2026-11-03T20:56:10","modified_gmt":"2026-11-03T09:56:10","slug":"cve-2026-111497","status":"publish","type":"post","link":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/","title":{"rendered":"What Is CVE-2026-111497 (Node2Shell)? Brotli Risk and Fix"},"content":{"rendered":"\n<p class=\"has-pale-cyan-blue-background-color has-background wp-block-paragraph\">CVE-2026-111497, nicknamed Node2Shell or HTTP2Shell, is a memory-corruption flaw in Google&#8217;s Brotli decompression library, not in Node.js itself. Because Brotli is bundled into Node.js, .NET, Python packages, proxies and Linux distributions, the fix means finding every copy, not just one runtime.<\/p>\n\n\n\n<div class=\"wp-block-group has-background\" style=\"background-color:#f4f6f8;padding-top:28px;padding-right:32px;padding-bottom:28px;padding-left:32px\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-container-core-group-is-layout-40de7cf3 wp-block-group-is-layout-constrained\">\n\n<p class=\"wp-block-paragraph\"><strong>Security advisory<\/strong> \u00b7 Written in plain English, with the technical detail and the fix. Checked against the vendor and national CERT advisories at the time of writing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Other recent advisories<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><a href=\"https:\/\/catharsis.net.au\/blog\/cve-2026-109618-cve-2026-109619-php\/\" target=\"_blank\" rel=\"noreferrer noopener\">What Are CVE-2026-109618 and CVE-2026-109619? PHP Flaws Explained<\/a><\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"font-size:16px\">All advisories: <a href=\"https:\/\/catharsis.net.au\/blog\/category\/cve-exploits\/\" target=\"_blank\" rel=\"noreferrer noopener\">CVE &amp; Exploits<\/a><\/p>\n\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group has-background\" style=\"background-color:#f4f6f8;padding-top:28px;padding-right:32px;padding-bottom:28px;padding-left:32px\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-container-core-group-is-layout-40de7cf3 wp-block-group-is-layout-constrained\">\n\n<h3 class=\"wp-block-heading\">TL;DR<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>What it is:<\/strong> CVE-2026-111497 is an out-of-bounds write in the decoder of Google&#8217;s Brotli compression library. It is nicknamed &quot;Node2Shell&quot; or &quot;HTTP2Shell&quot;, but it is not a Node.js-only bug and it has nothing to do with the HTTP\/2 protocol. Worry if your software decompresses Brotli data an outsider can supply. Many web apps do.<\/li>\n\n\n<li><strong>Severity:<\/strong> Google rates it 9.2 (CVSS v4.0, Critical) and NVD rates it 9.8 (CVSS v3.1, Critical). Node.js calls it High and Microsoft scores its .NET exposure at 8.1.<\/li>\n\n\n<li><strong>Exploitation:<\/strong> CISA added it to the Known Exploited Vulnerabilities (KEV) catalogue on 27 October 2026. Public proofs of concept have shown code execution against official Node.js builds.<\/li>\n\n\n<li><strong>Fix:<\/strong> Update every copy (Brotli, Node.js, .NET, Python packages, Bun) to the fixed versions below, then rebuild containers and self-contained apps.<\/li>\n\n\n<li><strong>The catch:<\/strong> Brotli is bundled into many products. Patching the operating system&#8217;s copy does not fix a runtime or application that ships its own.<\/li>\n\n<\/ul>\n\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group has-background\" style=\"background-color:#f4f6f8;padding-top:28px;padding-right:32px;padding-bottom:28px;padding-left:32px\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-container-core-group-is-layout-40de7cf3 wp-block-group-is-layout-constrained\">\n\n<h3 class=\"wp-block-heading\">In this post<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><a href=\"#in-plain-english\">In plain English<\/a><\/li>\n\n\n<li><a href=\"#who-is-affected\">Who is affected?<\/a><\/li>\n\n\n<li><a href=\"#technical-analysis\">Technical analysis<\/a><\/li>\n\n\n<li><a href=\"#is-it-being-exploited\">Is it being exploited?<\/a><\/li>\n\n\n<li><a href=\"#how-to-fix-it\">How to fix it<\/a><\/li>\n\n\n<li><a href=\"#what-this-means-for-businesses\">What this means for businesses<\/a><\/li>\n\n\n<li><a href=\"#key-takeaways\">Key takeaways<\/a><\/li>\n\n\n<li><a href=\"#sources\">Sources<\/a><\/li>\n\n<\/ul>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"in-plain-english\">In plain English<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Brotli is a compression format created by Google. Web servers use it to shrink pages and API responses, and browsers and HTTP clients expand them on arrival. Its decoder is copied into a long list of software, including the Node.js and Bun runtimes, Microsoft .NET, Python libraries, the Envoy and Istio proxies, several databases and some industrial products.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The flaw is in the decoder. A crafted Brotli stream can make it write past the end of a small internal buffer and corrupt nearby memory. According to the CVE record, the result can be a crash, leaked memory contents or, in some conditions, the attacker&#8217;s code running on the server. No login or user interaction is needed, only a way to get the crafted data to the decoder.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is the important qualifier. <strong>You are at risk only if something in your stack decompresses Brotli data that an attacker can influence.<\/strong> Typical examples:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>A web application or API that accepts request bodies sent with <code>Content-Encoding: br<\/code> and decompresses them. Some frameworks do this automatically.<\/li>\n\n\n<li>An application that fetches content from URLs it does not control, such as webhooks, link previews or user-supplied URLs, with an HTTP client that automatically decompresses Brotli responses.<\/li>\n\n\n<li>Code that passes untrusted files or uploads straight to a Brotli decompression function.<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A website that only <em>sends<\/em> Brotli-compressed pages to browsers is not, on that basis alone, exposed on the server side.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Where the nicknames come from<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">None of the nicknames comes from the vendors, which use only the CVE number. &quot;Node2Shell&quot; took hold after researchers at Imperva showed code execution against an official Node.js container image on 22 October 2026. Aikido&#8217;s follow-up research renamed it &quot;HTTP2Shell&quot; because the bug sits in a library shared by many HTTP clients and servers. The &quot;HTTP2&quot; does <strong>not<\/strong> mean the HTTP\/2 protocol, and whether HTTP\/2 is enabled makes no difference. Canada&#8217;s Cyber Centre calls it &quot;Broccoli2Shell&quot;. All of these names refer to the same CVE.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"who-is-affected\">Who is affected?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The root cause is in Google Brotli 1.0.3 through 1.2.0, code that first shipped in 2018. The table covers components with official fixed versions at the time of writing.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th>Component<\/th>\n<th>Vulnerable<\/th>\n<th>Fixed<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Google Brotli 1.0.x<\/td>\n<td>1.0.3 to 1.0.9<\/td>\n<td>1.0.10<\/td>\n<\/tr>\n<tr>\n<td>Google Brotli 1.1.x<\/td>\n<td>1.1.0<\/td>\n<td>1.1.1<\/td>\n<\/tr>\n<tr>\n<td>Google Brotli 1.2.x<\/td>\n<td>1.2.0<\/td>\n<td>1.2.1<\/td>\n<\/tr>\n<tr>\n<td>Node.js 26.x (LTS)<\/td>\n<td>before 26.12.1<\/td>\n<td>26.12.1<\/td>\n<\/tr>\n<tr>\n<td>Node.js 24.x (LTS)<\/td>\n<td>before 24.22.1<\/td>\n<td>24.22.1<\/td>\n<\/tr>\n<tr>\n<td>Node.js 22.x (LTS)<\/td>\n<td>before 22.23.4<\/td>\n<td>22.23.4<\/td>\n<\/tr>\n<tr>\n<td>Node.js 25.x, 23.x, 20.x and older<\/td>\n<td>all<\/td>\n<td><strong>No fix: end of life<\/strong><\/td>\n<\/tr>\n<tr>\n<td>.NET 10<\/td>\n<td>before 10.0.14<\/td>\n<td>10.0.14 runtime (SDK 10.0.114 \/ 10.0.403)<\/td>\n<\/tr>\n<tr>\n<td>.NET 9<\/td>\n<td>before 9.0.22<\/td>\n<td>9.0.22 runtime (SDK 9.0.123 \/ 9.0.320)<\/td>\n<\/tr>\n<tr>\n<td>.NET 8<\/td>\n<td>before 8.0.33<\/td>\n<td>8.0.33 runtime (SDK 8.0.133 \/ 8.0.427)<\/td>\n<\/tr>\n<tr>\n<td>Python <code>brotli<\/code> (PyPI)<\/td>\n<td>1.0.3 to before 1.2.1<\/td>\n<td>1.2.1<\/td>\n<\/tr>\n<tr>\n<td>Python <code>brotlicffi<\/code> (PyPI)<\/td>\n<td>1.0.3 to before 1.2.1.0<\/td>\n<td>1.2.1.0<\/td>\n<\/tr>\n<tr>\n<td>Go <code>andybalholm\/brotli<\/code><\/td>\n<td>before 1.2.7<\/td>\n<td>1.2.7<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A few points about the table:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>End-of-life Node.js.<\/strong> The Node.js project states that end-of-life versions &quot;are always affected when a security release occurs&quot;. Node.js 20 reached end of life on 30 April 2026. The only fix for 20, 23, 25 and older is a supported line.<\/li>\n\n\n<li><strong>.NET.<\/strong> Microsoft&#8217;s advisory says .NET Framework is not affected. In .NET, exposure comes through ASP.NET Core request decompression with Brotli enabled (off by default), <code>HttpClient<\/code> automatic decompression that includes Brotli (off by default), or direct use of <code>BrotliStream<\/code> or <code>BrotliDecoder<\/code> on untrusted data.<\/li>\n\n\n<li><strong>Other products.<\/strong> NVD also lists Bun (fixed in 1.4.4), Envoy, Istio, edk2, woff2, DuckDB, ClickHouse, Apache Arrow, p7zip and 7-Zip-ZSTD, and Siemens advisories (SSA-898633, SSA-443410, SSA-045512) cover several Industrial Edge and RUGGEDCOM products. Check each vendor&#8217;s advisory for its fixed version.<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Linux distributions<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ubuntu has fixed <code>brotli<\/code> on all supported releases (Ubuntu Pro for 20.04 and 18.04). Debian has fixed it in bookworm (1.0.9-2+deb12u1, DLA-4855-1) and trixie (1.1.0-2+deb13u1), but its tracker still listed the packaged <code>nodejs<\/code> builds (18 in bookworm, 20 in trixie, both end-of-life upstream) as vulnerable with no fix when we checked. Updating the system <code>brotli<\/code> package does <strong>not<\/strong> fix a runtime that compiles in its own copy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Containers, bundled runtimes and hosted platforms<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This is where most of the work lies. Node.js, Bun and .NET bundle their own decoder, as do Electron-style desktop apps, single-file executables (such as Bun&#8217;s <code>--compile<\/code> output) and .NET self-contained or NativeAOT builds. Microsoft notes that updating the shared runtime &quot;alone does not replace a decoder already linked into a NativeAOT executable&quot;. Container images on an older base tag stay vulnerable until rebuilt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On serverless and platform-as-a-service hosting, the provider controls the runtime. Check its security notices and redeploy if asked. Some providers added firewall rules for inbound Brotli request bodies, but those don&#8217;t protect your application when it fetches Brotli content from elsewhere.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"technical-analysis\">Technical analysis<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The CVE record classifies the bug as <strong>CWE-787 (Out-of-bounds Write)<\/strong> with <strong>CWE-252 (Unchecked Return Value)<\/strong> as the underlying weakness. CISA&#8217;s catalogue entry names it a &quot;Google Brotli Unchecked Return Value Vulnerability&quot; (<a href=\"https:\/\/www.cisa.gov\/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-111497\" target=\"_blank\" rel=\"noreferrer noopener\">CISA KEV<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/nodejs.org\/en\/blog\/vulnerability\/october-2026-security-releases\" target=\"_blank\" rel=\"noreferrer noopener\">Node.js advisory<\/a> gives the clearest description. An invalid &quot;block switch&quot; in the stream was reported as a temporary need for more input rather than a format error, so the streaming decoder kept appending input bytes to an eight-byte internal buffer and wrote past its end, into decoder state. The upstream fix treats this condition as a hard error.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Public reporting agrees on several conditions for exploitation:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>The attacker must reach a decoder.<\/strong> A bare Node.js HTTP server does not decompress request bodies by itself. Middleware that honours <code>Content-Encoding: br<\/code> does, for example Express 5 with body-parser 2.x, according to <a href=\"https:\/\/www.aikido.dev\/blog\/node2shell-nodejs-brotli-rce-cve-2026-111497\" target=\"_blank\" rel=\"noreferrer noopener\">Aikido&#8217;s analysis<\/a>. So do <code>fetch()<\/code> calls that automatically decompress Brotli responses.<\/li>\n\n\n<li><strong>Crashes are easy and code execution is harder.<\/strong> Researchers have shown code execution on unmodified official Node.js builds on arm64 and x86-64, but describe it as build-specific and unreliable (<a href=\"https:\/\/ellio.tech\/en\/blog\/node2shell-cve-2026-111497-rce-on-stock-nodejs-builds\/\" target=\"_blank\" rel=\"noreferrer noopener\">ELLIO<\/a>). Failed attempts usually crash the process, a denial-of-service risk that can also write secrets to core dumps.<\/li>\n\n\n<li><strong>The fix was public early.<\/strong> The upstream change was committed publicly on 27 February 2026, months before the releases on 21 October, which helps explain how fast proofs of concept appeared.<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">CVSS breakdown<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th>Source<\/th>\n<th>Version<\/th>\n<th>Score<\/th>\n<th>Vector<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Google (CNA)<\/td>\n<td>4.0<\/td>\n<td>9.2 Critical<\/td>\n<td><code>AV:N\/AC:L\/AT:P\/PR:N\/UI:N\/VC:H\/VI:H\/VA:H\/SC:N\/SI:N\/SA:N<\/code><\/td>\n<\/tr>\n<tr>\n<td>NVD<\/td>\n<td>3.1<\/td>\n<td>9.8 Critical<\/td>\n<td><code>AV:N\/AC:L\/PR:N\/UI:N\/S:U\/C:H\/I:H\/A:H<\/code><\/td>\n<\/tr>\n<tr>\n<td>Microsoft (.NET)<\/td>\n<td>3.1<\/td>\n<td>8.1 High<\/td>\n<td>per Microsoft&#8217;s advisory<\/td>\n<\/tr>\n<tr>\n<td>Node.js<\/td>\n<td>n\/a<\/td>\n<td>High<\/td>\n<td>qualitative rating<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>AV:N<\/strong> means reachable over a network, <strong>AC:L<\/strong> low complexity, <strong>PR:N<\/strong> and <strong>UI:N<\/strong> no account or user action, and <strong>VC\/VI\/VA:H<\/strong> high impact on confidentiality, integrity and availability. Google&#8217;s v4.0 vector adds <strong>AT:P<\/strong> (&quot;attack requirements: present&quot;): the target must actually decompress attacker-supplied Brotli. That condition is why the vendor ratings sit below NVD&#8217;s 9.8. Treat your product vendor&#8217;s guidance as authoritative and NVD&#8217;s score as the worst case.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"is-it-being-exploited\">Is it being exploited?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here is what is publicly confirmed as of 3 November 2026:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>21 October 2026:<\/strong> Google released Brotli 1.0.10, 1.1.1 and 1.2.1, and Node.js released 22.23.4, 24.22.1 and 26.12.1.<\/li>\n\n\n<li><strong>22 October 2026:<\/strong> The CVE was published. Imperva researchers showed code execution on the official Node.js 24.22.0 container image (Linux arm64), and the patched 24.22.1 rejected the same input. Bun released 1.4.4 with the fixed decoder.<\/li>\n\n\n<li><strong>23 October 2026:<\/strong> Debian issued DLA-4855-1 for <code>brotli<\/code> in bookworm.<\/li>\n\n\n<li><strong>25 October 2026:<\/strong> Microsoft published its .NET advisory and updates. ELLIO published code execution on stock x86-64 Node.js builds.<\/li>\n\n\n<li><strong>26 October 2026:<\/strong> ELLIO reported that its internet sensors had seen scanning for hosts that decompress Brotli request bodies, followed by exploit traffic carrying a public exploit.<\/li>\n\n\n<li><strong>27 October 2026:<\/strong> CISA added CVE-2026-111497 to the KEV catalogue, with a remediation due date of 10 November 2026 for US federal agencies. CISA&#8217;s enrichment data on the CVE record marks exploitation as &quot;active&quot;.<\/li>\n\n\n<li><strong>28 October 2026:<\/strong> Canada&#8217;s Cyber Centre issued alert AL26-027.<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">What is <strong>not<\/strong> publicly known: CISA has named no threat actor, victims or confirmed compromises, and lists ransomware use as &quot;Unknown&quot;. ELLIO reported that the attack chain it captured did not achieve code execution in its own tests. We found no ASD&#8217;s ACSC (cyber.gov.au) or UK NCSC publication specific to this CVE at the time of writing. That does not lower the priority: a KEV listing is strong evidence someone is trying to use the bug.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-to-fix-it\">How to fix it<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>\n<p><strong>Find every copy of the Brotli decoder.<\/strong> Check language runtimes first, then libraries, then everything else:<\/p>\n<ul>\n<li><strong>Node.js:<\/strong> run <code>node -v<\/code>. If you use Bun, run <code>bun --version<\/code>.<\/li>\n<li><strong>.NET:<\/strong> run <code>dotnet --list-runtimes<\/code> and <code>dotnet --list-sdks<\/code>.<\/li>\n<li><strong>Python:<\/strong> run <code>pip show brotli brotlicffi<\/code> and search lockfiles (<code>requirements.txt<\/code>, <code>poetry.lock<\/code>, <code>uv.lock<\/code>) for <code>brotli<\/code>, <code>brotlicffi<\/code> and extras such as <code>httpx[brotli]<\/code> or <code>urllib3[brotli]<\/code>.<\/li>\n<li><strong>Go:<\/strong> run <code>go list -m all | grep brotli<\/code>.<\/li>\n<li><strong>Linux packages:<\/strong> use <code>dpkg -l | grep brotli<\/code> or <code>rpm -qa | grep brotli<\/code>.<\/li>\n<li><strong>Containers:<\/strong> scan your images and registries with your container scanner. If you keep SBOMs, query them for <code>brotli<\/code> and the runtimes listed above.<\/li>\n<\/ul>\n<p><strong>Check:<\/strong> you have a list of hosts, images, functions and desktop apps, each with its runtime or library version and whether it is internet-facing.<\/p>\n<\/li>\n\n\n<li>\n<p><strong>Prioritise what decompresses untrusted Brotli:<\/strong> request decompression middleware, clients that fetch user-supplied URLs, webhook receivers and file processing.\n<strong>Check:<\/strong> each internet-facing service is marked &quot;decodes untrusted Brotli: yes\/no\/unknown&quot;. Treat &quot;unknown&quot; as yes.<\/p>\n<\/li>\n\n\n<li>\n<p><strong>Upgrade to the fixed versions in the table above<\/strong> (Bun: 1.4.4), apply your distribution&#8217;s patched <code>brotli<\/code> package, and move Node.js 20, 23, 25 or older to a supported line.\n<strong>Check:<\/strong> the version command from step 1 now reports a fixed version on every system.<\/p>\n<\/li>\n\n\n<li>\n<p><strong>Rebuild and redeploy what bundles its own copy:<\/strong> container images (from an updated base image, not a cached layer), .NET self-contained and NativeAOT apps (update the SDK, then republish), Bun compiled executables and serverless packages.\n<strong>Check:<\/strong> a fresh image scan shows no vulnerable Brotli, Node.js, .NET or Python package, and the running containers use the new image digest.<\/p>\n<\/li>\n\n\n<li>\n<p><strong>Restart services.<\/strong> A patched library on disk does nothing until the process using it reloads.\n<strong>Check:<\/strong> process start times are later than the patch time, and health checks pass.<\/p>\n<\/li>\n\n\n<li>\n<p><strong>Where you cannot patch yet, use official interim mitigations.<\/strong> Node.js lists no workaround. Microsoft advises removing Brotli from request or <code>HttpClient<\/code> decompression where you already use it (and not adding new decompression settings). Canada&#8217;s Cyber Centre advises not processing Brotli from untrusted sources. Rejecting inbound <code>Content-Encoding: br<\/code> at a proxy or web application firewall is a stopgap that does not protect outbound fetches.\n<strong>Check:<\/strong> a test request with <code>Content-Encoding: br<\/code> sent to the protected endpoint is rejected, and the exception is logged with an end date.<\/p>\n<\/li>\n\n\n<li>\n<p><strong>Monitor and confirm.<\/strong> Watch for unexpected crashes, core dumps (treat them as sensitive), unusual child processes or outbound connections from web workers.\n<strong>Check:<\/strong> alerts exist for repeated web process crashes, and any unexplained crash loops since 21 October have been investigated.<\/p>\n<\/li>\n\n<\/ol>\n\n\n\n<div class=\"wp-block-group has-pale-cyan-blue-background-color has-background\" style=\"padding-top:28px;padding-right:32px;padding-bottom:28px;padding-left:32px;margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-container-core-group-is-layout-40de7cf3 wp-block-group-is-layout-constrained\">\n\n<p class=\"wp-block-paragraph\"><strong>Does your segmentation actually hold?<\/strong> An internal penetration test checks whether someone on one VLAN can reach what they shouldn&#8217;t, and an external network test shows what an attacker can see from the internet.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/catharsis.net.au\/pentesting-services\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=cve-advisories&amp;utm_content=cve-2026-111497-pentest\" target=\"_blank\" rel=\"noreferrer noopener\">See penetration testing<\/a><\/div>\n\n<\/div>\n\n<\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-this-means-for-businesses\">What this means for businesses<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>If you build or run web applications<\/strong>, this is a supply-chain patch, not a single upgrade. Developers may have updated Node.js on their laptops while production still builds from an old base image, a Python worker pulls Brotli in through an optional extra, and the proxy carries its own copy. If you cannot quickly list where Brotli runs, that gap is worth fixing beyond this one CVE.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>If you use hosted platforms or SaaS<\/strong>, the provider owns the runtime but you often own the redeploy. Confirm the runtime version your apps use. For SaaS, asking &quot;Are you affected by CVE-2026-111497, and when did you patch?&quot; is reasonable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>If vendors build or host software for you<\/strong>, ask for evidence: versions before and after, images rebuilt, and the date. Agencies often run many client sites on similar stacks, so one missed base image can expose several.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>For operational technology and appliances<\/strong>, the Siemens advisories show Brotli turns up in unexpected places. Ask equipment vendors directly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, this is a good test of your patch process. The bug went from coordinated release to CISA&#8217;s exploited list within a week. Teams that could answer &quot;where do we run this?&quot; within a day were far better placed.<\/p>\n\n\n\n<div class=\"wp-block-group has-pale-cyan-blue-background-color has-background\" style=\"padding-top:28px;padding-right:32px;padding-bottom:28px;padding-left:32px;margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-container-core-group-is-layout-40de7cf3 wp-block-group-is-layout-constrained\">\n\n<p class=\"wp-block-paragraph\"><strong>Not sure how exposed your network is?<\/strong> Ask for a free security health check. We look at your setup and tell you, in plain English, what to fix first. Complimentary, at our discretion.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/catharsis.net.au\/contact-us\/?type=contact&amp;service=security-health-check&amp;utm_source=blog&amp;utm_medium=article&amp;utm_campaign=cve-advisories&amp;utm_content=cve-2026-111497-health-check\" target=\"_blank\" rel=\"noreferrer noopener\">Book a free health check<\/a><\/div>\n\n<\/div>\n\n<\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"key-takeaways\">Key takeaways<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>CVE-2026-111497 is a Google Brotli decoder flaw that can corrupt memory and may allow remote code execution. &quot;Node2Shell&quot; and &quot;HTTP2Shell&quot; are informal nicknames, and the bug is unrelated to the HTTP\/2 protocol.<\/li>\n\n\n<li>You are exposed if anything you run decompresses Brotli data an attacker can supply, such as request bodies, fetched responses or uploaded files.<\/li>\n\n\n<li>CISA lists it as known exploited (added 27 October 2026), and public proofs of concept exist. Treat it as urgent for internet-facing services.<\/li>\n\n\n<li>Patch every copy to a fixed version and retire end-of-life Node.js lines.<\/li>\n\n\n<li>Rebuild containers and self-contained apps, then restart services. Updating the OS package alone is not enough.<\/li>\n\n\n<li>Blocking inbound Brotli request bodies is a stopgap only. It does not protect outbound fetches.<\/li>\n\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sources\">Sources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><a href=\"https:\/\/www.cve.org\/CVERecord?id=CVE-2026-111497\" target=\"_blank\" rel=\"noreferrer noopener\">CVE-2026-111497 record (CVE.org)<\/a><\/li>\n\n\n<li><a href=\"https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2026-111497\" target=\"_blank\" rel=\"noreferrer noopener\">NVD: CVE-2026-111497<\/a><\/li>\n\n\n<li><a href=\"https:\/\/nodejs.org\/en\/blog\/vulnerability\/october-2026-security-releases\" target=\"_blank\" rel=\"noreferrer noopener\">Node.js October 2026 security releases<\/a><\/li>\n\n\n<li><a href=\"https:\/\/github.com\/nodejs\/release#release-schedule\" target=\"_blank\" rel=\"noreferrer noopener\">Node.js release schedule<\/a><\/li>\n\n\n<li><a href=\"https:\/\/github.com\/google\/brotli\/releases\/tag\/v1.2.1\" target=\"_blank\" rel=\"noreferrer noopener\">Google Brotli v1.2.1 release<\/a><\/li>\n\n\n<li><a href=\"https:\/\/github.com\/advisories\/GHSA-9v8h-qqgm-4m35\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub Advisory GHSA-9v8h-qqgm-4m35<\/a><\/li>\n\n\n<li><a href=\"https:\/\/github.com\/dotnet\/announcements\/issues\/494\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft .NET security advisory (dotnet\/announcements #494)<\/a><\/li>\n\n\n<li><a href=\"https:\/\/www.cisa.gov\/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-111497\" target=\"_blank\" rel=\"noreferrer noopener\">CISA Known Exploited Vulnerabilities catalogue entry<\/a><\/li>\n\n\n<li><a href=\"https:\/\/www.cyber.gc.ca\/en\/alerts-advisories\/al26-027-critical-vulnerability-impacting-google-brotli-cve-2026-111497\" target=\"_blank\" rel=\"noreferrer noopener\">Canadian Centre for Cyber Security alert AL26-027<\/a><\/li>\n\n\n<li><a href=\"https:\/\/security-tracker.debian.org\/tracker\/CVE-2026-111497\" target=\"_blank\" rel=\"noreferrer noopener\">Debian security tracker<\/a> and <a href=\"https:\/\/lists.debian.org\/debian-lts-announce\/2026\/10\/msg00049.html\" target=\"_blank\" rel=\"noreferrer noopener\">DLA-4855-1<\/a><\/li>\n\n\n<li><a href=\"https:\/\/ubuntu.com\/security\/CVE-2026-111497\" target=\"_blank\" rel=\"noreferrer noopener\">Ubuntu CVE entry<\/a><\/li>\n\n\n<li><a href=\"https:\/\/www.aikido.dev\/blog\/node2shell-nodejs-brotli-rce-cve-2026-111497\" target=\"_blank\" rel=\"noreferrer noopener\">Aikido research post<\/a> and <a href=\"https:\/\/ellio.tech\/en\/blog\/node2shell-cve-2026-111497-rce-on-stock-nodejs-builds\/\" target=\"_blank\" rel=\"noreferrer noopener\">ELLIO research post<\/a><\/li>\n\n<\/ul>\n\n\n\n<div class=\"wp-block-group has-light-green-cyan-background-color has-background\" style=\"padding-top:28px;padding-right:32px;padding-bottom:28px;padding-left:32px;margin-top:40px;margin-bottom:32px\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-container-core-group-is-layout-40de7cf3 wp-block-group-is-layout-constrained\">\n\n<h2 class=\"wp-block-heading\">Not sure whether you are exposed?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Catharsis Cyber Security is a Sydney cyber security company. We help organisations find what they run, patch what matters first, and check that the fix holds.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/catharsis.net.au\/contact-us\/?type=contact&amp;service=security-health-check&amp;utm_source=blog&amp;utm_medium=article&amp;utm_campaign=cve-advisories&amp;utm_content=cve-2026-111497-contact\" target=\"_blank\" rel=\"noreferrer noopener\">Book a free health check<\/a><\/div>\n\n\n<div class=\"wp-block-button is-style-outline is-style-outline--1\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/catharsis.net.au\/vulnerability-management\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=cve-advisories&amp;utm_content=cve-2026-111497-end-vuln\" target=\"_blank\" rel=\"noreferrer noopener\">Vulnerability management<\/a><\/div>\n\n\n<div class=\"wp-block-button is-style-outline is-style-outline--2\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/catharsis.net.au\/pentesting-services\/?utm_source=blog&amp;utm_medium=article&amp;utm_campaign=cve-advisories&amp;utm_content=cve-2026-111497-end-pentest\" target=\"_blank\" rel=\"noreferrer noopener\">Penetration testing<\/a><\/div>\n\n<\/div>\n\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>CVE-2026-111497, nicknamed Node2Shell or HTTP2Shell, is a memory-corruption flaw in Google&#8217;s Brotli decompression library, not in Node.js itself. Because Brotli is bundled into Node.js, .NET, Python packages, proxies and Linux distributions, the fix means finding every copy, not just one runtime.<\/p>\n","protected":false},"author":2,"featured_media":1214,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[36],"tags":[154,153,155,152,151],"class_list":["post-1215","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cve-exploits","tag-brotli","tag-cve-2026-111497","tag-node-js","tag-patching","tag-vulnerability"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>What Is CVE-2026-111497 (Node2Shell)? Brotli Risk and Fix - Catharsis | Blog<\/title>\n<meta name=\"description\" content=\"CVE-2026-111497 (Node2Shell, HTTP2Shell) is a Brotli decoder flaw in Node.js, .NET, Python and more. Who is affected, exploit status and how to patch.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What Is CVE-2026-111497 (Node2Shell)? Brotli Risk and Fix - Catharsis | Blog\" \/>\n<meta property=\"og:description\" content=\"CVE-2026-111497 (Node2Shell, HTTP2Shell) is a Brotli decoder flaw in Node.js, .NET, Python and more. Who is affected, exploit status and how to patch.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/\" \/>\n<meta property=\"og:site_name\" content=\"Catharsis | Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-03T00:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-03T09:56:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/catharsis.net.au\/blog\/wp-content\/uploads\/2026\/11\/cve-2026-111497.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sajal Jain\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sajal Jain\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/cve-2026-111497\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/cve-2026-111497\\\/\"},\"author\":{\"name\":\"Sajal Jain\",\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/#\\\/schema\\\/person\\\/f0826efb92a7aaf8d46b24715990e099\"},\"headline\":\"What Is CVE-2026-111497 (Node2Shell)? Brotli Risk and Fix\",\"datePublished\":\"2026-11-03T00:00:00+00:00\",\"dateModified\":\"2026-11-03T09:56:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/cve-2026-111497\\\/\"},\"wordCount\":2503,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/cve-2026-111497\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/cve-2026-111497.jpg\",\"keywords\":[\"Brotli\",\"CVE-2026-111497\",\"Node.js\",\"patching\",\"vulnerability\"],\"articleSection\":[\"CVE &amp; Exploits\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/cve-2026-111497\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/cve-2026-111497\\\/\",\"url\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/cve-2026-111497\\\/\",\"name\":\"What Is CVE-2026-111497 (Node2Shell)? Brotli Risk and Fix - Catharsis | Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/cve-2026-111497\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/cve-2026-111497\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/cve-2026-111497.jpg\",\"datePublished\":\"2026-11-03T00:00:00+00:00\",\"dateModified\":\"2026-11-03T09:56:10+00:00\",\"description\":\"CVE-2026-111497 (Node2Shell, HTTP2Shell) is a Brotli decoder flaw in Node.js, .NET, Python and more. Who is affected, exploit status and how to patch.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/cve-2026-111497\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/cve-2026-111497\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/cve-2026-111497\\\/#primaryimage\",\"url\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/cve-2026-111497.jpg\",\"contentUrl\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/cve-2026-111497.jpg\",\"width\":1280,\"height\":720,\"caption\":\"Security advisory card: CVE-2026-111497 in the Brotli decoder\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/cve-2026-111497\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What Is CVE-2026-111497 (Node2Shell)? Brotli Risk and Fix\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/\",\"name\":\"Catharsis | Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/#organization\",\"name\":\"Catharsis | Blog\",\"url\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/catharsis_au.jpg\",\"contentUrl\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/catharsis_au.jpg\",\"width\":215,\"height\":60,\"caption\":\"Catharsis | Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/#\\\/schema\\\/person\\\/f0826efb92a7aaf8d46b24715990e099\",\"name\":\"Sajal Jain\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/Sajal-copy-96x96.jpg\",\"url\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/Sajal-copy-96x96.jpg\",\"contentUrl\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/Sajal-copy-96x96.jpg\",\"caption\":\"Sajal Jain\"},\"description\":\"Cyber Security Enthusiast | OSCP | CEH | CHFI | CNSS | Master of IT Security &amp; Master of IT Management\",\"url\":\"https:\\\/\\\/catharsis.net.au\\\/blog\\\/author\\\/sajal-jain\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What Is CVE-2026-111497 (Node2Shell)? Brotli Risk and Fix - Catharsis | Blog","description":"CVE-2026-111497 (Node2Shell, HTTP2Shell) is a Brotli decoder flaw in Node.js, .NET, Python and more. Who is affected, exploit status and how to patch.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/","og_locale":"en_US","og_type":"article","og_title":"What Is CVE-2026-111497 (Node2Shell)? Brotli Risk and Fix - Catharsis | Blog","og_description":"CVE-2026-111497 (Node2Shell, HTTP2Shell) is a Brotli decoder flaw in Node.js, .NET, Python and more. Who is affected, exploit status and how to patch.","og_url":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/","og_site_name":"Catharsis | Blog","article_published_time":"2026-11-03T00:00:00+00:00","article_modified_time":"2026-11-03T09:56:10+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/catharsis.net.au\/blog\/wp-content\/uploads\/2026\/11\/cve-2026-111497.jpg","type":"image\/jpeg"}],"author":"Sajal Jain","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Sajal Jain","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/#article","isPartOf":{"@id":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/"},"author":{"name":"Sajal Jain","@id":"https:\/\/catharsis.net.au\/blog\/#\/schema\/person\/f0826efb92a7aaf8d46b24715990e099"},"headline":"What Is CVE-2026-111497 (Node2Shell)? Brotli Risk and Fix","datePublished":"2026-11-03T00:00:00+00:00","dateModified":"2026-11-03T09:56:10+00:00","mainEntityOfPage":{"@id":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/"},"wordCount":2503,"commentCount":0,"publisher":{"@id":"https:\/\/catharsis.net.au\/blog\/#organization"},"image":{"@id":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/#primaryimage"},"thumbnailUrl":"https:\/\/catharsis.net.au\/blog\/wp-content\/uploads\/2026\/11\/cve-2026-111497.jpg","keywords":["Brotli","CVE-2026-111497","Node.js","patching","vulnerability"],"articleSection":["CVE &amp; Exploits"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/","url":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/","name":"What Is CVE-2026-111497 (Node2Shell)? Brotli Risk and Fix - Catharsis | Blog","isPartOf":{"@id":"https:\/\/catharsis.net.au\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/#primaryimage"},"image":{"@id":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/#primaryimage"},"thumbnailUrl":"https:\/\/catharsis.net.au\/blog\/wp-content\/uploads\/2026\/11\/cve-2026-111497.jpg","datePublished":"2026-11-03T00:00:00+00:00","dateModified":"2026-11-03T09:56:10+00:00","description":"CVE-2026-111497 (Node2Shell, HTTP2Shell) is a Brotli decoder flaw in Node.js, .NET, Python and more. Who is affected, exploit status and how to patch.","breadcrumb":{"@id":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/#primaryimage","url":"https:\/\/catharsis.net.au\/blog\/wp-content\/uploads\/2026\/11\/cve-2026-111497.jpg","contentUrl":"https:\/\/catharsis.net.au\/blog\/wp-content\/uploads\/2026\/11\/cve-2026-111497.jpg","width":1280,"height":720,"caption":"Security advisory card: CVE-2026-111497 in the Brotli decoder"},{"@type":"BreadcrumbList","@id":"https:\/\/catharsis.net.au\/blog\/cve-2026-111497\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/catharsis.net.au\/blog\/"},{"@type":"ListItem","position":2,"name":"What Is CVE-2026-111497 (Node2Shell)? Brotli Risk and Fix"}]},{"@type":"WebSite","@id":"https:\/\/catharsis.net.au\/blog\/#website","url":"https:\/\/catharsis.net.au\/blog\/","name":"Catharsis | Blog","description":"","publisher":{"@id":"https:\/\/catharsis.net.au\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/catharsis.net.au\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/catharsis.net.au\/blog\/#organization","name":"Catharsis | Blog","url":"https:\/\/catharsis.net.au\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/catharsis.net.au\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/catharsis.net.au\/blog\/wp-content\/uploads\/2019\/01\/catharsis_au.jpg","contentUrl":"https:\/\/catharsis.net.au\/blog\/wp-content\/uploads\/2019\/01\/catharsis_au.jpg","width":215,"height":60,"caption":"Catharsis | Blog"},"image":{"@id":"https:\/\/catharsis.net.au\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/catharsis.net.au\/blog\/#\/schema\/person\/f0826efb92a7aaf8d46b24715990e099","name":"Sajal Jain","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/catharsis.net.au\/blog\/wp-content\/uploads\/2019\/01\/Sajal-copy-96x96.jpg","url":"https:\/\/catharsis.net.au\/blog\/wp-content\/uploads\/2019\/01\/Sajal-copy-96x96.jpg","contentUrl":"https:\/\/catharsis.net.au\/blog\/wp-content\/uploads\/2019\/01\/Sajal-copy-96x96.jpg","caption":"Sajal Jain"},"description":"Cyber Security Enthusiast | OSCP | CEH | CHFI | CNSS | Master of IT Security &amp; Master of IT Management","url":"https:\/\/catharsis.net.au\/blog\/author\/sajal-jain\/"}]}},"_links":{"self":[{"href":"https:\/\/catharsis.net.au\/blog\/wp-json\/wp\/v2\/posts\/1215","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/catharsis.net.au\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/catharsis.net.au\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/catharsis.net.au\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/catharsis.net.au\/blog\/wp-json\/wp\/v2\/comments?post=1215"}],"version-history":[{"count":2,"href":"https:\/\/catharsis.net.au\/blog\/wp-json\/wp\/v2\/posts\/1215\/revisions"}],"predecessor-version":[{"id":1231,"href":"https:\/\/catharsis.net.au\/blog\/wp-json\/wp\/v2\/posts\/1215\/revisions\/1231"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/catharsis.net.au\/blog\/wp-json\/wp\/v2\/media\/1214"}],"wp:attachment":[{"href":"https:\/\/catharsis.net.au\/blog\/wp-json\/wp\/v2\/media?parent=1215"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/catharsis.net.au\/blog\/wp-json\/wp\/v2\/categories?post=1215"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/catharsis.net.au\/blog\/wp-json\/wp\/v2\/tags?post=1215"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}