🔍 CVE-2026-71851

9.0
CVSS Score
CRITICAL
2026-08-07
2026-10-24 15:10
✅ 완료

🇰🇷 한글 설명

crypto-js 4.0.0 이전 버전에서는 CryptoJS.lib.WordArray.random()이 암호학적으로 안전한 난수원 대신 Math.random()으로 시드된 Multiply-With-Carry 기반 의사난수 생성기를 사용합니다. 이로 인해 128비트 또는 256비트 엔트로피 요청이 실제로는 약 2^39 또는 2^47 개의 탐색 공간으로 축소되어, 일반 하드웨어로도 열거가 가능합니다. 이 함수를 BIP39 복구 구문의 엔트로피 소스로 사용한 지갑 애플리케이션이 영향을 받으며, 공격자는 개인키를 복원하여 자산을 탈취할 수 있습니다.

💡 쉬운 설명

비밀번호나 지갑 복구 문구를 만드는 데 쓰이는 난수가 충분히 무작위하지 않아 추측이 가능합니다. 이 취약점을 가진 프로그램으로 만든 지갑의 코인은 공격자에게 도난당할 수 있습니다.

🇺🇸 원문 (English)

crypto-js is a JavaScript library of crypto standards. Versions of crypto-js prior to 4.0.0 generate randomness in CryptoJS.lib.WordArray.random() using a custom variation of the Multiply-With-Carry pseudorandom number generator, seeded from Math.random(), instead of a cryptographically secure source. This generator was introduced in version 3.1.2-4 and remained present in nearly every 3.x release. Nominal requests for 128 or 256 bits of entropy through this function produce effective search spaces of approximately 2 to the 39th and 2 to the 47th possibilities, small enough to enumerate on commodity hardware. Downstream wallet applications that used CryptoJS.lib.WordArray.random() as the entropy source for BIP39 recovery phrases are affected, and an attacker who enumerates the reduced output space can recover the resulting private keys and control the associated funds. This issue is fixed in version 4.0.0.

📍 영향받는 시스템

crypto-js 4.0.0 미만 3.x 버전(3.1.2-4 이후 대부분)을 사용하는 모든 애플리케이션, 특히 WordArray.random()으로 BIP39 니모닉을 생성하는 암호화폐 지갑

⚔️ 공격 벡터

공격자가 축소된 난수 출력 공간을 열거하여 BIP39 시드와 개인키를 복원한 뒤 해당 주소의 자금을 이체합니다.

🛡️ 대응 방법

crypto-js를 4.0.0 이상으로 업그레이드하고, 취약 버전으로 생성된 지갑 키와 니모닉은 즉시 폐기 후 새로 생성하여 자금을 이동하세요.

🔧 검증 코드

출력에 [email protected] 항목이 나타나면 취약한 버전이 설치된 것이므로 4.0.0 이상으로 업그레이드해야 하며, 출력이 없으면 3.x 버전이 없는 것입니다.

Shell / Script
npm ls crypto-js 2>/dev/null | grep -E 'crypto-js@3\.'

📊 CVSS Vector String

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

💻 영향받는 소프트웨어

Oracle Java SE