Description
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 `$NVM_DIR/alias/lts/` without validating it, and `nvm_normalize_lts` 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/-10*path[$(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 `NVM_NODEJS_ORG_MIRROR` -- 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.
Published: 2026-11-04
Score: 2.1 Low
EPSS: n/a
KEV: No
Impact: Remote code execution via untrusted mirror
Action: Upgrade
AI Analysis

Impact

Node Version Manager stores the version column from a mirror’s index.tab file into a local alias file without validation. When the alias is later resolved, the suffix of an `lts/-N` value is evaluated as shell arithmetic. A crafted alias such as lts/-10*path[$(cmd)1] causes the command substitution to run arbitrary code in the user’s shell context. The vulnerability allows a malicious or compromised mirror, a man‑in‑the‑middle intercepting an http:// mirror, or a misconfigured NVM_NODEJS_ORG_MIRROR to execute commands when the user runs local nvm commands that resolve LTS aliases.

Affected Systems

This flaw affects the nvm-sh:nvm client versions 0.39.6 through 0.40.8. The fix is included in nvm 0.41.0 which limits arithmetic evaluation to numeric offsets and removes rows with invalid version strings.

Risk and Exploitability

The CVSS score of 2.1 reflects the low base severity, but the vulnerability is exploitable only when the attacker can supply a hostile mirror or intercept an http mirror. It is not listed in the CISA KEV catalog, and EPSS is unavailable. When untrusted mirrors are avoided and nvm is run only from trusted project directories, exploitation risk is practically nil. However, in environments that pull from default mirrors over HTTPS the threat remains minimal, whereas using HTTP mirrors poses a higher risk of code execution.

Generated by OpenCVE AI on November 4, 2026 at 22:55 UTC.

Remediation

Vendor Solution

Upgrade to nvm 0.41.0 or later, which only lets an all-digit `lts/-N` offset reach shell arithmetic and drops mirror rows with invalid version strings. (Only needed if using a non-default mirror whose metadata contents you do not trust, or running nvm in untrusted project directories.)


Vendor Workaround

Until upgrading, only run `nvm ls-remote` and LTS-refreshing commands against trusted mirrors over TLS, ensure `NVM_NODEJS_ORG_MIRROR` points only at a trusted endpoint, and do not run nvm in untrusted project directories.


OpenCVE Recommended Actions

  • Upgrade nvm to 0.41.0 or newer to eliminate the shell arithmetic evaluation bug
  • Configure NVM_NODEJS_ORG_MIRROR to point exclusively to a trusted HTTPS mirror and always verify TLS certificates
  • Avoid running nvm ls-remote or LTS-refreshing commands in untrusted directories or those that may contain hijacked .nvmrc files

Generated by OpenCVE AI on November 4, 2026 at 22:55 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Wed, 04 Nov 2026 23:00:00 +0000

Type Values Removed Values Added
First Time appeared Nvm-sh
Nvm-sh nvm
Vendors & Products Nvm-sh
Nvm-sh nvm

Wed, 04 Nov 2026 21:30:00 +0000

Type Values Removed Values Added
Description 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 `$NVM_DIR/alias/lts/` without validating it, and `nvm_normalize_lts` 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/-10*path[$(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 `NVM_NODEJS_ORG_MIRROR` -- 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.
Title nvm evaluates a malicious mirror's index.tab version strings as shell arithmetic via stored LTS aliases
Weaknesses CWE-20
CWE-78
References
Metrics cvssV3_1

{'score': 3.1, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:L/A:N'}

cvssV4_0

{'score': 2.1, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N'}


cve-icon MITRE

Status: PUBLISHED

Assigner: harborist

Published:

Updated: 2026-11-04T21:26:57.967Z

Reserved: 2026-11-03T23:39:04.553Z

Link: CVE-2026-121751

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-11-04T22:17:55.060

Modified: 2026-11-04T22:17:55.060

Link: CVE-2026-121751

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-11-04T23:00:21Z

Weaknesses
  • CWE-20

    Improper Input Validation

  • CWE-78

    Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')