Déni de service par expression régulière (REDoS) dans UAParser.js
26 octobre 2020
0 minutes de lectureBienvenue dans le Profil mensuel des vulnérabilités de Snyk. Dans cette série, Snyk revient sur les vulnérabilités découvertes par notreéquipe de recherche en sécuritéou qui lui ont été signalées. Chaque mois, nous choisissons une vulnérabilité notable et racontons comment elle a été découverte, étudiée et divulguée. Nous mettons en lumière les chercheurs, les développeurs et les utilisateurs qui contribuent à identifier et à corriger les vulnérabilités au sein de la communauté open source.
Ce mois-ci, nous nous intéressons à une vulnérabilité de déni de service par expression régulière (REDoS) découverte dans le célèbre package JavaScript UAParser.
Vulnérabilité :exécution de code arbitraire dans ua-parser-jsCVE attribuées : CVE-2020-7733Analyste Snyk :Asaf BitonDécouverte par :Yeting Li
L’équipe de recherche de Snyk a étudié et divulgué une vulnérabilité de déni de service par expression régulière (REDoS) dans le célèbre package JavaScript UAParser, signalée par un chercheur externe.
Pour faciliter et améliorer la divulgation des vulnérabilités par les chercheurs, l’équipe collabore avec les personnes qui nous signalent des vulnérabilités. Chaque signalement fait l’objet d’une enquête afin de déterminer si le problème peut être reproduit, s’il représente réellement un risque de sécurité dans le contexte du package concerné et, enfin, d’évaluer pleinement le risque que la vulnérabilité pourrait poser à la communauté open source.
La vulnérabilité REDoS dans le package UAParser a été signalée à Snyk par un chercheur externe, Yeting Li. Examinons de plus près les détails de la vulnérabilité, la manière dont elle a été découverte et la façon dont l’équipe de recherche a collaboré avec le chercheur et le responsable de la maintenance du package pour garantir une divulgation responsable et, au final, une correction.
Examen détaillé de la vulnérabilité REDoS
UAParser est un package JavaScript d’analyse des agents utilisateurs, conçu pour être utilisé côté client comme côté serveur. Selon Snyk Advisor, le package UAParser totalise plus de six millions, ce qui en fait un package très populaire. La vulnérabilité REDoS découverte et divulguée dans ce cas concernait les expressions régulières définies pour identifier les navigateurs sur les téléphones Xiaomi Redmi et les tablettes Mi Pad.
Dans sa preuve de concept, Li a montré qu’en ajoutant une longue chaîne de caractères espace (5 000 dans son exemple), suivie d’un point d’exclamation, à l’agent utilisateur, un attaquant pouvait déclencher un phénomène appelé retour arrière catastrophique. Dans ce cas, la comparaison d’une chaîne avec une expression régulière peut prendre beaucoup plus de temps que la normale, jusqu’à monopoliser les ressources ou même faire planter complètement le moteur d’expressions régulières. Si cette technique cible le traitement des expressions régulières dans une application Node.js côté serveur, elle peut provoquer une panne du serveur ou l’empêcher de répondre aux autres requêtes des utilisateurs. La preuve de concept complète est présentée ci-dessous :
Pour en savoir plus sur les vulnérabilités REDoS, le fonctionnement du retour arrière catastrophique et les façons de l’exploiter, consultez cet article de blog.
Étude des vulnérabilités REDoS
Yeting Li est étudiant-chercheur en doctorat au Laboratoire d’informatique de l’Institut des logiciels de l’Académie chinoise des sciences (ISCAS). Dans le cadre de ses recherches actuelles pour son doctorat, il s’intéresse aux techniques permettant d’automatiser la détection des vulnérabilités d’expressions régulières exposées aux attaques REDoS. Il a notamment créé un algorithme qu’il utilise pour rechercher ces vulnérabilités dans les packages open source.
Au cours de l’année écoulée, l’équipe de recherche de Snyk a collaboré avec M. Li sur un grand nombre de divulgations. Le chercheur et l’équipe de Snyk ont travaillé ensemble pour rendre le processus aussi efficace que possible. Snyk a aidé M. Li à définir clairement les attentes à respecter lors de la rédaction de ses signalements, afin qu’ils puissent être traités rapidement. Pour Snyk, recevoir un si grand nombre de signalements d’un seul chercheur était une situation inédite. Afin de faciliter les échanges pour les deux parties, un dépôt GitHub privé a été créé.
Le 9 septembre 2020, M. Li a déposé son signalement et sa preuve de concept concernant une vulnérabilité REDoS qu’il avait découverte dans le package UAParser. Asaf Biton, de l’équipe de recherche de Snyk, a été chargé de l’enquête. À l’aide de la preuve de concept fournie, et après quelques ajustements rapides, Asaf a pu confirmer que la vulnérabilité était bien reproductible et présentait un risque dans le contexte du package. En moins d’une heure, Asaf a envoyé un e-mail au responsable de la maintenance du package pour l’informer de la vulnérabilité et lui demander l’autorisation de réserver un identifiant CVE.
Moins de 24 heures plus tard, le responsable a répondu qu’il publierait un correctif dans les jours suivants et qu’il serait tout à fait acceptable de publier un CVE une fois le correctif disponible. Le 12 septembre, moins de 72 heures après le signalement initial, le responsable de la maintenance du package a soumis un correctif au dépôt GitHub et a informé Snyk de la disponibilité de la nouvelle version. Snyk a ensuite publié CVE-2020-7733 dans la base de données CVE, ainsi que le rapport détaillé dans Snyk Vulnerability Database, sous l’identifiant Snyk SNYK-JS-UAPARSERJS-610226.

Avec le recul
Après la publication de la vulnérabilité dans la base de données Snyk, près de 21 000 packages surveillés par Snyk se sont avérés utiliser des versions vulnérables. Grâce aux efforts conjoints du chercheur, du responsable de la maintenance du package et de l’équipe de recherche de Snyk, les développeurs responsables de ces packages dans le système Snyk — ainsi que d’innombrables autres qui n’utilisent pas encore l’écosystème Snyk — ont pu être informés du problème et le corriger facilement dans leur code.
Voici un autre excellent exemple de la façon dont l’engagement de Snyk à permettre aux développeurs d’utiliser les logiciels open source en toute sécurité va bien au-delà des limites de l’outil Snyk. Notre équipe de recherche continue d’identifier et de divulguer des vulnérabilités, grâce à ses propres travaux et à sa collaboration avec d’autres chercheurs des communautés de la sécurité et de l’open source.
Lancez-vous dans les compétitions Capture The Flag
Apprenez à résoudre des défis Capture The Flag en regardant à la demande notre atelier virtuel d’initiation.
