CVE-2026-121751: nvm evaluates a malicious mirror's index.tab version strings as shell arithmetic via stored LTS aliases

Published Nov 4, 2026
·
Updated

Node Version Manager (nvm) is a POSIX-compliant shell function for managing multiple node.js versions. In versions 0.39.6 through 0.40.8, nvm ls-remote (and other commands that refresh remote LTS aliases) store the version column of the mirror's index.tab in $NVMDIR/alias/lts/ without validating it, and nvmnormalizelts later evaluates any suffix of an lts/-N value inside shell arithmetic $((N+1)). Under bash and zsh, arithmetic evaluation expands command substitutions in array subscripts, so a stored value such as lts/-10path[$(cmd)1] runs cmd as the user when the alias is later resolved by purely local commands (nvm ls, nvm alias, nvm use --lts, nvm which lts/), and in every new shell when the default alias is lts/. Exploitation requires the victim to use a hostile mirror -- via a compromised mirror or CDN, a network man-in-the-middle of an http:// mirror, or a maliciously configured NVMNODEJSORGMIRROR -- and to run an affected command. The same sink is also reachable from a project .nvmrc, which is treated as hardening. dash is not affected. Version 0.41.0 only passes an all-digit lts/-N offset to arithmetic and drops index.tab rows whose version is not a valid version string.

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade nvm to a version that resolves this vulnerability.

    Fixed in 0.41.0

Event History

Nov 4, 2026
CVE Published
via MITRE·09:26 PM
Data Sourced
via MITRE·09:26 PM
RemedyDescriptionSeverityWeakness
Data Sourced
via NVD·10:17 PM
DescriptionSeverityWeakness

Frequently Asked Questions

1

Who is exposed to this issue?

Users running nvm 0.39.6 through 0.40.8 under bash or zsh are exposed if they refresh LTS alias data from a hostile mirror. dash is not affected.

2

What does an attacker need to exploit it?

The attacker must control or tamper with the configured Node.js mirror, such as through a compromised mirror or CDN, a man-in-the-middle position against an http:// mirror, or a malicious NVM_NODEJS_ORG_MIRROR setting. The victim must then run a command that refreshes or resolves the affected LTS alias data.

3

Can the payload execute without another network request?

Yes. Once a malicious version value has been stored in $NVM_DIR/alias/lts/, local commands including nvm ls, nvm alias, nvm use --lts, and nvm which lts/ can trigger execution. If the default alias is lts/*, execution can occur in each new shell.

4

What can be done if upgrading is not immediately possible?

Avoid untrusted or http:// mirrors and review the configured NVM_NODEJS_ORG_MIRROR value. Remove suspicious stored LTS alias files under $NVM_DIR/alias/lts/ before resolving LTS aliases.

5

How is this addressed in the fixed release?

Version 0.41.0 restricts the lts/-N offset passed to shell arithmetic to all-digit values and drops index.tab rows with invalid version fields.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203