fix(docker): move the app and bot images to Node 22.23.4 (Node2Shell) #226
Reference in New Issue
Block a user
No description provided.
Delete Branch "fix/node22-node2shell"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What & why
CVE-2026-111497 ("Node2Shell") is an out-of-bounds write in the Brotli decoder that ships inside Node. It was fixed on 2026-10-21 in 22.23.4 / 24.22.1 / 26.12.1. Both of our images were on
node:20-alpine. Node 20 is end-of-life and will never get the fix.Exposure audit (approved by the org lead before this change):
Content-Encoding: brwith 415. The CVE's main attack path is Express 5 / body-parser 2.gunzipSyncin Module-uo..tar.br/.tbr, and we always writebundle.tar.gz.fetch(): low risk. Node decodesbrresponses automatically, but we only fetch from fixed or admin-configured hosts (Google, Discord, Steam, custom OIDC, the sidecar, the bot↔site link, module hosts on the allowlist). There are no user-supplied URLs.The runtime itself was still unpatched, so this:
node:22.23.4-alpineinDockerfileandbot/Dockerfile. The exact version is pinned on purpose: a floating tag can keep an old build cached;docs/website/website-README.mdmirror follows in a docs PR.Once this merges,
build-images.ymlpublishes new images; every deployment then needsdocker compose pull && docker compose up -d.How it was tested
node --versioninside each one printsv22.23.4.node:22.23.4-alpine(npm ci && npm test,MODULES_DIRpointed at an empty dir): 2180 pass, 99 skipped. All 3 failures came from my harness: I mounted onlyserver/, so two tests couldn't find../../scripts/…and one couldn't findclient/src/styles/theme.css. None of them involve Node 22. CI runs the full tree.Checklist
AI-assisted contributions (required)
Claude Code (Claude Opus 5.5). I have reviewed and understandevery change, and take responsibility for it. AI-authored commits are
marked with a
Co-Authored-By/Assisted-Bytrailer.License
(GNU GPL v3.0 or later), and I have the right to contribute it.
🤖 Generated with Claude Code
https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
CVE-2026-111497 ("Node2Shell") is an out-of-bounds write in the Brotli decoder Node bundles; it was fixed on 2026-10-21 in 22.23.4, 24.22.1 and 26.12.1. Both images were on node:20-alpine, and Node 20 is past end of life, so it gets no fix. The site is not reachable through the main path (Express 4 / body-parser 1.20 refuse a `br` request body with 415, and nothing calls the zlib Brotli API), but fetch() decodes Brotli responses and the runtime itself was unpatched. Pin the exact patched version so a floating tag cannot hold an old build, and run CI on the same version the image ships. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY