Math.random() 해킹: Xorshift128+ 역변환을 위한 개선된 알고리즘
2025-09-04

최근 발견된 취약점 CVE-2025-7783은 Node.js 생태계의 에지 케이스를 악용하여 axios 또는 더 이상 사용되지 않는 request 라이브러리를 사용하는 애플리케이션에 영향을 미칩니다. 이 공격은 JavaScript의 Math.random()의 5개의 연속된 출력을 필요로 하며, z3 솔버를 사용하여 미래의 출력을 예측할 수 있게 합니다. 이 블로그 게시물에서는 더 효율적인 접근 방식을 제시합니다. 저자는 Math.random()에서 사용되는 Xorshift128+ 알고리즘을 역변환하기 위한 226개의 연산으로 이루어진 알고리즘을 보여줍니다. 이는 두 개의 완전한 64비트 출력을 필요로 합니다. Xorshift128+를 분석함으로써, R1의 최하위 26비트만 알고 있어도 L1과 R2의 나머지 비트를 결정할 수 있습니다. 이 게시물에서는 이것을 완전한 Math.random() 함수에 적용하는 것에 대해서도 논의하고, 비트 절단으로 인한 과제를 강조하며, 세 개의 출력을 사용하는 솔루션을 제안합니다. 마지막으로, 저자는 연구에 ChatGPT를 사용한 경험을 공유하며, 그 잠재력을 보여주는 동시에 현재의 한계도 인정합니다.
개발