/
← Voltar ao feed
high

Brotli decoder out-of-bounds write (CVE-2026-111497, "Node2Shell"): Node.js, Bun and PyPI Brotli/brotlicffi affected; public PoCs, RCE shown on Node.js 24.22.0

3 fonte(s) · 5 atualização(ões) · publicado 22/10/2026 02:46 · coletado há 3 horas

Matéria consolidada. Reúne 3 matérias que o Tifon tinha publicado separadamente sobre a mesma história. A IA reescreveu o relatório com o que as 3 fontes trouxeram em 23/10/2026 19:02; os links antigos trazem para cá.

Fontes: aikido.dev ×2 ↗ thehackernews.com ×2 ↗ gbhackers.com ↗

The Node.js Project released security updates on October 21, 2026 for the 26.x, 24.x and 22.x lines (26.12.1, 24.22.1, 22.23.4), fixing 10 vulnerabilities: four high, three medium and three low (gbhackers.com). The most serious is CVE-2026-111497, nicknamed Node2Shell (aikido.dev), an out-of-bounds write in the bundled Brotli decoder that the project says could allow remote code execution. It is rated high, not critical (thehackernews.com). A public proof-of-concept appeared on October 22. The first one achieved code execution only against a deliberately weakened build (thehackernews.com). Imperva then demonstrated code execution against the unmodified official Node.js 24.22.0 image on linux/arm64, though unreliably and only after several attempts; other architectures and the 22.x and 26.x lines were not tested (thehackernews.com). aikido.dev also reported unreliable code execution on that image. No in-the-wild exploitation had been reported as of October 22 (thehackernews.com, aikido.dev). Bun is also affected (aikido.dev). The same release blocks eight compromised eMudhra intermediate CA keys.

The flaw also reaches Python: the PyPI packages Brotli (1.2.0 and earlier) and brotlicffi (1.2.0.x) compile the same vulnerable decoder (aikido.dev). Aikido, citing OpenSourceMalware.com (OSM) research, calls this variant Python2Shell. Fixed releases are Brotli 1.2.1 (PyPI, October 22) and brotlicffi 1.2.1.0 (October 23). As of October 23, advisory databases do not map the CVE to either PyPI package, so pip-audit, Dependabot and Safety do not flag it (aikido.dev).

Entenda a falha

A vulnerabilidade

CVE-2026-111497 (Node2Shell) is an out-of-bounds write in the Brotli decoder bundled with Node.js 22.x, 24.x and 26.x. Bun before 1.4.4 and the PyPI packages Brotli 1.2.0 and earlier and brotlicffi 1.2.0.x are also affected. No authentication is needed, but the attacker must get malformed Brotli data into the app's decompression: a Content-Encoding: br body decoded by Express 5 or body-parser 2.x, a response fetched by fetch() or Python HTTP clients from a malicious server, or untrusted input passed to node:zlib. The impact is a crash, a memory leak or potentially code execution. Node.js rates it high, while the CVE record gives CVSS 4.0 of 9.2. Fixed in Node.js 22.23.4, 24.22.1 and 26.12.1, Bun 1.4.4, Brotli 1.2.1 and brotlicffi 1.2.1.0; end-of-life lines get no fix. The same release fixes other flaws: CVE-2026-106069 and CVE-2026-105483 (TLS certificate check bypasses using unusual IP forms), CVE-2026-105482 (dns.resolve truncating hostnames at a NUL byte) and CVE-2026-106074 (repeated cached randomness in snapshots).

Como funciona

Data marked as Brotli reaches the bundled decoder through node:zlib calls, through Express 5 or body-parser 2.x decoding request bodies, or through fetch(), which decompresses Brotli responses automatically. In Python, urllib3, httpx, aiohttp and Scrapy do the same when Brotli is installed. The decoder reads a stream that announces its block types as decoding runs. According to Imperva, the test input reached a block-type change that the stream's own structure ruled out. The vulnerable decoder read it as a request for more input and kept going in an invalid state, and in a memory-sanitizer test that state led to a write past an intended buffer. A bare Node.js HTTP server does not decode incoming Brotli bodies by itself.

Por que é vulnerável

Per Aikido, DecodeBlockTypeAndLength() returned a plain boolean, so BROTLI_FALSE could mean either a malformed stream or a need for more input. Callers could not tell the two apart, and the fast path discarded the return value entirely. The CVE record pairs CWE-252 (unchecked return value) with CWE-787 (out-of-bounds write). The upstream fix makes the function return an error code and adds BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH (-17), so decoding stops with a format error on both the safe and fast paths. The articles do not explain why the bug went unnoticed, nor why a February fix shipped as a security release only in October.

Onde está

The flaw is in DecodeBlockTypeAndLength() in the Brotli decoder; the upstream fix is google/brotli commit 0ed4268a (February 2026), and the Bun team tracked it in oven-sh/bun issue 46352.

Como foi descoberta

According to gbhackers.com, the developer mcollina reported the flaw to Node.js and aduh95 implemented the fix. The articles do not say how it was found. The fix was committed to Brotli in February 2026, and Node.js and Brotli shipped it on October 21, 2026, the day Vercel added firewall rules for inbound requests. Imperva later traced the root cause and demonstrated exploitation. Aikido, citing OpenSourceMalware.com research, extended the finding to the PyPI packages Brotli and brotlicffi; advisory databases had not yet mapped the CVE to them as of October 23. No in-the-wild exploitation had been reported as of October 22.

PoC pública

A first public proof of concept appeared on October 22; the articles do not name its author. It reached code execution only on a deliberately weakened test build, and on standard builds gave a crash and a limited memory read. Imperva then demonstrated Node2Shell code execution on the unmodified official Node.js 24.22.0 image for linux/arm64 using crafted Brotli data, with no debugger or custom build, through both request-body and response paths. It was unreliable, needing several attempts, and other architectures and the 22.x and 26.x lines were not tested. Node.js 24.22.1 rejects the same data. Since a lab exploit already works on a stock image, patch quickly, starting with services that call external servers or accept compressed request bodies.

Publicada em: thehackernews.com/2026/10/researchers-demonstrate-node2shell-rce.html ↗

Explicação gerada por IA a partir da matéria e dos artigos, em 23/10/2026 19:17.

