CVE-2024-9506

Vulnérabilité ReDoS
Affectations
Vue
>=2.0.0 <3.0.0
en
Vue 2
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

Vue est un framework HTML, CSS et JS permettant de développer des applications web avec une réactivité fine.

Une vulnérabilité ReDoS(CVE-2024-9506) a été identifiée dans le compilateur Vue 2. 

Selon l'OWASP: Le déni de service par expression régulière (ReDoS) est une attaque par déni de service qui exploite le fait que la plupart des implémentations d'expressions régulières peuvent atteindre des situations extrêmes qui les font fonctionner très lentement (de manière exponentielle par rapport à la taille de l'entrée). Un attaquant peut alors faire en sorte qu'un programme utilisant une expression régulière (Regex) entre dans ces situations extrêmes et reste bloqué pendant très longtemps.

Détails

Informations sur le module

Informations sur les vulnérabilités 

Cette vulnérabilité de faible gravité se trouve dans le fichier html-parser.ts de plusieurs paquets Vue, à savoir :

  • compilateur-sfc
  • serveur-rendeur
  • compilateur de modèles
  • vue-template-compiler
  • vue-server-renderer

La fonction parseHTML() de Vue dans html-parser.ts est sensible à une attaque ReDoS lorsque : 

  1. The template string contains a <script>, <style>, or <textarea> without a matching closing tag 

Within the parseHTML() function there is a regular expression (regex) to check for proper closing tags for the three tags listed above. However, due to an improperly written regex, when you pass in something like <script>some very very long text</not-script> it will trigger a ReDoS.

Étapes de la reproduction

Within Vue 2 client-side application code, create a new Vue instance with a template string that includes a <script> node tag that has a different closing tag (in this case </textarea>).

new Vue({
  el: '#app',
  template: '
<div> 
   Hello, world!
   <script>${'<'.repeat(1000000)}</textarea>
</div>'
});

  • Créez un fichier index.html qui charge le JavaScript ci-dessus, puis montez l'instance Vue nouvellement créée avec mount().
<!DOCTYPE html>
<html>
<head>
  <title>My first Vue app</title>
</head>
<body>
  <div id="app">
    Loading..
  </div>
</body>
</html>

  • Dans un navigateur, visitez votre application Vue
http ://localhost:3000

  • Dans le navigateur, observez comment la vulnérabilité ReDoS est capable d'augmenter le temps nécessaire à la page pour analyser le modèle et monter votre application Vue. Ceci démontre la vulnérabilité ReDoS. 

Preuve de concept

Une reproduction complète avec un code similaire à ce qui précède peut être trouvée ici :
Vue 2 HTML Tag Mismatch ReDoS

‍Credits

  • K (trouveur)

Atténuation

Vue 2 est en fin de vie et ne recevra pas de mise à jour pour résoudre ce problème.

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

  • Migrer vers une version plus récente de Vue.
  • 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-9506
PROJET concerné
Vue
Versions concernées
>=2.0.0 <3.0.0
Date de publication
14 octobre 2024
≈ Date fixe
25 juillet 2024
Fixé en
Sévérité
Faible
Catégorie
Vulnérabilité ReDoS