CVE-2022-25844

Scripts croisés (Cross-Site Scripting)
Affectations
AngularJS
>=1.8
en
AngularJS
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.

Étapes de la reproduction

Les paquets AngularJS dont la version est supérieure à 1.7.0 sont sensibles à cet exploit de déni de service par expression régulière (ReDoS). Si une application attribue une valeur fournie par l'utilisateur à $locale.NUMBER_FORMATS.PATTERNS[1].posPre, un attaquant pourrait fournir une valeur composée d'un nombre extrêmement élevé d'espaces pour provoquer un déni de service, comme ' '.repeat(1000000). Une preuve de concept démontrant cet exploit est disponible sur StackBlitz

Aborder la question

Ce problème est présent dans toutes les versions d'AngularJS supérieures à 1.7.0 et il n'existe pas de version de la bibliothèque contenant un correctif. Cependant, les développeurs peuvent vérifier qu'aucune valeur fournie par l'utilisateur n'est affectée à $locale.NUMBER_FORMATS.PATTERNS[1].posPre ou, si c'est le cas, que la longueur des valeurs est limitée à quelques caractères.

Apprentissage et prévention

Les attaques par déni de service sont conçues pour utiliser les ressources du système cible d'une manière telle qu'il ne reste plus de ressources pour les utilisateurs légitimes du système. Cet exploit est du type déni de service par expression régulière (ReDoS), qui consiste à faire en sorte que le système cible tente de résoudre une correspondance d'expression régulière qui prendra beaucoup de temps. 

Le moteur d'expressions régulières exécute une série d'étapes lorsqu'il tente de trouver une correspondance. Certaines de ces étapes peuvent être accomplies rapidement, tandis que d'autres, en particulier celles qui échouent, prennent beaucoup plus de temps. Lorsqu'une valeur de chaîne composée d'un très grand nombre d'espaces, par exemple 1000000 espaces, est donnée, le navigateur peut mettre un temps fou à renvoyer un résultat.

Cela est particulièrement vrai lorsque certaines étapes de la correspondance échouent et que le moteur d'expressions régulières doit revenir en arrière pour exécuter d'autres solutions. Dans ce cas, le nombre d'espaces de 1 000 000 est trompeur : le nombre réel d'étapes que le moteur tente d'exécuter peut être une valeur exponentielle de 1 000 000, ce qui a pour effet de monopoliser le système cible.

Conclusion

Bien que cet exploit n'ait pas de correctif, les clients de HeroDevs Never-Ending Support for AngularJS ont été notifiés de l'exploit lorsqu'il est devenu public. Si vous n'êtes pas client et que vous êtes intéressé par un abonnement, contactez notre équipe commerciale dès aujourd'hui.

Ressources

Entrée NIST 2022-25844

Détails de la vulnérabilité
ID
CVE-2022-25844
PROJET concerné
AngularJS
Versions concernées
>=1.8
≈ Date fixe
1er avril 2022
Sévérité
Moyen
Catégorie
Scripts croisés (Cross-Site Scripting)