Skip to content

Bump Node.js base image to 22.23.4 (CVE-2026-111497) - #106

Merged
msogin merged 1 commit into
mainfrom
fix/cve-node-2026-10-27
Oct 27, 2026
Merged

msogin merged 1 commit into
mainfrom
fix/cve-node-2026-10-27

Conversation

@msogin

@msogin msogin commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Both Dockerfile stages (base, L9, and runner, L34, which runs node server.js) were on node:22.23.3-alpine, one patch below the fix for CVE-2026-111497: an out-of-bounds write in the Brotli decoder bundled inside Node.js (critical). A crafted br stream can corrupt memory, crash the process or potentially execute code.

Fix: move both FROM lines to node:22.23.4-alpine, pinned by its image index digest sha256:fe4f6d74e20370acb04ad889077d14d0f64a9c8ea6a42bc60cddf1e844699914 (same pinning convention as before). Because the old pin was a digest, rebuilding with --pull could not pick up the fix; the Dockerfile had to change.

Why the image scan didn't catch it

Node.js in the official image is installed from a tarball, not as an Alpine package, and Brotli is compiled into the node binary. Neither is a package Trivy tracks, so the pre-publish gate passed. npm audit doesn't cover the runtime either.

Risk class

Patch (22.23.3 → 22.23.4, same major/minor line). No code changes.

Test evidence

  • Diff is the two FROM lines only; no other references to the old version in the repo (grep -rn "22\.23\.3\|0a7108bf").
  • Digest checked against Docker Hub: 22.23.4-alpine → sha256:fe4f6d74…9914 (the old pin 0a7108bf… is likewise the 22.23.3-alpine index digest). Node's release index lists v22.23.4 as a security release.
  • test workflow: green on this PR.
  • The image itself is not built or scanned on this PR: docker-publish.yml runs only on pushes to main and manual dispatch. Its build and Trivy gate run on merge; check that run before deploying.

Generated by Claude Code

Node.js 22.23.3 bundles a Brotli decoder with an out-of-bounds write
(CVE-2026-111497, critical): a crafted `br` stream can corrupt memory,
crash the process or potentially execute code. 22.23.4 is the patched
release. Both stages were pinned by digest, so a rebuild with --pull
could not pick it up; the pin moves to the new image index digest.

The image scan did not flag this: Node.js in the official image is
installed from a tarball rather than as an OS package, so it is not a
package the scanner tracks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V7BdieGZH3uKwxq1qMhPEw
@msogin
msogin merged commit acfe5c1 into main Oct 27, 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.

2 participants