Detalhes técnicos

  • CVE-2026-111497: out-of-bounds write in the Brotli decoder, triggered by malformed compressed input. It can crash the process, leak memory or potentially give code execution. It affects 26.x, 24.x and 22.x; reported by mcollina and fixed by aduh95 (gbhackers.com). The CVE record pairs CWE-252 (unchecked return value) with CWE-787 (out-of-bounds write) (aikido.dev).
  • Root cause (Imperva, via thehackernews.com): the test input reached a block-type change that the Brotli stream's own structure ruled out. The vulnerable decoder read it as a request for more input and kept going in an invalid state. In a separate memory-sanitizer test, continuing from that state wrote past an intended buffer.
  • Code-level cause (aikido.dev): DecodeBlockTypeAndLength() returns a plain boolean, so BROTLI_FALSE can mean malformed stream or need for more input, and the fast path discards the return value. A crafted stream declares one block type and exhausts its length, forcing an impossible block switch.
  • Exposure paths: node:zlib Brotli functions; fetch(), which automatically decompresses Brotli responses from attacker-controlled or compromised servers (webhooks, user-supplied URLs); and Express 5 / body-parser 2.x, which decompress request bodies sent with Content-Encoding: br (express.json(), express.urlencoded(), express.text(), express.raw()). A bare Node.js HTTP server does not decode incoming Brotli bodies on its own (aikido.dev, thehackernews.com).
  • Python exposure (aikido.dev): urllib3 (and so requests), httpx with the brotli extra, aiohttp and Scrapy decode Brotli automatically when Brotli or brotlicffi is installed, so an app can be exposed without importing Brotli. Routes are outbound requests to attacker-controlled servers (webhooks, URL previews, crawlers) and inbound bodies with Content-Encoding: br. Brotli has about 82.8 million PyPI downloads per month.
  • Python testing (aikido.dev, citing OSM): with AddressSanitizer, Brotli 1.2.0 consumed the whole ~23 MB crafted stream and kept requesting input, even in 1-byte chunks, while 1.2.1 rejected it with error -17 every time. OSM did not pursue memory corruption or code execution in the Python extension. The release notes for the fixed PyPI versions do not mention the CVE.
  • Imperva reproduced code execution through both the request-body and response paths, testing Express 5.0.0 to 5.3.0 and body-parser 2.0.0 to 2.3.0 at pinned versions, not every release in between (thehackernews.com).
  • The upstream fix is Brotli commit 0ed4268a (February 2026), shipped as a security release in October and included in Brotli 1.2.1, 1.1.1 and 1.0.10 on October 21. The decoder now detects invalid input and stops with a format error (new error BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH, -17) on both the safe and fast paths, before writing past the buffer. OSM found that 1.2.1 differs from 1.2.0 only by the version bump and this commit (aikido.dev). Other software bundling Brotli may need updating. Distribution builds that use the system Brotli are fixed through the distro package (aikido.dev, thehackernews.com).
  • On standard builds the first PoC produced a crash and a limited memory read (thehackernews.com). 24.22.1 rejects the input that worked against 24.22.0 (aikido.dev, thehackernews.com).
  • Other high-severity fixes: CVE-2026-106069 and CVE-2026-105483, two TLS certificate check bypasses using unusual IP address forms (the latter with full-width digits). The commit fixing CVE-2026-105483 calls it low-severity and hard to exploit. CVE-2026-105482: dns.resolve truncates hostnames at an embedded NUL byte (thehackernews.com, gbhackers.com).
  • Medium: CVE-2026-106074. Entropy caches behind crypto.randomUUID() and crypto.randomInt() can be preserved in user-land startup snapshots and single-executable applications, so processes repeat the same values. This is limited to duplicated cached randomness, not a general cryptographic failure.
  • eMudhra block: eight intermediate CA keys reported compromised are blocked, and three emSign roots are removed from the bundled root list. Node.js does not do revocation checks by default, so chains built on those keys previously validated. Resumed sessions from before the update are not re-checked until they time out. Go made the same block on October 20 (thehackernews.com).
  • Refreshed components: undici (three moderate advisories, including a Subresource Integrity check issue and two memory-exhaustion flaws), c-ares, CA certificates, OpenSSL (22.x and 24.x) and SQLite (22.x). Individual flaws affect different branches, so assess by version. Severity labels are the project's own.

