CVE-2024-8373

Usurpation de contenu
Affectations
AngularJS
>=1.3.0-rc.4
en
AngularJS
Aucun élément n'a été trouvé.
Icône de cercle d'exclamation
Patch disponible
Cette vulnérabilité a été corrigée dans la version Never-Ending Support (NES) proposée par HeroDevs.

Aperçu

AngularJS est un framework JavaScript pour le développement d'applications web dynamiques. Il vous permet d'utiliser HTML comme langage de gabarit et vous permet d'étendre la syntaxe de HTML pour exprimer les composants de votre application de manière claire et succincte.

An improper sanitization vulnerability (CVE-2024-8373) has been identified in AngularJS, which allows attackers to bypass common image source restrictions normally applied to the value of the [srcset] attribute on <source> HTML elements. This bypass can further lead to a form of Content Spoofing.

Selon l'OWASP: L'usurpation de contenu, également appelée injection de contenu, "injection de texte arbitraire" ou défiguration virtuelle, est une attaque visant un utilisateur et rendue possible par une vulnérabilité d'injection dans une application web. Lorsqu'une application ne traite pas correctement les données fournies par l'utilisateur, un pirate peut fournir un contenu à une application web, généralement par le biais d'un paramètre, qui est renvoyé à l'utilisateur. L'utilisateur se retrouve alors avec une page modifiée dans le contexte du domaine de confiance.

Ce problème concerne toutes les versions d'AngularJS.

Détails

Informations sur le module

Informations sur les vulnérabilités

Cette vulnérabilité de gravité moyenne est présente dans le paquet principal angular dans toutes les versions publiées d'AngularJS.

Normally, setting an <img> or <source> element's srcset attribute value is subject to image source sanitization, which allows improving the security of an application by setting restrictions on the sources of images that can be shown. For example, only allowing images from a specific domain.

However, due to a bug in AngularJS, setting a <source> element’s srcset attribute via the ngAttrSrcset directive or interpolation is not subject to image source sanitization. This allows bypassing the image source restrictions configured in the application, which can also lead to a form of Content Spoofing.

Remarque :

Les directives ngSrcset et ngPropSrcset ne sont pas affectées. Avec ces directives, l'assainissement fonctionne comme prévu.

Étapes de la reproduction

  • Créez une application AngularJS et configurez $compileProvider pour n'autoriser que les images provenant d'un domaine spécifique. Par exemple :
angular
    .module('app', [])
    .config(['$compileProvider', $compileProvider => {
      $compileProvider.imgSrcSanitizationTrustedUrlList(
          // Only allow images from `angularjs.org`.
          /^https:\/\/angularjs\.org\//);
    }]);

  • Use a specially-crafted value in the ngAttrSrcset directive on a <source> element to bypass the domain restriction and show an image from a disallowed domain. For example:
<picture>
  <source ng-attr-srcset="https://angular.dev/favicon.ico" />
  <img src="" />
</picture>

  • Vous pouvez même afficher une image SVG arbitraire en utilisant le format data:image/svg+xml. Par exemple, vous pouvez afficher une image SVG arbitraire au format data:image/svg+xml :
<picture>
  <source ng-attr-srcset="data:image/svg+xml;base64,..." />
  <img src="" />
</picture>

  • De même, vous pouvez obtenir le même résultat en utilisant l'interpolation sur l'attribut HTML srcset. Par exemple :
<picture>
  <source srcset="{{ 'https://angular.dev/favicon.ico' }}" />
  <!--
    OR:
    <source srcset="{{ 'data:image/svg+xml;base64,...' }}" />
  --> 
  <img src="" />
</picture>

Preuve de concept

A full reproduction with code similar to the above can be found here:
<source> sanitization vulnerability POC

Atténuation

Le projet AngularJS est en fin de vie et ne recevra aucune mise à jour pour résoudre ce problème. Pour plus d'informations, voir ici.

Les utilisateurs des composants concernés doivent appliquer l'une des mesures d'atténuation suivantes :

  • Migrer les applications concernées hors d'AngularJS.
  • Faites appel à un partenaire commercial comme HeroDevs pour l'assistance à la sécurité après la fin de vie.
Détails de la vulnérabilité
ID
CVE-2024-8373
PROJET concerné
AngularJS
Versions concernées
>=1.3.0-rc.4
Date de publication
9 septembre 2024
≈ Date fixe
21 mai 2024
Sévérité
Moyen
Catégorie
Usurpation de contenu