CVE-2026-73086
HighCVSS 7.4Exploitation Probability (EPSS)
Low risk22th percentile - higher than 22% of all known CVEs
Summary
nanoid prior to versions 3.3.12 and 5.1.11 has a vulnerability in the nanoid(size) function that coerces the size parameter to a signed 32-bit integer, potentially corrupting the CSPRNG state and generating deterministic identifiers.
Risk Assessment
An attacker can predict session tokens, API keys, and other identifiers, leading to security compromise.
Recommendation
Update nanoid to version 3.3.12 or 5.1.11 (or later).
Other vulnerabilities in nanoid
See all- CVE-2026-67214Medium
The nanoid (Nano ID) library before versions 3.3.16 and 5.1.16 contains an infinite loop in the customAlphabet and nanoid functions of its non-secure module. When given a negative size, the loop counter is decremented from a negative value and never reaches its termination condition, hanging the calling thread.
- CVE-2026-67213Medium
In the nanoid (Nano ID) library before version 5.1.6, there is an infinite loop in the customAlphabet and customRandom functions. When these functions are configured with a size of 0, the internal generation loop never satisfies its exit condition and spins indefinitely, hanging the calling thread.
Original NVD description (English source)
nanoid is a secure, URL-friendly, unique string ID generator for JavaScript. Prior to versions 3.3.12 and 5.1.11, the nanoid(size) function in index.js and index.cjs coerces the user-influenced size parameter to a signed 32-bit integer, allowing a value of 2147483648 to become -2147483648 and corrupt the process-wide CSPRNG poolOffset in fillPool(), which causes subsequent session tokens, CSRF tokens, API keys, and unique identifiers to become the deterministic string "uuuuuuuuuuuuuuuuuuuuu" until the process restarts. This issue is fixed in versions 3.3.12 and 5.1.11.
Vulnerability data from NVD (NIST) · CISA KEV · EPSS

