Linux

Node.js Security Update (October 2026): CVE-2026-111497

Updated 22 October 2026, 17:46 UTC.

Fixed CloudLinux alt-nodejs and cPanel ea-nodejs22 packages are in the stable repositories. Update your servers and restart your Node.js applications.

Short answer: On 21 October 2026, the Node.js project released security updates for its 22.x, 24.x and 26.x lines: Node.js 22.23.4, 24.22.1 and 26.12.1. They fix 10 vulnerabilities, and the highest severity is High. The most serious, CVE-2026-111497, is an out-of-bounds write in the Brotli decoder that can allow remote code execution. Update Node.js, then restart every Node.js application so it runs the new version.

Fixed versions

Node.js line Fixed release
22.x 22.23.4
24.x 24.22.1
26.x 26.12.1
Older lines (end of life) No upstream fix. CloudLinux ships backported fixes for some versions (see below).

CloudLinux and cPanel package status

This follows the CloudLinux status page on 22 October 2026 at 17:46 UTC. Check the status page before you rely on it, because it changes as packages are released.

Package Status
alt-nodejs 12, 14, 16, 18, 20, 22, 24 and 26 Fixed and in stable on CloudLinux OS 8 and 9
alt-nodejs 12, 14, 16, 18 and 20 Fixed and in stable on CloudLinux OS 7. alt-nodejs22 for CloudLinux OS 7 is reaching the repositories.
alt-nodejs24 Fixed and in stable on CloudLinux OS 10
ea-nodejs22 (cPanel EasyApache 4) ea-nodejs22-22.23.4-1.el8.cloudlinux, in stable on CloudLinux OS 8
alt-nodejs10 and alt-nodejs19 No fixed build released
The operating system’s own nodejs package Arrives through regular RHEL and AlmaLinux updates

Option 1: the one-command helper

The helper script detects CloudLinux and cPanel, lists the Node.js packages on the server, and updates the alt-nodejs, ea-nodejs and nodejs packages it finds. It does not restart your applications. It prints the restart commands at the end.

  1. Save the script below as nodejs-fix-all.sh on the server, for example in /root.
  2. Check what is installed. This changes nothing:
sudo bash nodejs-fix-all.sh check
  1. Update Node.js. The script asks you to type YES before it changes anything:
sudo bash nodejs-fix-all.sh update
  1. Restart your Node.js applications (see the restart section below).

The helper script

Read the script before you run it. It does not download anything.

#!/usr/bin/env bash
# nodejs-fix-all.sh
# Checks and updates Node.js for the October 2026 Node.js security releases
# (CVE-2026-111497 and 9 other CVEs). Fixed releases: Node.js 22.23.4, 24.22.1, 26.12.1.
#
# Usage (run as root, after you have a backup or snapshot):
#   sudo bash nodejs-fix-all.sh check     report what is installed. Changes nothing. Default.
#   sudo bash nodejs-fix-all.sh update    update Node.js packages. Asks for confirmation.
#
# The script updates CloudLinux alt-nodejs, cPanel ea-nodejs and the operating system's nodejs package.
# It does not restart your applications. It prints the restart commands at the end.

set -u

MODE="${1:-check}"
FIXED="22.23.4 24.22.1 26.12.1"

say()  { printf '%s\n' "$*"; }
have() { command -v "$1" >/dev/null 2>&1; }

if [ "$(id -u)" -ne 0 ]; then
  say "Run this script as root (sudo bash nodejs-fix-all.sh $MODE)."
  exit 1
fi

if have dnf; then PM="dnf"
elif have yum; then PM="yum"
elif have apt-get; then PM="apt"
else say "No supported package manager found (dnf, yum or apt-get)."; exit 1
fi

CL="no"
if [ -f /etc/cloudlinux-release ] || rpm -q cloudlinux-release >/dev/null 2>&1; then CL="yes"; fi
CPANEL="no"
[ -d /usr/local/cpanel ] && CPANEL="yes"

say "== Detected =="
say "Package manager: $PM"
say "CloudLinux: $CL"
say "cPanel: $CPANEL"

say ""
say "== Installed Node.js =="
if have node; then say "node on PATH: $(node -v)"; else say "No node command on PATH."; fi
if [ "$PM" = "apt" ]; then
  dpkg -l 'nodejs*' 2>/dev/null | awk '/^ii/ {print $2, $3}'
else
  rpm -qa 'nodejs' 'alt-nodejs*-nodejs' 'ea-nodejs*' 2>/dev/null | sort
fi
if [ -d "${NVM_DIR:-$HOME/.nvm}" ]; then
  say "nvm is installed for this user. Update nvm versions with: nvm install 22.23.4 (or 24.22.1, 26.12.1)"
fi

say ""
say "== Fixed releases =="
say "Node.js $FIXED"
say "CloudLinux alt-nodejs 12 to 20 carry backported fixes with lower version numbers. Check their changelog:"
say "  rpm -q --changelog alt-nodejs20-nodejs | grep -E 'CVE-2026-'"

if [ "$MODE" = "check" ]; then
  say ""
  say "Check only. Nothing was changed. Run 'sudo bash nodejs-fix-all.sh update' to update."
  exit 0
fi

