bn.js の による DoS 脆弱性 - 無限ループ 概要 (すべての 5.2.2 およびそれ以前のバージョン) において、 を呼び出すと インスタンスの内部状態が破壊され、 、 、および他のメソッドが無限ループに陥ります。これによりプロセスが無限にハングアップします。 影響を受けるパッケージ パッケージ: エコシステム:npm リポジトリ:https://github.com/indutny/bn.js 影響を受けるバージョン:5.2.2(最新)までの全バージョン CWE: CWE-835(到達不可能な終端条件を持つループ) 重大度:中 発見過程 暗号化用 JavaScript ライブラリのファジングテスト中に、 の呼び出しが内部の一貫性のない オブジェクトを生成し、最終的に無限ループを引き起こすことが発見されました。 根本原因分析 問題は メソッド内にあります。 が 0 の場合、状態の一貫性が失われ、結果として メソッドに依存するループが正しく終了しなくなります。 概念実証 (PoC) 提示されている PoC コードは、 の呼び出しが無限ループを引き起こし、サービス妨害 (DoS) をトリガーすることを示しています。 環境 OS: Ubuntu (VMware 仮想環境) Node.js: v18+(他のバージョンでも再現可能) bn.js: 5.2.2(最新)、またすべての以前のバージョンも影響を受ける 影響 は 5,670 以上の依存パッケージを持っており、その中には重要な暗号化ライブラリが含まれます。これはブロックチェーン/Web3 および TLS/SSL アプリケーションで広く使用されています。 に渡される 引数に影響を与えることができるアプリケーションはすべて攻撃の対象となり、プロセスのハングアップを引き起こす可能性があります。 推奨される修正措置 メソッドの末尾に が 0 であることのチェックを追加し、状態の一貫性の問題を回避します。 メンテナーの状況 類似の問題は 2018 年にすでに報告されていましたが、未だに修正されておらず、リポジトリのメンテナンス活動も活発ではありません。 タイムライン 2026-02-08: 脆弱性の発見および PoC の作成 2026-02-08: Snyk 脆弱性開示プログラムへの提出 謝辞 Kr0emer