CVE-2024-32971: Critical Vulnerability in Apollo Router Compromises Data Integrity
2024/05/02 SecurityOnline — Apollo Router のバージョン 1.44.0/1.45.0 に、深刻な脆弱性 CVE-2024-32971 (CVSS:9.1) が発見された。この脆弱性により、Apollo Router を通じて実行される操作の完全性に深刻な懸念が生じるため、直ちにシステムをアップデートするよう求める緊急アドバイザリが、ユーザーに対して通知された。

脆弱性の詳細
この欠陥は、Apollo Router の Query Plan Cache に存在し、分散 Query Plan Cache が設定されたインスタンスに影響を与える。この脆弱性の影響を受けるバージョンは 1.44.0/1.45.0 であり、それぞれが 2024年4月12日/4月22日にリリースされている。この脆弱性により、Apollo Router のキャッシュ検索ロジックに欠陥が生じ、不正な操作が実行される恐れがある。この結果として、ユーザーからのリクエストの種類によっては、意図しない変異の発生や、不正なデータ検索の可能性が生じる。
たとえば、特定タイプのユーザー・データを取得するクエリが、誤って意図されないデータを取得する可能性や、変異した操作により誤ったデータベース・レコードが対象とされる可能性がある。このような誤操作は、以前にキャッシュされた操作の修正バージョンを、Apollo Router が誤って実行することに起因するものであり、特に Redis がキャッシュに使用されている場合に問題となりやすい。
脆弱性の影響と範囲
脆弱性 CVE-2024-32971 が影響を及ぼすのは、分散 Query Plan Cache を利用する Apollo Router インスタンスにのみとなる。ルータの設定 YAML に Redis の URL が存在することから分かるように、この特定の設定を採用しているインスタンスは脆弱である:
supergraph:
query_planning:
cache:
# Look for this config below
redis:
urls: ["redis://..."]
その他の設定や、異なるキャッシュ・メカニズムを設定に使用している場合は、この脆弱性の影響を受けない。
緩和策
この発見を受けて、Apollo Router の開発者たちは、新バージョン 1.45.1 をリリースし、キャッシュ問題に対応する機能を回復した。影響を受けるバージョンのユーザーに推奨されるのは、バージョン 1.45.1 以上へアップグレード、もしくは、バージョン 1.43.2 へのダウングレードである。なお、脆弱なバージョン 1.44.0/1.45.0 は、配布が中止されている。
直ちにアップグレードやダウングレードが不可能なユーザーは、”supergraph.query_planning.cache.redis.urls” の削除もしくは、設定における Redis URL のコメントアウトにより、分散 Query Plan Cache を無効化できる。
この変更により、各ルーター・インスタンスは、それ自身のインメモリ Query Plan Cache を使用する状態に戻る。しかし、それによりインスタンスごとのリソース使用率が増加し、各インスタンスがキャッシュを構築するために、コールド・スタート時間が長くなる可能性がある。
対策の緊急性
データの整合性に重大な問題が発生し、不正なデータ操作が行われる可能性があるため、プロダクション環境で Apollo Router を使用している場合には、早急に対策を講じる必要がある。開発者たちに強く推奨されるのは、特にプロダクション環境において、影響を受ける全てのバージョンを、可能な限り早急にアップデートすることだ。また、非プロダクション環境においても、可能な限り早急にアップデートすることが、運用の完全性と安全性を維持する上で、きわめて重要であることに変わりはない。
Apollo Router について調べてみたら、GitHub に「Apollo Federation 2 を使用するフェデレーテッド・スーパーグラフを実行するために、Rust で書かれたコンフィグレーション可能な高性能 Graph Router である。Apollo Router は十分にテストされ、定期的にベンチマークが行われており、Apollo Gateway の大半の主要機能が含まれており、実稼働規模のワークロードに対応できる」と記されていました。よろしければ、Router で検索も、ご利用ください。
You must be logged in to post a comment.