Math.random()の解読:Xorshift128+を反転させるための改良アルゴリズム
2025-09-04

最近の脆弱性CVE-2025-7783は、Node.jsエコシステムにおけるエッジケースを悪用し、axiosや非推奨のrequestライブラリを使用するアプリケーションに影響を与えます。この攻撃は、JavaScriptのMath.random()の5つの連続した出力を必要とし、z3ソルバーを使用して将来の出力を予測することを可能にします。このブログ記事では、より効率的なアプローチを紹介します。著者は、Math.random()で使用されているXorshift128+アルゴリズムを反転させるための226演算のアルゴリズムを示しています。これは、2つの完全な64ビット出力を必要とします。Xorshift128+を分析することにより、R1の最下位26ビットのみを知っていれば、L1とR2の残りのビットを決定できます。この記事では、これを完全なMath.random()関数に適用することについても議論し、ビットの切り捨てによる課題を強調し、3つの出力を使用するソリューションを提案しています。最後に、著者は研究にChatGPTを使用する経験を共有し、その可能性を示しながら、現在の限界も認めています。
開発