CVE-2026-121747
MediumCVSS 5.5Exploitation Probability (EPSS)
Low risk8th percentile - higher than 8% of all known CVEs
Summary
In nvm versions 0.2.0 through 0.40.8, nvm did not check whether .nvmrc is a symbolic link. A repository or archive shipping .nvmrc as a symlink to another file (e.g., ../../.npmrc or /proc/self/environ) caused nvm use, install, which, exec, run, or nvm-exec to read that file and print its contents in the invalid-.nvmrc message, which an attacker could observe e.g. in a CI log.
Risk Assessment
May lead to leakage of sensitive data from files accessible to the victim, especially in CI/CD environments.
Recommendation
Update nvm to version 0.41.0 or later and update the copy of the cdnvm hook from the README if used.
Other vulnerabilities in nvm
See all- CVE-2026-121746Medium
In nvm versions 0.40.0 through 0.40.8, nvm use --save and nvm install --save (or -w) wrote the resolved version to $PWD/.nvmrc using tee, which follows symbolic links. A repository committing .nvmrc as a symlink to a path outside itself caused --save to truncate any user-writable file (e.g., a shell startup file or ~/.ssh/authorized_keys) and replace its contents with the version string.
- CVE-2026-118905High
In nvm versions 0.31.2 through 0.40.5, nvm_ls filters installed versions with a sed program that embeds the requested version pattern in a \#...# address, escaping . and # but not backslash. A version string containing # closes the address early and the rest is parsed as sed commands, allowing shell command execution with GNU sed or file read/write with BSD sed.
- CVE-2026-94185Medium
nvm before 0.40.8 is vulnerable to path traversal in nvm_alias(), where a requested version or alias is treated as a filename under $NVM_DIR/alias without containment checks. A name containing '..' allows reading the first non-comment line of any file readable by the user, e.g. via .nvmrc in an untrusted repository. There is no integrity or availability impact and no code execution.
- CVE-2026-15921Low
Node Version Manager (nvm) versions 0.32.1 through 0.40.5 are vulnerable to path traversal when parsing LTS codenames from a mirror. A malicious mirror can inject path sequences like "../../../.bashrc", causing nvm to write version strings outside the intended alias directory, potentially overwriting shell startup files.
- CVE-2026-10796High
nvm (Node Version Manager) through 0.40.4 executes arbitrary commands from version strings supplied by the configured Node.js/io.js mirror. An attacker who controls the mirror or performs a man-in-the-middle attack on a non-TLS connection can run arbitrary commands on the victim's system.
Original NVD description (English source)
Node Version Manager (nvm) is a POSIX-compliant shell function for managing multiple node.js versions. In versions 0.2.0 through 0.40.8, nvm does not check whether `.nvmrc` is a symbolic link. A repository or archive that ships `.nvmrc` as a symlink to another file (for example `../../.npmrc`, or `/proc/self/environ` on Linux) makes a plain `nvm use`, `nvm install`, `nvm which`, `nvm exec`, `nvm run`, or `nvm-exec` read that file and print its contents in the invalid-`.nvmrc` message (even with `--silent`) or, for a one-line file, in the `Found ... with version <...>` message; with the README's zsh `load-nvmrc` or bash `cdnvm` hook installed, entering the directory is enough. nvm sends the content nowhere; the attacker learns it only where they can see the victim's output, such as a CI log for a contributed branch. Version 0.41.0 still follows a symlinked `.nvmrc`, so deliberate links to another version file keep working, but never prints its content, and accepts it only if it contains a version or the name of an existing alias; the README's bash `cdnvm` hook, which read `.nvmrc` itself, now gets the version from nvm, so users of that hook must also update their copy of it.
Vulnerability data from NVD (NIST) · CISA KEV · EPSS