if [ "$MODE" != "update" ]; then
  say "Unknown mode: $MODE. Use 'check' or 'update'."
  exit 1
fi

say ""
say "== Update =="
say "This updates Node.js packages. Take a backup or snapshot first."
printf 'Type YES to continue: '
read -r ANSWER
[ "$ANSWER" = "YES" ] || { say "Cancelled. Nothing was changed."; exit 1; }

if [ "$PM" = "apt" ]; then
  say "Updating nodejs (apt)..."
  apt-get update && apt-get -y install --only-upgrade nodejs || say "Warning: apt returned an error. Check the output above."
else
  $PM clean all >/dev/null 2>&1
  if [ "$CL" = "yes" ]; then
    say "Updating CloudLinux alt-nodejs packages..."
    $PM -y upgrade 'alt-nodejs*' || say "Warning: alt-nodejs update returned an error. Check the output above."
  fi
  if [ "$CPANEL" = "yes" ]; then
    say "Updating cPanel ea-nodejs packages..."
    $PM -y upgrade 'ea-nodejs*' || say "Warning: ea-nodejs update returned an error. Check the output above."
  fi
  if rpm -q nodejs >/dev/null 2>&1; then
    say "Updating the operating system's nodejs package..."
    $PM -y upgrade nodejs || say "Warning: nodejs update returned an error. Check the output above."
  fi
fi

say ""
say "== Result =="
if have node; then say "node on PATH: $(node -v)"; fi
if [ "$PM" != "apt" ]; then rpm -qa 'nodejs' 'alt-nodejs*-nodejs' 'ea-nodejs*' 2>/dev/null | sort; fi
say ""
say "Now restart your Node.js applications so they run the updated version:"
say "  PM2:          pm2 restart all"
say "  systemd:      systemctl restart <your-app-service>"
say "  cPanel apps:  Setup Node.js App > Restart, for each application"
say "Compare the versions above with the fixed releases: Node.js $FIXED."

Option 2: update by hand

CloudLinux OS 8 and 9 (alt-nodejs)

dnf clean all && dnf upgrade 'alt-nodejs*'

CloudLinux OS 7 (alt-nodejs)

yum clean all && yum update 'alt-nodejs*'

cPanel servers on CloudLinux OS 8 (ea-nodejs22)

dnf upgrade ea-nodejs22

AlmaLinux, Rocky Linux and RHEL (the operating system’s nodejs)

sudo dnf upgrade nodejs

If no update is available yet, the fix has not reached your distribution. Check again later.

Debian and Ubuntu

sudo apt update && sudo apt install --only-upgrade nodejs

If you installed Node.js from NodeSource, this command also updates it once NodeSource publishes the fixed release.

nvm

nvm install 22.23.4      # or 24.22.1, or 26.12.1, for your line
nvm alias default 22.23.4
node -v

Docker and other containers

Pull the fixed Node.js base image, rebuild your image, and redeploy. A running container keeps the old Node.js until you replace it.

docker pull node:22.23.4
docker build -t your-app .
docker compose up -d   # or your deployment command

Restart your applications

Updating the package does not change applications that are already running. Restart each one.

pm2 restart all                         # PM2
systemctl restart your-app.service      # systemd service

On cPanel with CloudLinux, open Setup Node.js App and restart each application.

Verify the fix

For alt-nodejs 22, 24 and 26, check the version. It should be 22.23.4, 24.22.1 or 26.12.1 or later:

rpm -q alt-nodejs22-nodejs alt-nodejs24-nodejs alt-nodejs26-nodejs

For alt-nodejs 12, 14, 16, 18 and 20, the fix is a backport, so the version number stays lower. Check the changelog for the CVE IDs:

rpm -q --changelog alt-nodejs20-nodejs | grep -E 'CVE-2026-'

For any other installation, check the running version:

node -v

End-of-life Node.js

The Node.js project says end-of-life versions are always affected when a security release occurs. CloudLinux has backported fixes for some older alt-nodejs versions, but not for alt-nodejs10 or alt-nodejs19. Move applications on those versions to a supported line.

This is a separate issue from the PHP flaws CVE-2026-109618 and CVE-2026-109619. For those, see our PHP critical security update guide.

Sources

Need help with an update? Open a ticket through @CustomerPanel.

Need help putting this into practice?

Our team can review your setup and help you choose the right plan. Contact @CustomerPanel for support.

View hosting plansContact @CustomerPanel

Frequently asked questions

Which Node.js versions fix CVE-2026-111497?

Node.js 22.23.4, 24.22.1 and 26.12.1. Older Node.js lines are end of life and get no upstream fix.

Do I need to restart my applications after updating Node.js?

Yes. A running application keeps using the old Node.js version until it is restarted. Restart every Node.js application after the update.

How do I check which Node.js version an application uses?

Run node -v in the same environment as the application. On cPanel and CloudLinux, also check the version selected for each application in Setup Node.js App.

What if I use an end-of-life Node.js version?

There is no upstream fix. CloudLinux has released backported fixes for some alt-nodejs versions, but the long-term fix is to move the application to a supported Node.js line.

Will UnderHost update Node.js on my server?

On managed servers and servers with a management plan, our team applies these updates. On an unmanaged VPS or dedicated server, updating is your responsibility, and you can use the helper script in this guide.