[緊急] Node.jsアプリを停止させる「image-size」の深刻なDoS脆弱性 (CVE-2025-71330 / GHSA-w3rx-r6r6-pgpr)
はじめに:なぜフロントエンドエンジニアがこの脆弱性を知るべきか
フロントエンド開発に携わる皆さんの中には、「Node.jsのサーバーサイドライブラリの脆弱性は、バックエンドチームが対応するもの」と考えている方もいるかもしれません。しかし、多くの場合、Webアプリケーションはフロントエンドとバックエンドが密接に連携しており、APIを通じて画像アップロードなどを処理するバックエンドがこのような脆弱性を抱えていると、サービス全体に影響が及びます。この脆弱性もその一つであり、最悪の場合、アプリケーション全体が停止する可能性があります。自身の担当範囲だけでなく、サービス全体のセキュリティを意識することが重要です。
脆弱性の概要:image-sizeライブラリの危険性
今回報告された脆弱性 (CVE-2025-71330 / GHSA-w3rx-r6r6-pgpr) は、JavaScriptで様々な画像ファイルのサイズを高速に取得するライブラリ「image-size」のバージョン2.0.2以前に存在します。深刻度は「High」に分類されており、悪用されると「サービス拒否(Denial of Service; DoS)」の状態に陥る可能性があります。具体的には、細工された特定の画像ファイルをこのライブラリで処理しようとすると、Node.jsサーバーが無限ループに陥り、全ての処理が停止してしまうというものです。
技術的な詳細:なぜ無限ループが発生するのか?
この脆弱性は、特にmacOSのアイコンファイル形式であるICNS(Apple Icon Image)ファイルの解析処理に起因します。攻撃者は、見た目は正常なICNSファイルでありながら、内部の「エントリ長フィールド」の値を不正にゼロに設定したファイルを生成することができます。image-sizeライブラリがこのような細工されたICNSファイルを解析しようとすると、ICNSパーサー内部でファイルオフセットが正しくインクリメントされません。
結果として、パーサーは同じ部分を繰り返し読み取ろうとし、無限ループに陥ります。Node.jsはシングルスレッドでイベントループを処理するため、この無限ループが一度発生すると、そのイベントループが永久にブロックされてしまいます。これにより、Node.jsアプリケーションは新しいリクエストを受け付けられなくなり、既に処理中のリクエストも完了できず、完全にサービスが応答不能な状態(サービス拒否)に陥ります。
これは、例えばユーザーがWebフォームから画像をアップロードする機能や、外部APIから取得した画像をサーバーサイドで処理する機能を持つアプリケーションで悪用される可能性があります。
あなたのプロジェクトは影響を受けるか?確認すべきポイント
以下の条件に当てはまる場合、あなたの関わるプロジェクトがこの脆弱性の影響を受ける可能性があります。
<ul><li>バックエンドのNode.jsアプリケーションが、<code>image-size</code>ライブラリのバージョン2.0.2以前を使用している場合。</li><li>そのアプリケーションが、ユーザーからアップロードされた画像、または外部から取得した画像を処理する機能を持っており、その中にICNS形式の画像が含まれる可能性がある場合。</li></ul>
フロントエンドエンジニアが直接`image-size`をクライアントサイドのJavaScriptで利用することは稀ですが、BFF (Backend for Frontend) の開発や、Node.jsで動作する開発サーバーやビルドツール(例えば画像最適化プラグインなど)の依存関係として含まれている可能性もゼロではありません。特に、APIサーバーや画像処理サービスなど、バックエンド側での利用状況について、バックエンドチームと連携して確認することが不可欠です。
今すぐ取るべき対応策
この脆弱性への対応は緊急性が高いため、速やかに以下の対策を講じてください。
これが最も推奨される対応策です。脆弱性はバージョン2.0.3以降で修正されています。プロジェクトの依存関係を管理している`package.json`や`yarn.lock`、`pnpm-lock.yaml`などを確認し、`image-size`のバージョンを最新版に更新してください。
<code>npm install image-size@latest</code> または <code>yarn upgrade image-size</code>
あなたが直接バックエンドコードに触れることがない場合でも、この情報をバックエンドチームに共有し、彼らのサービスがこのライブラリを使用していないか、そして使用している場合は速やかにアップデートを促してください。サービス全体を守るためには、チーム間の協力が不可欠です。
もしアプリケーションがICNS画像を処理する必要が全くないのであれば、アップロードされる画像や外部から取得する画像のファイルタイプを厳しく検証し、ICNS画像の処理自体をブロックすることも検討してください。MIMEタイプやマジックナンバー(ファイルの先頭バイト)による検証が有効です。
まとめ
「image-size」ライブラリのDoS脆弱性は、Node.jsアプリケーションにとって深刻な脅威となり得ます。フロントエンドエンジニアの皆さんも、自身が開発に関わるサービス全体を視野に入れ、この情報をバックエンドチームと共有し、迅速な対応を促してください。継続的な依存関係のセキュリティ監査とアップデートは、安全なWebサービスを維持するための基本です。常に最新のセキュリティ情報にアンテナを張り、プロジェクトの安全性を確保していきましょう。