CVE-2026-73086
CVE-2026-73086 is a single-request CSPRNG corruption that degrades cryptographic randomness to deterministic output across an entire process. When nanoid receives a size parameter of 2147483648 (2^31), signed 32-bit integer overflow wraps this to a negative poolOffset value, corrupting the internal entropy pool. Every subsequent call to nanoid()—for session IDs, CSRF tokens, API keys—returns the literal string 'uuuuuuuuuuuuuuuuuuuuu'. The process continues running normally. No errors, no exceptions, no observable symptoms beyond the output itself. The attack surface is any endpoint that accepts a user-controlled length parameter and passes it to nanoid. If your application exposes nanoid(size) where size derives from request input, one crafted request poisons the token stream for that process until restart. An attacker who triggers this condition doesn't need to observe the output—they can request a login session afterward and predict the token they receive. Detection is the hard part. Standard SIEM rules look for errors or anomalies in value structure. This produces structurally valid 21-character strings. The only reliable signal is entropy collapse: repeated identical tokens where randomness is expected. Review your authentication logs for collision events—most systems don't log these because they assume collisions are impossible. If you have centralized token generation, monitor for duplicate outputs within short time windows. The patch in versions 3.3.12 and 5.1.11 addresses the immediate coercion issue, but the architectural question remains: does the fix add only a bounds check, or does it refactor the shared poolOffset state to prevent other corruption paths? Monitor your dependency trees for nanoid versions below these patches. Given the library's transitive dependency depth, expect slow remediation across the ecosystem—some downstream projects won't update for months.
Reviewed through automated stages and approved by a human before publication.