A free, read-only host check for the Node.js October 2026 security release: the Brotli decoder RCE (CVE-2026-111497), three TLS certificate hostname bypasses, and 6 more. Fixed in 22.23.4 / 24.22.1 / 26.12.1.
node --version only tells you about the Node in your shell. A real server often has several: the system package, nvm / fnm / volta / asdf / n / nodenv versions in user homes, snap, the copy bundled with VS Code Server, an app-bundled runtime, and whatever PM2 or systemd actually starts. Node apps are long-running, so after patching, the old vulnerable code keeps running until each process is restarted.
This script finds them all, checks every install and every running process, and tells you exactly what still needs updating or restarting.
Indicator check only. A clean result is not proof that a host is safe. Only run it on systems you own or are authorised to check.
| Check | Why it matters |
|---|---|
Every Node install: system/package, /opt, nvm, fnm, volta, asdf, n, nodenv, snap, VS Code / Cursor / code-server, plus any folder you pass with --search |
Your shell's node is rarely the only one |
| Version vs. fixed releases (22.23.4 / 24.22.1 / 26.12.1) | Tells you what's unpatched |
| End-of-life lines (20 and older, plus odd majors 21/23/25) | They get no fix at all |
| Distro backports (Debian/Ubuntu and RPM changelogs) | Avoids false alarms on patched distro packages |
| Every running Node process: which binary and version it's actually using | A service can run an old nvm version even after you installed the new one |
| Processes on a replaced binary | Updated on disk but not restarted, so the old code is still live |
eMudhra CA distrust: NODE_EXTRA_CA_CERTS bundles containing emSign/eMudhra certs, and processes using the OS CA store |
Updating Node doesn't remove certificates you add yourself |
Docker containers (--containers, optional) |
Updating the host doesn't update images |
- No network traffic, no exploit probes, changes nothing.
- It avoids executing binaries it finds. It reads the version from Node's own
node_version.h, package metadata, or the install path first. If it really has to runnode --versionon a binary owned by another user, it runs it as that user, not root, so a planted file in someone's home folder can't run with root rights. --containersruns onlynode --versioninside running containers.
Download it, read it, then run it:
curl -fsSLO https://raw.githubusercontent.com/Charlie-Netdevops/node-hostcheck/main/node-hostcheck.sh
less node-hostcheck.sh
chmod +x node-hostcheck.sh
sudo ./node-hostcheck.shInclude app folders and containers:
sudo ./node-hostcheck.sh --search /srv --search /opt/apps --containersRequirements: Linux, bash 4+, standard tools. openssl is optional, for the CA bundle check. Run as root for full results.
--json Machine-readable JSON output (for n8n, cron, SIEM)
--containers Also run 'node --version' inside running Docker containers
--search DIR Extra directory to search for node binaries (repeatable)
--no-color Disable colours
-V, --version Show version
-h, --help Show help
| Code | Meaning |
|---|---|
0 |
Every Node install and running process found is patched |
1 |
Vulnerable: unpatched/EOL Node installed or running, or a restart is needed |
2 |
Needs attention: unknown versions, EOL with a backport, or CA bundle issues |
3 |
No Node.js found |
64 |
Bad arguments |
node-hostcheck 0.1.0 — Node.js October 2026 security release (CVE-2026-111497 + 9)
NODE.JS INSTALLS
[VULNERABLE] 22.22.0 path /opt/node22/bin/node
[EOL] 20.20.0 system /opt/node20/bin/node
[PATCHED] 24.22.1 nvm /home/app/.nvm/versions/node/v24.22.1/bin/node
RUNNING NODE.JS PROCESSES
[VULNERABLE] PID 478 app 22.22.0 /opt/node22/bin/node
[RESTART_NEEDED] PID 488 app ? /usr/bin/node
FINDINGS
[HIGH] Running Node.js processes on a replaced binary — restart needed
[HIGH] Running Node.js processes using a vulnerable or end-of-life version
[MEDIUM] Extra CA bundles for Node.js contain eMudhra / emSign certificates
RESULT: VULNERABLE — update Node.js and restart the processes listed above.
Note the nvm 24.22.1 install is patched, but the app is still running the old 22.22.0. That's exactly the case node --version won't show you.
- Update to 22.23.4 / 24.22.1 / 26.12.1, or your distro's fixed package.
- nvm/fnm/volta: install the fixed version, point your services at it (PM2 ecosystem file, systemd
ExecStart), and remove the old version. - Restart every Node process (
pm2 restart all,systemctl restart <app>), then run the check again. - Rebuild Docker images (
docker build --pull) and single-executable apps, since they carry their own Node. - Node 20 and older are end-of-life: move to Node 24 or 26.
- Fixed-version data is as of
DATA_DATE(2026-10-22). Update theFIXEDtable if Node ships a follow-up. - It won't find Node embedded inside other programs (Electron apps, some vendor tools) unless you point
--searchat them, and even then only files namednode. - Single-executable apps (SEA) and startup snapshots aren't detected. Rebuild them after updating.
- Backport detection needs distro changelogs, which minimal images often strip.
- Without root, other users' installs and processes can't be fully checked.
- php2shell-hostcheck: the same approach for the PHP2Shell RCE.
- Node.js security release, 21 Oct 2026: https://nodejs.org/en/blog/vulnerability/october-2026-security-releases
Provided as-is, without warranty of any kind. You are responsible for how and where you run it. See LICENSE.