🔍 CVE-2026-73086

7.4
CVSS Score
HIGH
2026-08-11
2026-10-24 15:10
✅ 완료

🇰🇷 한글 설명

nanoid는 JavaScript용 보안 URL 친화적 고유 문자열 ID 생성기입니다. 3.3.12 및 5.1.11 이전 버전에서 nanoid(size) 함수가 사용자 입력 size 값을 부호 있는 32비트 정수로 변환하여 2147483648이 -2147483648로 바뀌고, 이로 인해 프로세스 전역 CSPRNG poolOffset이 손상되어 이후 세션 토큰, CSRF 토큰, API 키 등이 프로세스 재시작 전까지 예측 가능한 문자열 "uuuuuuuuuuuuuuuuuuuuu"로 고정될 수 있습니다.

💡 쉬운 설명

nanoid로 만든 보안 토큰과 ID가 특정 입력으로 인해 항상 같은 값으로 고정될 수 있습니다. 공격자가 이를 예측하면 세션 탈취나 인증 우회가 가능해집니다.

🇺🇸 원문 (English)

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.

📍 영향받는 시스템

nanoid 3.3.12 미만 및 5.1.11 미만 버전을 사용하는 Node.js 애플리케이션

⚔️ 공격 벡터

공격자가 size 파라미터에 2147483648을 전달해 CSPRNG 풀을 손상시킨 뒤, 생성되는 토큰을 예측하여 세션·CSRF·API 키를 악용

🛡️ 대응 방법

nanoid를 3.3.12 이상 또는 5.1.11 이상으로 업그레이드하고 애플리케이션을 재시작

🔧 검증 코드

출력된 nanoid 버전이 3.3.12 미만 또는 5.1.11 미만이면 취약하므로 업그레이드가 필요하고, 3.3.12 이상(3.x) 또는 5.1.11 이상(5.x)이면 패치된 것입니다.

Shell / Script
npm ls nanoid 2>/dev/null | grep nanoid

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N

💻 영향받는 소프트웨어

Oracle Java SE