[緊急] js-tomlのDoS脆弱性 (GHSA-wp3c-266w-4qfq) とフロントエンド開発への影響
js-tomlライブラリにおける深刻なDoS脆弱性について (GHSA-wp3c-266w-4qfq / CVE-2026-49293)
TOML(Tom's Obvious, Minimal Language)は、シンプルな設定ファイル形式として広く利用されており、JavaScriptエコシステムでは `js-toml` などのライブラリでパースされます。この度、`js-toml` ライブラリのバージョン1.1.0以前に、悪意のある細工が可能なTOMLファイルによってサービス停止(DoS)を引き起こす脆弱性が確認されました。深刻度は「High」と評価されており、迅速な対応が求められます。
この脆弱性は、特にNode.js環境で動作するアプリケーションに深刻な影響を与え、サーバーやビルドプロセスの応答不能を引き起こす可能性があります。
脆弱性の詳細: 非効率なBigInt変換が引き起こすCPU枯渇
この問題は、16進数(`0x`)、8進数(`0o`)、2進数(`0b`)といったプレフィックス付きの整数リテラルを `BigInt` 型に変換する `js-toml` の内部処理に起因します。
旧バージョンでは、この `BigInt` 変換処理に非効率なカスタムアルゴリズムが採用されており、リテラルの長さに比例して計算量が二次関数的(O(n²))に増加してしまいます。具体的には、約500KB程度の非常に長い数値リテラルを含むTOMLファイルをパースすると、現代のPCのCPUコアを数秒から数十秒間占有する可能性があります。
Node.jsのようにシングルスレッドで動作する環境では、CPUが長時間占有されるとJavaScriptのイベントループが完全にブロックされます。これにより、その間、他のすべてのリクエスト処理や非同期処理が停止し、アプリケーション全体が応答不能なDoS状態に陥ってしまいます。
影響を受ける条件とフロントエンド開発者への関連性
以下の条件に合致する場合、あなたのプロジェクトがこの脆弱性の影響を受ける可能性があります。
<ul><li><strong>`js-toml` のバージョンが `1.1.0` 以下である:</strong> ご自身の `package.json` や `package-lock.json`/`yarn.lock` を確認し、`js-toml` のバージョンが該当しないか確認してください。</li><li><strong>アプリケーションがTOMLファイルをパースしている:</strong> `js-toml` の `load()` 関数などを利用して、ユーザーからの入力や外部から取得したTOMLファイルをパースしている場合に影響を受けます。例えば、設定ファイルのアップロード機能、CI/CDシステムでの外部リポジトリのTOML処理、IDEのプラグイン、ビルドツールなどが該当します。</li><li><strong>長い基数プレフィックス付き整数リテラルを含むTOML:</strong> 通常の利用ではまず見られないような、異常に長い形式の数値リテラルを含むTOMLファイルが攻撃のターゲットとなります。</li></ul>
<strong>なぜフロントエンド開発者が注意すべきか?</strong>
直接ブラウザで `js-toml` を使うケースは稀かもしれませんが、多くのフロントエンドプロジェクトはNode.jsベースのビルドツール(Webpack, Vite, Rollupなど)やCI/CDシステムに深く依存しています。これらのビルドツールやプラグイン、あるいはプロジェクトの設定ファイル管理などで間接的に `js-toml` が使われている可能性はゼロではありません。
例えば、CI/CDパイプライン上で外部リポジトリから取得したTOML設定をパースする際などに悪用されると、ビルドプロセスの停止や開発フローの阻害につながる可能性があります。もしあなたがビルドツールや開発用サーバーを構築している場合、依存関係ツリーの中に `js-toml` が含まれていないか、念のため確認することが重要です。
推奨される対応策
開発元から提供されている脆弱性修正済みのバージョン(`1.1.0` を超えるバージョン)に、できるだけ早くアップデートしてください。`npm install js-toml@latest` や `yarn upgrade js-toml` などで更新できます。
修正バージョンでは、非効率なBigInt変換処理がV8エンジンの高速なネイティブ `BigInt()` コンストラクタ(例: `BigInt('0x' + digits)`)に置き換えられており、処理速度が大幅に改善されています。
もしTOMLファイルを入力として受け取る機能がある場合、そのサイズや内容(特に数値リテラルの長さ)について、アプリケーション側で厳格な検証を行い、異常に長いリテラルは拒否する仕組みの導入を検討してください。修正バージョンでは、リテラルの長さに上限を設けるオプションも追加されていますので、これも活用を検討しましょう。
まとめ
本脆弱性は、`js-toml` を使用しているNode.jsベースのアプリケーションにおいて、容易にサービス停止を引き起こす可能性があるため、軽視できない問題です。自身のプロジェクトの依存関係を確認し、`js-toml` を使用している場合は、速やかに最新バージョンへのアップデートを実施してください。
セキュリティは常に継続的な取り組みです。今後も依存ライブラリの脆弱性情報に注意を払い、安全な開発を心がけましょう。