Remediação

  • Upgrade to Node.js 22.23.4, 24.22.1 or 26.12.1 (or newer patch releases of those lines), and to Bun 1.4.4 or newer (aikido.dev).
  • Python: upgrade to Brotli ≥1.2.1 or brotlicffi ≥1.2.1.0, regenerate lockfiles, rebuild images and wheels that bundle them, and check every environment including laptops and CI runners. Use pip show Brotli brotlicffi and pipdeptree -r -p Brotli to find exposure. Scanners will not report it until advisory databases map the CVE to PyPI (OSM is submitting PYSEC entries and a mapping for the GitHub advisory); distro-packaged bindings are fixed via the distro (aikido.dev).
  • Python stopgap: uninstall Brotli and brotlicffi (and extras such as httpx[brotli]); clients fall back to gzip and deflate. Stripping br from Accept-Encoding is weaker for outbound traffic because a malicious server can still send Brotli (aikido.dev).
  • Rebuild and redeploy container images, including other artifacts that bundle a Node binary, which a package inventory can miss. Images pinned to earlier tags (e.g. node:22.23.3-alpine, node:24.22.0) stay vulnerable (aikido.dev, thehackernews.com).
  • End-of-life lines get neither the fix nor the eMudhra block and must migrate to a supported version.
  • The Node.js advisory lists no workaround. Stopgaps: drop requests with Content-Encoding: br at the proxy, load balancer or middleware; limit untrusted Brotli traffic on affected paths, as Imperva suggests, which also added WAF rules tested against its reproduced attacks; or use the Vercel firewall rules added October 21. None covers Brotli responses the application fetches from other servers (Vercel's rules state this explicitly), and none replaces upgrading (thehackernews.com).
  • Prioritise services that call external servers or accept compressed request bodies. Check managed platforms' bundled runtimes, distribution advisories and other software that bundles Brotli.

Relatos divergentes

  • CVE ID: gbhackers.com and aikido.dev assign CVE-2026-111497 to the Brotli flaw. thehackernews.com's earlier article did not state a CVE; its latest article also uses CVE-2026-111497, so there is no contradiction.
  • Exploitation: gbhackers.com (October 22, early) reported no evidence of exploitation and no PoC. thehackernews.com first reported a PoC that worked only on a weakened build, then (October 23) Imperva's demonstration on the unmodified 24.22.0 linux/arm64 image, needing several tries. aikido.dev reports the same unreliable result. Treat the Imperva and aikido.dev accounts as the most current. All sources agree there was no reported in-the-wild exploitation as of October 22.
  • RCE wording: gbhackers.com states the flaw allows RCE. thehackernews.com (citing the vendor) says it "could allow" it, and aikido.dev says "potential" RCE. Imperva's demonstration shows it is achievable but only on the tested setup.
  • Severity: thehackernews.com reports the Node.js project rating of high. aikido.dev cites a CVSS 4.0 score of 9.2 in the CVE record. These are different scoring sources; the CVSS score is the more recent figure for the flaw itself, while the Node.js rating reflects the project's own assessment.
  • End-of-life scope: thehackernews.com names 20.x and earlier as EOL and unfixed. aikido.dev also lists 25.x and 23.x. gbhackers.com says only that EOL versions remain affected.

Linha do tempo

  1. aikido.dev ↗ · pub. 23/10/2026 17:45 · coletado 23/10 19:00

    Brotli decoder flaw behind Node2Shell (CVE-2026-111497) also affects PyPI packages Brotli and brotlicffi

    The Brotli flaw behind Node2Shell is not limited to Node.js and Bun: the PyPI packages Brotli (≤1.2.0) and brotlicffi (1.2.0.x) are affected. Fixes are Brotli 1.2.1 (PyPI, Oct 22) and brotlicffi 1.2.1.0 (Oct 23). Advisory databases do not yet map the CVE to PyPI, so common Python scanners will not flag it. The CVE record gives a CVSS 4.0 score of 9.2.

    ler a análise desta fonte

    The Brotli flaw behind Node2Shell is not limited to Node.js and Bun: the PyPI packages Brotli (≤1.2.0) and brotlicffi (1.2.0.x) are affected. Fixes are Brotli 1.2.1 (PyPI, Oct 22) and brotlicffi 1.2.1.0 (Oct 23). Advisory databases do not yet map the CVE to PyPI, so common Python scanners will not flag it. The CVE record gives a CVSS 4.0 score of 9.2.

    The Brotli decoder out-of-bounds write behind Node2Shell (CVE-2026-111497) also affects Python. The PyPI packages Brotli (1.2.0 and earlier) and brotlicffi (1.2.0.x) compile the same vulnerable decoder that Node.js bundles. Aikido, citing OpenSourceMalware.com (OSM) research, calls the Python variant Python2Shell. The CVE record gives it a CVSS 4.0 score of 9.2. Patched releases are Brotli 1.2.1 and brotlicffi 1.2.1.0. As of October 23, advisory databases do not map the CVE to either PyPI package, so pip-audit, Dependabot and Safety will not flag it. No in-the-wild exploitation was reported for Node.js as of October 22.

    Technical Details

    • Root causes are CWE-252 (unchecked return value) and CWE-787 (out-of-bounds write). DecodeBlockTypeAndLength() returns a plain boolean, so BROTLI_FALSE can mean either a malformed stream or a need for more input. On the fast path the return value is discarded.
    • A crafted stream declares a single block type and exhausts its length, forcing a block switch that cannot succeed. The decoder then either keeps asking for input or continues with stale block state, which leads to the out-of-bounds write.
    • The upstream fix is google/brotli commit 0ed4268. It adds the error BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH (-17) and stops decoding on both the safe and fast paths. Version 1.2.1 differs from 1.2.0 only by the version bump and this commit.
    • OSM tested with AddressSanitizer. Brotli 1.2.0 consumed the whole ~23 MB stream and kept requesting input, even with 1-byte chunks. Brotli 1.2.1 rejected it with error -17 every time. OSM did not pursue memory corruption or code execution in the Python extension.
    • Exposure: urllib3 (and so requests), httpx (brotli extra), aiohttp and Scrapy decode Brotli automatically when the package is installed. Importing Brotli in application code is not required.
    • Attack routes: outbound requests to attacker-controlled servers (webhooks, URL previews, crawlers), and inbound request bodies sent with Content-Encoding: br.
    • In Python, brotli.decompress() raises a generic brotli.error. A Decompressor() fed the stream incrementally never finishes on 1.2.0.

    Remediation

    • Run pip install -U "Brotli>=1.2.1" or pip install -U "brotlicffi>=1.2.1.0", and regenerate Poetry, uv or pip-tools lockfiles.
    • Rebuild container images and wheels that bundle either package. Check laptops, CI runners, servers and containers.
    • Use pip show Brotli brotlicffi, pipdeptree -r -p Brotli and grep -i brotli on lockfiles to find exposure. Prioritise services that fetch from untrusted servers or accept Brotli request bodies.
    • If you cannot upgrade, uninstall Brotli and brotlicffi (and extras such as httpx[brotli]); clients fall back to gzip and deflate. Stripping br from Accept-Encoding or rejecting Content-Encoding: br at the edge only partly helps, because a malicious server can still send Brotli responses.
    • Distribution-packaged bindings are fixed through the distro advisory.
  2. thehackernews.com ↗ · pub. 23/10/2026 04:50 · coletado 23/10 05:00

    Imperva demonstrates Node2Shell RCE on official Node.js 24.22.0 build via crafted Brotli data (CVE-2026-111497)

    Imperva attributes the Node2Shell demonstration on the unmodified official Node.js 24.22.0 linux/arm64 image (several attempts needed, other architectures and 22.x/26.x untested). It reproduced execution through both fetch() responses and request-body middleware (Express 5.0.0-5.3.0, body-parser 2.0.0-2.3.0), explained the root cause (impossible block-type change handled as a request for more input) and noted its own WAF rules alongside Vercel's.

    ler a análise desta fonte

    Imperva attributes the Node2Shell demonstration on the unmodified official Node.js 24.22.0 linux/arm64 image (several attempts needed, other architectures and 22.x/26.x untested). It reproduced execution through both fetch() responses and request-body middleware (Express 5.0.0-5.3.0, body-parser 2.0.0-2.3.0), explained the root cause (impossible block-type change handled as a request for more input) and noted its own WAF rules alongside Vercel's.

    Researchers at Imperva demonstrated Node2Shell, a proof of concept that achieves code execution on the official Node.js 24.22.0 Linux arm64 image by feeding crafted data to the bundled Brotli decoder (CVE-2026-111497). Node.js disclosed the flaw and shipped fixes on October 21. The demonstration goes beyond the first public PoC, which worked only on a deliberately weakened build; on a standard build that PoC produced only a crash and a limited memory read. Imperva's exploit was unreliable and needed several attempts, and it covers only that one build and setup. No in-the-wild exploitation had been reported as of October 22.

    Technical Details

    • The flaw sits in the bundled Brotli decoder, so it affects the 22.x, 24.x and 26.x lines, not only the build Imperva tested. Other architectures and the 22.x and 26.x lines were not tested.
    • Reachable from both sides of an HTTP exchange: Brotli-compressed responses read through the built-in fetch(), and Brotli request bodies decoded by middleware. Express 5 body parsers (express.json(), express.urlencoded(), express.text(), express.raw()) now decode Brotli request bodies. A plain Node.js HTTP server does not decode them without middleware or an explicit call.
    • Imperva reproduced code execution through both the request-body and response paths, testing Express 5.0.0 to 5.3.0 and body-parser 2.0.0 to 2.3.0 at pinned versions only.
    • Root cause: the test input reached a block-type change that the stream's own structure ruled out. The vulnerable decoder treated it as a request for more input and continued in an invalid state. A separate memory-sanitizer test showed a write past an intended buffer (out-of-bounds write).
    • Node.js fixed it by importing an upstream Brotli patch that stops the decoder with a format error at that point. On 24.22.1 the same data was rejected and no code ran.

    Remediation

    • Move to a patched release, including container images and other artifacts that bundle a Node binary, which package inventories can miss.
    • End-of-life lines 20.x and earlier get no fix and must move to a supported line.
    • The advisory lists no workaround. Imperva suggests limiting untrusted Brotli traffic on affected paths where practical; only the update removes the flaw.
    • Imperva added WAF rules and tested them against its reproduced attacks. Vercel added rules on October 21 that block the attack in inbound requests; they do not cover Brotli responses fetched from other servers and do not replace updating.
  3. aikido.dev ↗ · pub. 22/10/2026 15:11 · coletado 22/10 17:00

    Node2Shell: Brotli decoder out-of-bounds write in Node.js and Bun (CVE-2026-111497) enables potential RCE; patches released

    ler a análise desta fonte

    Node.js released security updates on October 21, 2026 for CVE-2026-111497 (nicknamed Node2Shell), an out-of-bounds write in the bundled Brotli decoder. Malformed compressed input can crash the process, leak memory or potentially give an attacker code execution. Node.js rates it high severity, and Bun is also affected. A public proof of concept appeared on October 22, and researchers reported code execution against an unmodified Node.js 24.22.0 image on Linux arm64, although the exploit was unreliable. Per The Hacker News, no in-the-wild exploitation had been reported as of October 22.

    Technical Details

    • The flaw is an out-of-bounds write in the Brotli decoder, triggered by malformed compressed input. The upstream fix is Brotli commit 0ed4268a (February 2026), also shipped in Brotli 1.2.1, 1.1.1 and 1.0.10. It makes the decoder detect invalid input and stop before writing past the buffer.
    • Exposure paths: Express 5 and body-parser 2.x decompress request bodies sent with Content-Encoding: br; fetch() automatically decompresses Brotli responses from attacker-controlled or compromised servers (webhooks, user-supplied URLs); direct use of node:zlib Brotli functions with untrusted input. A bare Node.js HTTP server does not decode incoming Brotli bodies on its own.
    • The first public PoC reached code execution only against a deliberately weakened build. Researchers later reported code execution on the official Node.js 24.22.0 image (linux/arm64), not on every attempt; 24.22.1 rejects the same input.
    • Distribution builds that use the system Brotli library are fixed through the distro's Brotli package.

    Remediation

    • Upgrade to Node.js 22.23.4, 24.22.1 or 26.12.1 (or newer patch releases of those lines), and Bun 1.4.4 or newer.
    • Rebuild and redeploy container images, because images pinned to earlier tags (e.g. node:22.23.3-alpine, node:24.22.0) stay vulnerable.
    • Node.js 25.x, 23.x, 20.x and earlier are end of life and get no fix, so plan a migration.
    • Prioritise services that call external servers or accept compressed request bodies.
    • The Node.js advisory lists no workaround. Stopgaps: drop requests with Content-Encoding: br at the proxy, load balancer or middleware, or use Vercel firewall rules (added October 21). Neither stopgap covers Brotli responses the app fetches.
    • Check managed platforms' bundled runtimes and your distribution's security advisories.
  4. thehackernews.com ↗ · pub. 22/10/2026 04:47 · coletado 22/10 08:00

    Node.js patches Brotli decoder out-of-bounds write (RCE per vendor) and 9 other flaws; blocks eight compromised eMudhra CA keys

    ler a análise desta fonte

    Node.js released security updates on October 21 for the 22.x, 24.x and 26.x lines (fixed in 22.23.4, 24.22.1 and 26.12.1), addressing 10 flaws. The most serious is an out-of-bounds write in the bundled Brotli decoder, which the project says could allow remote code execution. It is rated high, not critical. A public proof-of-concept published October 22 achieved code execution only against a deliberately weakened test build. On standard builds it produced a crash and a limited memory read, and no in-the-wild exploitation had been reported as of October 22. The same updates also block eight intermediate CA keys from Indian provider eMudhra that were reported compromised, and remove three emSign roots from the bundled root list.

    Technical Details

    • Brotli flaw: an out-of-bounds write in the decoder, triggered by malformed compressed input. No CVE is stated in the article. Node.js reaches the code through node:zlib or automatically through fetch() on Brotli-compressed responses. Applications are exposed when they decompress attacker-controlled Brotli data, such as request bodies or responses fetched from another server.
    • The fix is an upstream Brotli patch, first made in Brotli's source in February 2026 and shipped as a security release in October. It also shipped in Brotli 1.2.1, 1.1.1 and 1.0.10 on October 21, so other software bundling Brotli may need updating.
    • Other high-severity fixes: two TLS certificate check bypasses that use unusual IP address forms (CVE-2026-106069, CVE-2026-105483), and dns.resolve truncating hostnames at an embedded null byte (CVE-2026-105482). The commit fixing CVE-2026-105483 calls it low-severity and hard to exploit.
    • Medium flaw: CVE-2026-106074 makes crypto.randomUUID() and crypto.randomInt() return the same values across processes in startup-snapshot or single-executable applications.
    • eMudhra block: Node.js does not perform revocation checks by default, so chains built on the compromised keys previously validated. Sessions resumed from before the update are not re-checked until they time out. Go made the same block on October 20.
    • Bundled components refreshed: undici (three moderate advisories, including a Subresource Integrity check issue and two memory-exhaustion flaws), c-ares, OpenSSL (22.x and 24.x) and SQLite (22.x).

    Remediation

    • Upgrade to 22.23.4, 24.22.1 or 26.12.1. Node.js 20.x and earlier are end of life and get neither the fix nor the eMudhra block, so they must move to a supported line.
    • The advisory offers no workaround for the Brotli flaw.
    • Vercel added firewall rules on October 21 that block the attack in inbound requests. They do not cover Brotli responses fetched from other servers and do not replace upgrading.
    • Check other software that bundles Brotli for the corresponding patched versions.
  5. gbhackers.com ↗ · pub. 22/10/2026 02:46 · coletado 22/10 04:00 primeiro registro

    Node.js patches 10 vulnerabilities, including Brotli decoder out-of-bounds write enabling RCE (CVE-2026-111497)

    ler a análise desta fonte

    The Node.js Project released security updates on October 21, 2026 fixing 10 vulnerabilities (four high, three medium, three low severity) across the 26.x, 24.x and 22.x release lines. The most significant is CVE-2026-111497, an out-of-bounds write in the Brotli decoder that allows remote code execution in all three lines. The advisory gives no exploitation prerequisites and no evidence of active exploitation. Patched versions are 26.12.1, 24.22.1 and 22.23.4.

    Technical Details

    • CVE-2026-111497: out-of-bounds write in the Brotli decoder leading to RCE (26.x, 24.x, 22.x). Reported by mcollina, fixed by aduh95.
    • CVE-2026-105482: dns.resolve truncates names containing NUL characters.
    • CVE-2026-105483: TLS certificate hostname check bypass when an IP address uses full-width digits.
    • CVE-2026-106069: affects hosts that loosely resolve to IP addresses.
    • CVE-2026-106074: entropy caches used by crypto.randomUUID() and randomInt() can be preserved in user-land startup snapshots and single-executable applications, so processes repeat the same values. This is limited to duplicated cached randomness, not a general cryptographic failure.
    • The release also updates c-ares, Undici and CA certificates in all branches. The certificate update addresses the eMudhra Intermediate CA compromise. OpenSSL is updated in 24.x and 22.x, and SQLite in 22.x.
    • Individual vulnerabilities affect different branches, so version-specific assessment is needed. Severity labels are the project's own.

    Remediation

    • Upgrade to Node.js 26.12.1, 24.22.1 or 22.23.4, depending on the release branch.
    • No workarounds are offered.
    • End-of-life versions remain affected even after these releases, so move to a maintained version.