概要
AngularJSは動的なウェブアプリケーションを開発するためのJavaScriptフレームワークです。HTMLをテンプレート言語として使用し、HTMLの構文を拡張してアプリケーションのコンポーネントを明確かつ簡潔に表現することができます。
AngularJS には、不適切なサニタイズの脆弱性(CVE-2024-8372)が確認されており、攻撃者は[srcset]HTML 属性の値に通常適用される一般的な画像ソースの制限をバイパスすることができます。このバイパスはさらに、コンテンツ偽装の一種につながる可能性があります。
OWASP によるコンテンツ・インジェクション、「任意のテキスト・インジェクション」、仮想的な改ざんとも呼ばれるコンテンツ・スプーフィング は、ウェブ・アプリケーションのインジェクションの脆弱性によって可能となる、ユーザを標的にした攻撃です。アプリケーションがユーザから供給されたデータを適切に扱わない場合、攻撃者はウェブ・アプリケーションにコンテンツを供給することができます。これにより、ユーザは信頼されたドメイ ンのコンテキストで変更されたページを見ることになります。
この問題はAngularJSのバージョン1.3.0-rc.4以降に影響します。
詳細
モジュール情報
- 製品AngularJS
- 影響を受けるパッケージ angular
- 影響を受けるバージョン>=1.3.0-rc.4
- GitHubリポジトリ: https://github.com/angular/angular.js
- 公開パッケージ :https://www.npmjs.com/package/angular
- パッケージマネージャ:npm
脆弱性情報
このMedium-severityの脆弱性は、1.3.0-rc.4以上のバージョンのAngularJSのmainangularパッケージに存在します。
ngSrcset、ngAttrSrcset、ngPropSrcsetディレクティブで使用されている、画像ソースURLをサニタイズするためのロジックには、特定のドメインからの画像のみを許可するなど、いくつかの一般的なパターンによって設定された制限をバイパスできる脆弱性があります。特別に細工された入力によって、サニタイズがバイパスされ、任意のドメインからの画像を表示することができます。
注:
この問題は、srcsetHTML属性を使った補間値の設定にも影響します。
<img srcset="{{ 'some-malicious-input' }}" />
再現するための手順
- AngularJSアプリケーションを作成し、特定のドメインからの画像のみを許可するように$compileProviderを設定します。例えば
angular
.module('app', [])
.config(['$compileProvider', $compileProvider => {
$compileProvider.imgSrcSanitizationTrustedUrlList(
// Only allow images from `angularjs.org`.
/^https:\/\/angularjs\.org\//);
}]);
- Use a specially-crafted value in the ngSrcset directive on an <img> element to bypass the domain restriction and show an image from a disallowed domain. For example:
<img ng-srcset="https://angularjs.org/favicon.ico xyz,https://angular.dev/favicon.ico" />
- data:image/svg+xmlフォーマットを使えば、任意のSVG画像を表示することもできる。例えば
<img ng-srcset="https://angularjs.org/favicon.ico xyz,data:image/svg+xml;base64,..." />
概念実証
上記と同様のコードによる完全な再現は、こちらでご覧いただけます:
ngSrcsetサニタイズ・バイパスの脆弱性 POC
緩和
AngularJSプロジェクトはEnd-of-Lifeであり、この問題に対処するためのアップデートは行われません。詳細はこちらをご覧ください。
影響を受けるコンポーネントのユーザーは、以下のいずれかの緩和策を適用してください:
- 影響を受けたアプリケーションをAngularJSから移行する。
- EOL後のセキュリティ・サポートには、HeroDevsのような商用サポート・パートナーを活用する。
弊社がサポートするオープンソースソフトウェアに新たな脆弱性が修正された場合、いつでもアラートを受け取ることができます。