CVE-2024-8372

コンテンツ・スプーフィング
影響
AngularJS
>=1.3.0-rc.4
AngularJS
見つかりませんでした。
感嘆符アイコン
パッチあり
この脆弱性はHeroDevsが提供するNever-Ending Support (NES)バージョンで修正されました。

概要

AngularJSは動的なウェブアプリケーションを開発するためのJavaScriptフレームワークです。HTMLをテンプレート言語として使用し、HTMLの構文を拡張してアプリケーションのコンポーネントを明確かつ簡潔に表現することができます。

AngularJS には、不適切なサニタイズの脆弱性(CVE-2024-8372)が確認されており、攻撃者は[srcset]HTML 属性の値に通常適用される一般的な画像ソースの制限をバイパスすることができます。このバイパスはさらに、コンテンツ偽装の一種につながる可能性があります。

OWASP によるコンテンツ・インジェクション、「任意のテキスト・インジェクション」、仮想的な改ざんとも呼ばれるコンテンツ・スプーフィング は、ウェブ・アプリケーションのインジェクションの脆弱性によって可能となる、ユーザを標的にした攻撃です。アプリケーションがユーザから供給されたデータを適切に扱わない場合、攻撃者はウェブ・アプリケーションにコンテンツを供給することができます。これにより、ユーザは信頼されたドメイ ンのコンテキストで変更されたページを見ることになります。

この問題はAngularJSのバージョン1.3.0-rc.4以降に影響します。

詳細

モジュール情報

脆弱性情報

このMedium-severityの脆弱性は、1.3.0-rc.4以上のバージョンのAngularJSのmainangularパッケージに存在します。

ngSrcsetngAttrSrcsetngPropSrcsetディレクティブで使用されている、画像ソース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のような商用サポート・パートナーを活用する。

脆弱性の詳細
身分証明書
CVE-2024-8372
影響を受けるプロジェクト
AngularJS
影響を受けるバージョン
>=1.3.0-rc.4
発行日
2024年9月9日
≈ 確定日
2024年5月21日
で修正
重大性
ミディアム
カテゴリー
コンテンツ・スプーフィング