Skip to content

Require Node >= 22.23.4 and refuse compressed request bodies (CVE-2026-111497) - #26

Merged
Droptops merged 2 commits into
masterfrom
fix/node-brotli-cve-2026-111497
Oct 22, 2026
Merged

Droptops merged 2 commits into
masterfrom
fix/node-brotli-cve-2026-111497

Conversation

@Droptops

Copy link
Copy Markdown
Owner

Why

Node.js released 22.23.4 / 24.22.1 / 26.12.1 on Oct 21, 2026 for CVE-2026-111497 — an out-of-bounds write in the Brotli decoder reachable by any process that decompresses attacker-controlled Brotli data. The eval/ Next.js app exposes four pages/api routes that accept request bodies from the network, so a br-encoded body is the relevant attack path if this is ever deployed on an unpatched runtime.

What

  • engines.node → >=22.23.4 in eval/ and agentic-eval/; added .nvmrc pins.
  • New eval/lib/rejectCompressedBody.js, called first in cases, claude, run-case, run-eval. Any Content-Encoding other than identity → 415. The routes only ever accepted plain JSON, so this changes nothing for legitimate clients.

Verified

  • Guard unit-checked: no header / identity → pass; br / gzip, br → 415.
  • npm test in eval/: 67 pass, 2 fail — the same 2 fail on master (missing node_modules), unrelated.
  • claude.js CRLF line endings preserved.

Still on you

Actually run node -v where this is deployed/developed and update to ≥ 22.23.4.


Generated by Claude Code

Droptops and others added 2 commits October 22, 2026 14:21
…6-111497)

Node.js shipped 22.23.4 / 24.22.1 / 26.12.1 on 2026-10-21 fixing an
out-of-bounds write in the Brotli decoder that permits remote code
execution when a process decompresses attacker-controlled Brotli data.

- Bump "engines.node" to >=22.23.4 in eval/ and agentic-eval/, and add
  .nvmrc pins so dev and deploy pick up a fixed runtime.
- Add eval/lib/rejectCompressedBody.js and call it first in every
  pages/api route. The routes only accept plain JSON; any non-identity
  Content-Encoding now gets a 415 before a body parser could ever hand
  compressed bytes to a decoder. Defense in depth — the Node bump is the
  actual fix.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011GpAE6VxpgH1p91zKVQC1i
Node 20 is end of life and did not receive the CVE-2026-111497 fix, so
CI on 20 was validating against a runtime the package now declares
unsupported.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011GpAE6VxpgH1p91zKVQC1i
@Droptops
Droptops merged commit cbfc971 into master Oct 22, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant