Angular SSR「@angular/platform-server」に危険度の高い脆弱性CVE-2026-46417

セキュリティニュース

投稿日時: 更新日時:

Angular SSR「@angular/platform-server」に危険度の高い脆弱性CVE-2026-46417

Angularの開発チームは2026年5月14日(GitHub Advisory Database登録は5月19日)、Angularのサーバーサイドレンダリング(SSR)パッケージ「@angular/platform-server」にCVSS v4スコア8.8(High)のサーバーサイドリクエストフォージェリ(SSRF)脆弱性が存在するとして、公式のGitHub Security Advisory(GHSA-rfh7-fxqc-q52v)を公開しました。

本脆弱性は「ホスト名ハイジャック(Hostname Hijacking)」と呼ばれる手法によるSSRFであり、攻撃者がSSRエンジンのレンダリングエントリーポイントに絶対形式のURL(例:http://evil.com)を渡すことで、ServerPlatformLocationが攻撃者の管理するドメインをアプリケーションの「現在のホスト名」として採用してしまいます。その結果、すべての相対的なHttpClientリクエストやPlatformLocation.hostnameの参照が攻撃者のサーバーにリダイレクトされ、内部APIやクラウドメタデータサービス(AWS IMDSv2等)への不正アクセスが可能となります。

本件は、2026年に発生したAngular SSRのSSRF脆弱性の第3弾に相当するものであり、Angularを使用したSSRアプリケーションに対する継続的な攻撃面の拡大が確認されています。


この記事のサマリー

  • CVE:CVE-2026-46417
  • GitHub AdvisoryGHSA-rfh7-fxqc-q52v
  • CVSS v4スコア8.8(High)(Attack Vector:Network/Attack Complexity:Low/Privileges Required:None/User Interaction:None)
  • 脆弱性の種類:サーバーサイドリクエストフォージェリ(SSRF)——ホスト名ハイジャック
  • 影響を受けるパッケージ:npm @angular/platform-server
  • 影響を受けるバージョン:≤18.2.14(EOL)・19.x(19.2.22未満)・20.x(20.3.21未満)・21.x(21.2.13未満)・22.x(22.0.0-next.12未満)
  • 修正済みバージョン19.2.22・20.3.21・21.2.13・22.0.0-next.12
  • Angular v18以前EOL(サポート終了)のため公式パッチなし。HeroDevs NES(商用サポート)での対応が必要。
  • 攻撃の条件:認証不要・ユーザー操作不要。ただしSSRを有効化した@angular/platform-serverを使用していること。
  • 主な影響:内部APIへの不正リクエスト・クラウドメタデータサービス(AWS/GCP/Azure IMDSなど)への不正アクセス・内部ネットワークスキャン・機密認証情報の窃取。
  • 修正内容renderModuleおよびrenderApplicationallowedHosts設定オプションを追加。ホスト名のホワイトリスト検証を実装。

影響を受けるバージョンと修正版

バージョン系列 影響を受けるバージョン 修正済みバージョン 備考
v18以前 ≤18.2.14(すべて) なし(EOL) 2025年11月にサポート終了。公式パッチなし。
v19 ≥19.0.0-next.0〜19.2.22未満 19.2.22 即時更新を推奨
v20 ≥20.0.0-next.0〜20.3.21未満 20.3.21 即時更新を推奨
v21 ≥21.0.0-next.0〜21.2.13未満 21.2.13 即時更新を推奨
v22(next) ≥22.0.0-next.0〜next.12未満 22.0.0-next.12 next版(開発中)

Angular v18以前をお使いの方へ

Angular v18は2025年11月にEnd of Life(EOL)を迎えており、Angularの公式プロジェクトはEOL版へのセキュリティパッチを提供しません。v18以前をお使いの組織は以下の対応が必要です。

最優先:v19以降へのアップグレード(Angular移行ガイドに従い最新のサポート版へ移行)、またはHeroDevs NES(Never-Ending Support)の利用(商用サポートとして、EOL Angular版へのセキュリティパッチを提供するサービスから修正版を入手)のいずれかが推奨されます。


脆弱性の詳細—「ホスト名ハイジャック」の仕組み

SSRエンジンがホスト名を信頼してしまうという根本的な問題

GitHub Security Advisory(GHSA-rfh7-fxqc-q52v)の公式説明によれば、本脆弱性はAngularのSSRエンジンがレンダリングエントリーポイントに渡されるリクエストURLを処理する方法に起因しています。

Angularのサーバーサイドレンダリングでは、renderApplicationまたはrenderModule関数にリクエストURLを渡し、そのURLを基にアプリケーションをレンダリングします。この際、ServerPlatformLocationがURLからホスト名を抽出して「現在の接続元ホスト」として内部に保持します。

問題は、このホスト名の抽出・採用プロセスにバリデーション(検証)が存在しなかったことです。攻撃者がhttp://evil.com/legitimate-pathのような絶対形式のURLをSSRエンジンに渡すことに成功した場合、ServerPlatformLocationevil.comを「現在のホスト名」として採用してしまいます。

その結果、SSRプロセス中に行われる相対的なHttpClientリクエスト(例:httpClient.get('/api/data'))はすべて攻撃者が管理するevil.comへの完全なURLとして解決されます。つまりhttp://evil.com/api/dataにリクエストが送信され、サーバーの応答が攻撃者の手に渡ることになります。

クラウドメタデータサービスへの悪用シナリオ

本脆弱性が特に危険な理由の一つは、AWS・GCP・AzureなどのクラウドプロバイダーがVMインスタンス内部から169.254.169.254等の特定アドレスでアクセスできるインスタンスメタデータサービス(IMDS)との組み合わせにあります。

AWSの環境でSSRアプリケーションが実行されている場合、攻撃者はhttp://169.254.169.254/latest/meta-data/iam/security-credentials/のようなURLをSSRエンジンに注入することで、IAMロールに付与されたAWSの一時的な認証情報を窃取できる可能性があります。この種の攻撃はIMDSv1が有効な環境で特に深刻であり、IMDSv2を強制している場合でも一部のSSR実装では悪用が可能な場合があります。


CVSSスコアの詳細

GitHub Security Advisoryが示すCVSS v4のスコア内訳は以下の通りです。

メトリクス 意味
Attack Vector Network ネットワーク経由での悪用が可能
Attack Complexity Low 特殊な条件は不要
Attack Requirements None 追加の前提条件なし
Privileges Required None 認証不要
User Interaction None ユーザーの操作不要
Confidentiality Impact (VS) High 機密情報への重大な影響
Integrity Impact (VS) Low 整合性への限定的な影響
Availability Impact (VS) None 可用性への影響なし
Subsequent Confidentiality Low 後続システムの機密性への影響
Subsequent Integrity Low 後続システムの整合性への影響

 


公式パッチの内容——allowedHostsによるホスト名ホワイトリスト

GitHub Advisory(GHSA-rfh7-fxqc-q52v)によれば、本脆弱性の修正はrenderModuleおよびrenderApplication関数にallowedHosts設定オプションを追加することで実装されました。

修正後のSSRエンジンはリクエストURLからホスト名を抽出した後、このallowedHostsリストに対して照合を行います。ホスト名がリスト内の許可エントリに一致しない場合、エンジンはホスト名の採用をブロックし、HttpClientのリクエストが信頼されたドメインに限定されるよう保護します。


即時適用可能な暫定緩和策

修正版にすぐにアップデートできない場合は、サーバーエントリーポイント(server.ts)でリクエストのURLを検証する処理を追加してください。GitHub Advisory(GHSA-rfh7-fxqc-q52v)が示す暫定対応例は以下の通りです。

// Express使用時の緩和策例(server.ts)
app.get('*', (req, res, next) => {
  const trustedHost = 'localhost:4000'; // 信頼するホスト名に変更
  // リクエストのHostヘッダーが期待するホストと一致しているか確認
  if (req.headers.host !== trustedHost) {
    return res.status(403).send('Forbidden');
  }
  next();
});

この緩和策はreq.urlrenderApplicationまたはrenderModuleに渡される前に、絶対形式のURLが混入しないよう正規化・検証するものです。


Angular SSRを狙った2026年のSSRF脆弱性の波

本件は2026年に確認されたAngular SSRに対するSSRF脆弱性の系列的な発見の一部です。HeroDevsの分析によれば、根本的な問題は「Angular Platform-Serverがreq.urlをホストフレームワークからそのまま受け取り、バリデーションや検証なしにアプリケーションのオリジンを直接解決している」という設計上の脆弱性パターンにあります。

CVE-2026-27739(2026年2〜3月)はAngular SSRのHTTPヘッダー(HostおよびX-Forwarded-*ヘッダー)の不適切な処理によるSSRFです。攻撃者がこれらのヘッダーを操作してアプリケーションのベースオリジンを書き換え、HttpClientを悪意あるドメインに誘導できます。

CVE-2026-41423(2026年4月)はバックスラッシュURLの正規化を通じたSSRFです。バックスラッシュ(\)を含むURLを処理した際の正規化処理のバグにより、攻撃者が制御するオリジンが採用されてしまいます。Angular 18はEOLのため公式パッチなし。

CVE-2026-46417(2026年5月・今回)は絶対形式URLによるホスト名ハイジャックです。上記2件と同一の根本的なパターン(入力URLの不十分な検証)に基づく第3の変形です。


影響を受けるシステムの確認方法

# @angular/platform-serverのバージョンを確認
npm list @angular/platform-server

# または package.json の dependencies を確認
cat package.json | grep platform-server

# 最新の修正済みバージョンに更新
npm install @angular/platform-server@latest

SSRを使用していない純粋なクライアントサイドレンダリング(CSR)のAngularアプリケーション、または@angular/platform-serverを使用していない場合は本脆弱性の影響を受けません。


FAQ

Q. この脆弱性はAngularのすべてのアプリケーションに影響しますか? A. いいえ。影響を受けるのは@angular/platform-serverパッケージを使用してサーバーサイドレンダリング(SSR)を実装しているアプリケーションのみです。クライアントサイドレンダリングのみのAngularアプリケーションは影響を受けません。

Q. allowedHostsオプションの設定方法を教えてください。 A. 修正済みバージョンにアップデートした後、renderApplicationの呼び出しでallowedHostsオプションを追加してください。具体的な設定例はAngularの公式マイグレーションガイドまたはCHANGELOGを参照してください。

Q. Angular 18を使っています。どうすればいいですか? A. Angular 18は2025年11月にEOLを迎えており、公式のセキュリティパッチはありません。v19以降への移行が最優先です。すぐに移行できない場合は上記の暫定緩和策を適用し、HeroDevs NESの利用を検討してください。


参考情報(1次ソース)