[重要] Angular SSRに潜むSSRF脆弱性 (GHSA-rfh7-fxqc-q52v / CVE-2026-46417) と対策
はじめに
今回は、Angularのサーバーサイドレンダリング(SSR)機能を提供する`@angular/platform-server`に発見された、深刻度「High」のSSRF(Server-Side Request Forgery)脆弱性「GHSA-rfh7-fxqc-q52v (CVE-2026-46417)」について解説します。特に、この脆弱性が日本のフロントエンド開発現場に与える影響と、具体的な対策に焦点を当てます。
脆弱性の概要と「ホスト名ハイジャック」とは?
この脆弱性は、攻撃者が細工したURLをAngular SSRエンジンに渡すことで発生します。具体的には、攻撃者が`http://evil.com/path`のような絶対URL形式のパスをリクエストすると、SSRエンジンが誤ってその「`evil.com`」を現在のアプリケーションのホスト名として認識してしまいます。
これを「ホスト名ハイジャック」と呼びます。アプリケーション内で相対パスを使って行われる`HttpClient`によるAPIリクエストや、`PlatformLocation.hostname`を参照する処理が、意図せず攻撃者が指定した外部サーバーへリダイレクトされてしまいます。結果として、社内APIや、メタデータサービスなど、通常は外部からアクセスできない機密性の高い内部システムが露出する危険性があります。
影響を受けるバージョンと深刻度
`@angular/platform-server`を使用しているAngularアプリケーションが影響を受けます。この脆弱性は、SSRFという性質上、内部システムへの不正アクセスを許す可能性があるため、深刻度は「High」と評価されています。
フロントエンド開発者としては、直接バックエンドのコードを書くことは少なくても、SSRを利用している場合はこの脆弱性の影響範囲を正確に理解し、迅速な対応が求められます。
具体的な対策:すぐにできること
この脆弱性に対しては、以下のいずれかの対策を早急に実施することが推奨されます。
### 1. パッチの適用(推奨)
最も推奨される対策は、脆弱性が修正された以下のバージョンにアップデートすることです。
**対象バージョン:**
* `22.0.0-next.12`
* `21.2.13`
* `20.3.21`
* `19.2.22`
これらのバージョンでは、`renderModule`および`renderApplication`関数に`allowedHosts`という新しい設定オプションが追加されました。このオプションを使用することで、リクエストURLから抽出されたホスト名が許可リストと照合されるようになり、許可されていないホスト名へのリダイレクトが防止され、ホスト名ハイジャックを防ぐことができます。
### 2. 緊急の回避策(アップデートが難しい場合)
すぐにアップデートが難しい場合は、暫定的な緊急回避策として、サーバーのエントリポイント(例: `server.ts`ファイル)で厳密なURL検証を実装してください。
具体的には、受信した`req.url`を、アプリケーションが信頼しているホスト名のリストと照合するか、`renderApplication`または`renderModule`に渡す前に相対パスに正規化するなどの対策が必要です。これにより、攻撃者が外部の絶対URLを挿入することを防ぎます。
まとめ
AngularのSSRにおけるSSRF脆弱性は、一見するとフロントエンドとは直接関係ないように見えても、現代のウェブアプリケーション開発において、フロントエンドとバックエンドの境界が曖昧になる中で、フロントエンドエンジニアも無視できない重要な脅威です。特に、Next.jsやNuxt.jsなど、SSR/SSGのフレームワークが主流となる中で、サーバーサイドの挙動に対する理解とセキュリティ意識はますます重要になっています。
開発中のアプリケーションでAngular SSRを使用している場合は、直ちに上記の推奨される対応策を検討し、安全なウェブサービスの提供に努めましょう。
このブログ記事が、日本のフロントエンドエンジニアの皆様のセキュリティ向上の一助となれば幸いです。