概要
Mercuriusは、Fastifyフレームワーク向けのGraphQLアダプターです。このMercuriusのバージョン16.8.0より前のバージョンにおいて、WebSocket接続を介して受信するGraphQLサブスクリプションクエリに対するqueryDepth制限が適切に適用されない脆弱性(CVE-2026-30241)が報告されています。
通常、HTTP経由のGraphQLクエリやミューテーションには深度チェックが正しく適用されますが、WebSocketサブスクリプションクエリは深度検証なしで解析および実行されるとされています。これにより、リモートのクライアントが意図された深度制限をバイパスし、任意に深くネストされたサブスクリプションクエリをWebSocket経由で送信できる可能性があります。
影響範囲
- Mercuriusのバージョン16.8.0より前のバージョンを使用しているシステム。
- 特に、GraphQLスキーマに再帰的な型定義が含まれている場合、影響が大きくなる可能性があります。
- WebSocket経由でGraphQLサブスクリプションを受け付けているシステムが対象となります。
想定される影響
この脆弱性が悪用された場合、以下のような影響が想定されます。
- リモートの攻撃者が、深くネストされたサブスクリプションクエリを送信することで、システムリソースを過剰に消費させる可能性があります。
- GraphQLスキーマに再帰的な型が含まれている場合、各サブスクリプションイベントで指数関数的なデータ解決が発生し、CPUやメモリなどのリソースが枯渇する可能性があります。
- 結果として、アプリケーションやサービスが応答不能となり、サービス拒否(DoS)状態に陥る可能性があります。
攻撃成立条件・悪用状況
攻撃成立条件
- Mercuriusの脆弱なバージョン(16.8.0未満)を使用していること。
- WebSocket経由でGraphQLサブスクリプションを受け付けていること。
- GraphQLスキーマに再帰的な型が含まれている場合、DoS攻撃の可能性が高まります。
悪用状況
現時点では、この脆弱性の具体的な悪用状況に関する報告は確認されていません。
推奨対策
今すぐできる対策(最優先)
- Mercuriusのアップデート: Mercuriusをバージョン16.8.0以降にアップデートしてください。このバージョンで本脆弱性が修正されています。
中長期的な対策
- GraphQLスキーマのレビュー: 再帰的な型定義が意図せず過度な深度を許容していないか、定期的にGraphQLスキーマをレビューすることをお勧めします。
- リソース監視の強化: GraphQLエンドポイントに対するCPU、メモリ、ネットワーク帯域などのリソース使用状況の監視を強化し、異常なパターンを早期に検知できる体制を構築してください。
一時的な緩和策
- WebSocket経由のGraphQLサブスクリプションを一時的に無効にするか、アクセス元を制限することが考えられますが、これはアプリケーションの機能に影響を与える可能性があります。
- WAF(Web Application Firewall)などで、GraphQLクエリの深度を強制的に制限するルールを設定できる場合があります。ただし、実装の複雑さや誤検知のリスクも考慮する必要があります。
確認方法
現在使用しているMercuriusのバージョンを確認してください。通常、プロジェクトのpackage.jsonファイルやロックファイル(例: package-lock.json, yarn.lock)で確認できます。
参考情報
- CVE-2026-30241 詳細: https://cvefeed.io/vuln/detail/CVE-2026-30241