{"id":"CVE-2026-15921","summary":"nvm path traversal via a malicious mirror's LTS codename writes outside the alias directory","details":"Node Version Manager (nvm) is a POSIX-compliant shell function for managing multiple node.js versions. In versions 0.32.1 through 0.40.5, `nvm ls-remote` (and other commands that refresh remote LTS aliases, such as `nvm install --lts`) parse the node.js mirror's `index.tab` and use each release's LTS codename field as an alias filename without validating it. A malicious, compromised, or man-in-the-middled mirror can return an LTS codename containing path-traversal sequences such as `../../../.bashrc`, causing nvm to write the associated version string to a path outside `$NVM_DIR/alias`. With the default layout (`$NVM_DIR` is `~/.nvm`), this can create or overwrite files in the user's home directory, including shell startup files, which can lead to code execution in a later shell session. Exploitation requires the victim to use a hostile mirror -- via a compromised mirror or CDN, a network man-in-the-middle, or a maliciously configured `NVM_NODEJS_ORG_MIRROR`/`NVM_IOJS_ORG_MIRROR` -- and to run an affected command. Version 0.40.6 validates remote LTS codenames as safe alias filenames and rejects `..` path components when writing alias files.","aliases":["GHSA-4ghp-wxpw-rhpg"],"modified":"2026-07-18T03:41:54.446999295Z","published":"2026-07-15T21:16:46.936Z","database_specific":{"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/15xxx/CVE-2026-15921.json","unresolved_ranges":[{"extracted_events":[{"introduced":"0.32.1"},{"fixed":"0.40.6"}],"source":"AFFECTED_FIELD"}],"cna_assigner":"harborist","cwe_ids":["CWE-22","CWE-73"]},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/15xxx/CVE-2026-15921.json"},{"type":"ADVISORY","url":"https://github.com/nvm-sh/nvm/security/advisories/GHSA-4ghp-wxpw-rhpg"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-15921"},{"type":"FIX","url":"https://github.com/nvm-sh/nvm/commit/9275c5badda1d9d0cdad6f34598a111033eadb42"},{"type":"PACKAGE","url":"https://github.com/nvm-sh/nvm"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/nvm-sh/nvm","events":[{"introduced":"589a9112bd0516befea756cc8e976fb1c4b031e9"},{"fixed":"1889911f0841e669de0be5bd02c737a3f1fd20fa"},{"fixed":"9275c5badda1d9d0cdad6f34598a111033eadb42"}],"database_specific":{"extracted_events":[{"introduced":"0.32.1"},{"fixed":"0.40.5"}],"source":["DESCRIPTION","REFERENCES"]}}],"versions":["v0.40.5","v0.40.4","v0.40.3","v0.40.2","v0.40.1","v0.40.0","v0.39.7","v0.39.6","v0.39.5","v0.39.4","v0.39.3","v0.39.2","v0.39.1","v0.39.0","v0.38.0","v0.37.2","v0.37.1","v0.37.0","v0.36.0","v0.35.3","v0.35.2","v0.35.1","v0.35.0","v0.34.0","v0.33.9","v0.33.8","v0.33.7","v0.33.6","v0.33.5","v0.33.4","v0.33.3","v0.33.2","v0.33.1","v0.33.0","v0.32.1"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-15921.json"}}],"schema_version":"1.7.5","severity":[{"type":"CVSS_V4","score":"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"}]}