Modern Frontend CVEs

対象CVE: CVE-2026-59869

[緊急警告] js-yamlの深刻なDoS脆弱性 (GHSA-52cp-r559-cp3m) と対策

js-yamlライブラリに、特定の悪意あるYAMLデータをパースする際にCPUを過剰消費し、サービス停止を引き起こす深刻なDoS脆弱性が発見されました。フロントエンド開発者の皆さんも無関係ではありません。直ちにライブラリをアップデートし、このリスクを解消しましょう。

はじめに:なぜフロントエンドエンジニアも注目すべきか

皆さんは「js-yaml」というライブラリをご存知でしょうか? 直接、皆さんのフロントエンドコードで動かすことは少ないかもしれませんが、Node.jsベースのビルドツール(例: Webpack, Rollupの設定)や、CI/CDパイプラインの設定、またはバックエンドと連携するツールなどでYAML形式が使われるケースは多々あります。この脆弱性がバックエンドシステムやビルドプロセスに影響を及ぼすことで、間接的に私たちの開発にも支障をきたす可能性があります。

脆弱性の概要 (CVE-2026-59869 / GHSA-52cp-r559-cp3m)

今回報告された脆弱性は、`js-yaml`ライブラリが特定の悪意あるYAMLデータをパースする際に、CPUを過剰に消費し、結果としてサービス妨害(DoS)を引き起こす可能性があるというものです。深刻度は「High」と評価されており、迅速な対応が求められます。

特に、この脆弱性の悪質な点は、入力データのサイズが少し増えるだけで、パース処理時間が「二次曲線的に」増大してしまう点です。これは、攻撃者がわずかな入力で大量の計算リソースを消費させられることを意味し、システム全体のパフォーマンスを急速に低下させ、最終的にはサービス停止に追い込むことができます。

具体的なメカニズム:「マージキー」の悪用

このDoS攻撃は、YAMLの便利な機能の一つである「マージキー (`<<:`)」を悪用して引き起こされます。マージキーは、YAMLドキュメント内で定義済みのキーと値を別のマッピングに継承させる機能です。例えば、共通の設定を複数のブロックで再利用する際に役立ちます。

しかし、この機能を使ってキー定義を連鎖的に継承させるような、非常に複雑な構造のYAMLデータ(例: `a0`を`a1`がマージし、`a1`を`a2`がマージ…といった、ネストされたマージ)が入力された場合、`js-yaml`ライブラリはパース時に各マッピングで継承されるキーを繰り返し列挙する必要が生じます。

この「繰り返し列挙」のプロセスが非常にコストが高く、入力サイズが線形に増加するのに対して、処理時間が二次曲線的に増加するというパフォーマンス上の問題を引き起こします。結果として、サーバーのCPU使用率が急上昇し、アプリケーションが応答不能に陥り、サービスが停止する事態となります。

影響範囲とリスク

`js-yaml`を直接、あるいは他のパッケージの依存関係として間接的に利用しているすべてのシステムが影響を受ける可能性があります。特に、ユーザーからの入力や外部から取得したYAMLデータをパースするアプリケーションは、このDoS攻撃の標的となるリスクが高いです。フロントエンド開発者の文脈では、以下のようなケースで影響が考えられます。

・**ビルドツールや設定ファイル**: Webpackなどのビルド設定や、タスクランナーの設定にYAMLを使用している場合。 ・**CI/CDパイプライン**: Jenkins, GitHub ActionsなどのCI/CD環境で、外部から取得したYAML設定ファイルをパースしている場合。 ・**Node.jsユーティリティ**: Node.js環境でサーバーサイドレンダリング(SSR)やAPIゲートウェイの一部として、YAML設定を読み込むユーティリティを使用している場合。

対策:直ちにアップデートを!

この脆弱性に対する修正が既にリリースされています。最も効果的で推奨される対策は、**`js-yaml`ライブラリを直ちに最新バージョンにアップデートすることです。**

修正版では、1回のパース呼び出しでマージできるキーの総数にデフォルトで「1万キー」という制限が設けられました。これにより、マージ機能に関連する潜在的なエッジケースが効果的に防がれ、パフォーマンス問題やDoS攻撃のリスクが大幅に軽減されます。

プロジェクトの`package.json`を確認し、`js-yaml`が依存関係にある場合は、以下のコマンドでアップデートしてください。

```bash npm update js-yaml # または yarn upgrade js-yaml ```

もし`js-yaml`が間接的な依存関係(例えば、別のパッケージが`js-yaml`に依存している場合)の場合は、`npm list js-yaml`や`yarn why js-yaml`コマンドで確認し、可能であれば親のパッケージも最新版にアップデートを検討してください。

まとめ

`js-yaml`の深刻なDoS脆弱性は、悪意あるYAML入力によってシステムリソースを枯渇させ、サービス停止を引き起こす可能性があります。フロントエンド開発者の皆さんも、自身のプロジェクトやCI/CDプロセスで使用されていないかを確認し、速やかにライブラリを最新バージョンにアップデートして安全を確保しましょう。定期的な依存ライブラリの棚卸しとアップデートの習慣が、このようなリスクから私たちを守る重要な習慣となります。

← ブログ一覧に戻る