Angularの国際化(i18n)パイプラインに、翻訳済みコンテンツ内のHTMLが適切にサニタイズされず、任意のJavaScriptが実行され得るクロスサイトスクリプティング(XSS)の脆弱性 CVE-2026-27970が確認されました。GitHub Security Advisoryでは深刻度High、CVSSは7.6とされています。
概要
Angular i18nでは、アプリからメッセージを抽出し、翻訳会社・委託先などへ渡し、戻ってきた翻訳(例:xliff、xtb)をビルドに取り込んで利用者へ表示します。今回の問題は、ICU message(複数形・性別などの表現に使う形式)内に含まれる翻訳テキストのHTMLが十分に無害化されず、攻撃者が仕込んだスクリプトがアプリのオリジン上で実行される点にあります。
影響を受けるバージョン
GitHub Advisoryでは、@angular/coreが以下の範囲で影響を受けるとされています(pre-releaseを含む点に注意が必要です)。
-
21.2.0-next.0 〜 21.2.0-rc.0
-
21.0.0-next.0 〜 21.1.5
-
20.0.0-next.0 〜 20.3.16
-
19.0.0-next.0 〜 19.2.18
-
18.2.14 以下
対策バージョン
Angular側は修正版を公開しており、少なくとも以下へ更新することが推奨されます。
-
21.2.0
-
21.1.6
-
20.3.17
-
19.2.19
攻撃が成立する条件
この脆弱性は、誰でも入力欄から直接攻撃できる一般的なXSSとは前提が異なります。攻撃者はまず翻訳ファイル(xliff、xtbなど)を侵害する必要があり、加えて以下の条件を満たす必要があります。
-
対象アプリがAngular i18nを利用している
-
ICU messageを1つ以上利用し、それが画面にレンダリングされる
-
CSP(Content-Security-Policy)やTrusted TypesなどでXSSを防ぐ防御が十分でない
影響
成立した場合、アプリのオリジン上で攻撃者のJavaScriptが実行されます。公式アドバイザリでは主に次の影響が挙げられています。
-
認証情報・機密の窃取:ページメモリ、LocalStorage、IndexedDB、Cookieなどからデータを抜き取り外部送信
-
画面改ざん:表示や挙動を変え、追加の情報入力を誘導するなど
すぐに更新できない場合の暫定策
パッチ適用までの暫定策として、公式アドバイザリでは次が推奨されています。翻訳ファイルをサプライチェーンの入力データとして扱い、コード同等に検査・統制するのがポイントです。
-
外部委託・不特定ソースから戻る翻訳内容をレビュー・検証してから取り込む
-
CSPを厳格化し、未許可のスクリプト実行をブロックする(nonce/shaベース、unsafe-inline排除など)
-
Trusted Typesを有効化し、危険なDOM挿入経路を強制的に制御する








