[緊急解説] Fastifyの`@fastify/accepts-serializer`にDoS脆弱性 - 即時アップデートを!
フロントエンドエンジニアの皆さんも無関係ではない!FastifyのDoS脆弱性
こんにちは、フロントエンドエンジニアの皆さん。今回は、バックエンドのフレームワークであるFastifyのプラグインに関する重要なセキュリティ脆弱性についてお知らせします。一見、フロントエンドとは直接関係ないように思えるかもしれませんが、BFF (Backend For Frontend) の開発や、フルスタックな環境でFastifyが利用されているケースでは、この情報が非常に重要になります。ぜひ最後まで読んで、ご自身のプロジェクトに影響がないか確認してください。
脆弱性「GHSA-qxhc-wx3p-2wmg (CVE-2026-7768)」の概要
今回報告されたのは、Fastifyプラグインの一つである`@fastify/accepts-serializer`におけるサービス拒否(DoS)の脆弱性です。このプラグインは、HTTPリクエストの`Accept`ヘッダーに基づいて、最適なシリアライザーを選択した結果をキャッシュする機能を提供します。
問題は、このキャッシュ機構にありました。具体的には、キャッシュにサイズ制限が設けられておらず、また不要なデータを削除する仕組み(エビクションポリシー)も欠如していたため、キャッシュが無限に増大する可能性があったのです。
攻撃の仕組みと深刻な影響
認証されていない攻撃者が、内容が少しずつ異なる`Accept`ヘッダーを大量に含むリクエストを繰り返し送信することで、このキャッシュを意図的に際限なく増大させることが可能でした。例えば、`Accept: text/html; q=0.9, application/json; q=0.8, * /*; q=0.7`, `Accept: text/plain; q=0.9, application/xml; q=0.8, * /*; q=0.7` のように微妙に異なるヘッダーを送り続けると、キャッシュには異なるエントリがどんどん追加されていきます。
結果として、Fastifyを実行しているNode.jsプロセスのメモリ(ヒープ)が枯渇し、アプリケーションがクラッシュ。サーバーがサービスを提供できなくなる、いわゆる「サービス拒否(Denial of Service; DoS)」状態に陥るリスクがありました。これは、ユーザーがWebサイトやAPIにアクセスできなくなることを意味し、ビジネスに甚大な影響を与える可能性があります。
影響を受けるFastifyアプリケーション
この脆弱性の影響を受けるのは、Fastifyアプリケーションが`@fastify/accepts-serializer`プラグインを明示的に、あるいは依存関係のどこかで間接的に使用している場合です。ご自身のプロジェクトの`package.json`や依存関係ツリーを確認し、このプラグインが利用されていないか確認してください。
即時対応!推奨される対策
この脆弱性に対する唯一かつ必須の対策は、`@fastify/accepts-serializer`プラグインのアップデートです。
1. **`@fastify/accepts-serializer`をバージョン`6.0.4`以上にアップデートしてください。**
このバージョンでは、キャッシュがLRU(Least Recently Used:最近最も使われていないものを削除する)アルゴリズムに基づき、デフォルトで100エントリのサイズ制限が設けられました。これにより、キャッシュが無限に増大する問題が解消されます。
2. **(任意) `cacheSize`オプションでキャッシュサイズを調整**
アップデート後、もし必要であれば、プラグインの初期化時に新しい`cacheSize`オプションを使用して、キャッシュの最大エントリ数を調整することも可能です。
この脆弱性に対する既知の回避策は存在せず、**ソフトウェアのアップデートが唯一かつ必須の対策**となります。速やかに対応することをお勧めします。
フロントエンド開発者として今できること
「Fastifyはバックエンドフレームワークだから関係ない」と思われた方もいるかもしれません。しかし、以下のようなケースではフロントエンドエンジニアの皆さんもこの情報に関心を持ち、行動を起こす必要があります。
<ul><li>**BFF (Backend For Frontend) 開発**: フロントエンドチームがBFFをFastifyで構築・運用している場合、この脆弱性は直接的な影響をもたらします。</li><li>**フルスタック開発**: Next.jsのAPI RoutesやNuxtのServer APIなど、フレームワーク内でバックエンド機能を持つ部分でFastifyが使われている場合(直接的でなくても依存関係のどこかで使われている可能性も考慮)。</li><li>**CI/CDパイプライン**: バックエンドの依存関係の更新や脆弱性スキャンを行うCI/CDプロセスに携わっている場合、この情報を把握し、チームに共有することが重要です。</li></ul>
ご自身のプロジェクトの依存関係を確認し、もし`@fastify/accepts-serializer`を使用している場合は、すぐにバックエンドチームと連携し、アップデートを促してください。Webサービス全体のセキュリティと安定性は、フロントエンド・バックエンド問わず、開発者全員で守るべきものです。