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.
Une vulnérabilité(CVE-2024-8372) a été identifiée dans AngularJS, qui permet aux attaquants de contourner les restrictions de source d'image normalement appliquées à la valeur de l'attribut HTML [srcset]. Ce contournement peut en outre conduire à une forme d'usurpation de contenu (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 affecte les versions 1.3.0-rc.4 et supérieures d'AngularJS.
Détails
Informations sur le module
- Produit : AngularJS
- Paquets affectés : angular
- Versions affectées : >=1.3.0-rc.4
- Dépôt GitHub : https://github.com/angular/angular.js
- Paquets publiés : https://www.npmjs.com/package/angular
- Gestionnaire de paquets : npm
Informations sur les vulnérabilités
Cette vulnérabilité de gravité moyenne a été découverte dans le paquet principal angular d'AngularJS dans les versions supérieures ou égales à 1.3.0-rc.4.
La logique utilisée dans les directives ngSrcset, ngAttrSrcset et ngPropSrcset pour assainir les URLs des sources d'images présente une vulnérabilité qui permet de contourner les restrictions établies par certains modèles courants, comme le fait de n'autoriser que les images provenant d'un domaine spécifique. Avec une entrée spécialement conçue, la vérification peut être contournée et des images provenant d'un domaine arbitraire peuvent être affichées, ce qui peut également conduire à une forme d'usurpation de contenu.
Note :
Ce problème affecte également la définition de valeurs interpolées via l'attribut HTML srcset, ce qui n'est de toute façon pas recommandé dans AngularJS.
<img srcset="{{ 'some-malicious-input' }}" />
É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 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" />
- 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 :
<img ng-srcset="https://angularjs.org/favicon.ico xyz,data:image/svg+xml;base64,..." />
Preuve de concept
Une reproduction complète avec un code similaire à celui décrit ci-dessus est disponible ici :
ngSrcsetsanitization bypass 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.
Soyez alerté chaque fois qu'une nouvelle vulnérabilité est corrigée dans les logiciels open source que nous soutenons.