Angular SSR Vulnerability Lets Attackers Access Sensitive Data
2025/09/11 CyberSecurityNews — Angular の SSR (server-side rendering) 実装に、深刻な脆弱性 CVE-2025-59052 が発見された。この脆弱性を悪用する攻撃者は、機密性の高いユーザー・データにアクセスする可能性を手にする。この欠陥の原因は、Angular におけるコンカレント・リクエスト処理の方法にあり、あるユーザーのセッション・データが、別のユーザーへと漏洩する可能性がある。

すでに Angular チームは、すべてのサポート対象バージョン用にパッチをリリースし、この問題に対処している。
この脆弱性が影響を及ぼす範囲は、@angular/platform-server/@angular/ssr/@nguniversal/common などを使用するアプリケーションである。
この問題のコアは、SSR のプロセス処理中に、Angular の DI (dependency injection) コンテナで発生する、プラットフォーム・インジェクタと呼ばれる競合状態にある。
Angular SSRの脆弱性
このインジェクタは、リクエスト固有の情報を保持するものだが、その情報自体は、 JavaScript モジュール・スコープのグローバル変数として保存されている。この設計により、複数のリクエストが同時に処理されると、グローバル・インジェクタの状態が誤って共有/上書され、異なるセッション間でデータ汚染が生じ得る。実際のシナリオとして挙げられるのは、あるユーザーのデータを含むページが、別のユーザーのリクエストへのレスポンスとして、アプリケーションから誤って提供されてしまう可能性である。
つまり、レンダリングされたページやレスポンス・ヘッダ内に含まれる機密情報や認証トークンが、このデータ汚染により漏洩する恐れがある。そして、ネットワークにアクセスできる攻撃者であれば、サーバに大量のリクエストを送信し、この脆弱性を悪用できる。具体的に言うと、サーバからのレスポンスを検査することで、他のユーザーのアクティブ・セッションから漏洩したデータを探索する可能性を、攻撃者は手にすることになる。
この脆弱性が懸念されるのは、特権レベルを必要とせずに、任意のレンダリング・リクエストを情報抽出に悪用できる点である。bootstrapApplication/getPlatform/destroyPlatform などの API は、この共有状態に依存しており、脆弱と特定されている。
緩和策
すでに Angular チームは、すべてのアクティブ・バージョン 18/19/20 と、プレリリース・バージョンである v21 へ向けてパッチを提供し、この問題に対処している。
ただし、この修正により、bootstrapApplication 関数に互換性のない変更が導入された。したがって、サーバ環境での暗黙的な状態共有を回避するために、明示的なコンテキストを渡す必要が生じている。
Angular は、必要なコード変更を自動的に処理する Schematic を提供し、この更新プロセスを簡素化している。開発者に対して推奨されるのは、それぞれのバージョンに対応する “ng update” コマンドを実行して、アプリケーションを更新することだ。
なお、迅速なパッチ適用が不可能な場合には、いくつかの回避策として提示されている、SSR の無効化/カスタム bootstrap 関数からの非同期動作の削除/サーバ・ビルドでの Angular JIT モードの明示的な無効化などが利用できる。
Angular の SSR における脆弱性の原因を、わかりやすく説明する記事です。この問題の本質は、リクエストごとに分けて扱うべき情報が、グローバル変数として共有されている点にあります。そのため複数ユーザーから同時にアクセスされると、異なるセッションのデータが混じり合い、他人の情報が誤ってレスポンスに含まれてしまう可能性があるとのことです。こうした競合状態は、気づきにくい問題ですが、セッション情報やトークン漏洩につながるため、深刻なリスクになると、この記事は指摘しています。ご利用のチームは、ご注意ください。
You must be logged in to post a comment.