Do this
Do today
- Check every environment: local, CI, staging, production, containers, serverless and hosted platforms.
- Upgrade Node.js on each host to a fixed release.
- Rebuild and redeploy container images, as described below.
- Update Node.js in CI separately from production, as described below.
- Restart or redeploy every process, then verify the one that is running.
On a host, nvm installs a fixed release:
nvm install 24.22.1 # or 22.23.4 / 26.12.1
node -v
Node's schedule already lists 24.22.2 and 26.13.0 as the newest releases on those lines, so a newer patch is fine.6 This fixes the machine you ran it on. It does not touch a server, container or managed runtime deployed separately.
Containers
Pin an exact fixed patch in the Dockerfile. A pinned tag stays on its old release until you edit it to a fixed one:
FROM node:24.22.1-alpine
Confirm the tag exists before you rely on it. The official image's README says Debian-based images may be published ahead of Alpine ones for Node.js security releases, because Alpine needs a musl build that may not be ready on release day.9
Build with --pull. Docker documents it as always attempting to pull all referenced images.10 That refreshes the base image. It does not invalidate every cached layer. If an intermediate layer downloads or installs a separate Node.js runtime, such as with curl, nvm or a package manager, that layer can survive a pull. Add --no-cache, or change that layer:
docker build --pull --no-cache -t my-app .
docker run --rm --entrypoint node my-app -v
Then redeploy and check the running container, not only the image.
CI
Updating Node.js in CI patches the CI job. A newer runner does not patch a server, container or managed runtime that you deploy separately. Request the exact fixed version. With an exact version, check-latest: true is not needed:
steps:
- uses: actions/setup-node@v4
with:
node-version: 24.22.1
- run: node -v
check-latest matters when you request a range such as 24. Without it, the action resolves a version from the runner's local cache first, and that cache updates with a lag.11
If you can't patch today
Per BleepingComputer's summary of CISA's advice, block incoming Brotli-compressed requests at the proxy or firewall, or disable Brotli decoding, until you can update.12 Rejecting requests with Content-Encoding: br reduces exposure through inbound compressed bodies. It is an interim, incomplete measure. It does not cover responses your application fetches from servers it doesn't control, per Vercel, or any other path where your code or a library decompresses Brotli data.7 It is not a substitute for the Node.js update. The application-level mitigation page covers the Express options.
Do this week
- Move off any end-of-life line to 22 or 24, or to 26 once it passes your tests. The schedule lists 26 as LTS.6
- Pin a major line rather than floating on a lts or latest tag, so a rebuild can't jump you to a new major without a test.
- Check Docker base images and CI caches for stale layers, using the
--no-cache point above. - Inventory the other Brotli users on your hosts and images.
- Read the other fixes in the same release. The 21 October release fixes ten issues, four rated High.1
Can wait
- Dependency bumps unrelated to this fix, and reformatting your Dockerfiles.