CVE-2024-9266

URL Redirect/Open Redirect
Affectations
Express
>=3.4.5 <4.0.0
en
Express
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

Express est un framework d'application web Node.js minimal et flexible qui offre un ensemble de fonctionnalités robustes pour les applications web et mobiles.

Une vulnérabilité de redirection ouverte(CVE-2024-9266) a été identifiée dans l'objet Express 3 Response. 

Selon l'OWASP, la redirection ouverte, également appelée redirection d'URL, est une faille de validation d'entrée qui existe lorsqu'une application accepte une entrée contrôlée par l'utilisateur qui spécifie un lien menant à une URL externe qui pourrait être malveillante. Ce type de vulnérabilité peut être utilisé pour réaliser une attaque par hameçonnage ou rediriger une victime vers une page d'infection.

Ce problème concerne les versions d'Express supérieures ou égales à 3.4.5 et inférieures à 4.0.0.

Détails

Informations sur le module

Informations sur les vulnérabilités

Cette vulnérabilité de gravité moyenne est présente dans response.js du paquetage Express.  

La méthode location() d'Express dans l'objet réponse est susceptible de faire l'objet d'une redirection ouverte lorsque :

  1. un chemin d'accès commence par une double barre oblique(//)
    ET
  2. un chemin relatif pour la redirection commence par ./ et est fourni à partir d'une entrée contrôlée par l'utilisateur
    ET
  3. l'en-tête Location est défini avec cette entrée contrôlée par l'utilisateur

La méthode location() extrait le chemin // et l'ajoute à l'URL relative en utilisant la méthode resolve() qui évalue le./ et le renvoie sous forme de / , de sorte que l'URL résultante pour la redirection de l'emplacement devient quelque chose comme "///example.com". Cela sera évalué dans la plupart des navigateurs comme équivalent à `//example.com` qui est un scheme-relative-special-url valide et sera envoyé dans l'en-tête en tant que 'Location : ///example.com" et peut rediriger les utilisateurs vers le site d'un pirate.

Étapes de la reproduction

  • Dans le code de l'application Express, créez un chemin qui redirige un utilisateur vers un emplacement fourni par un paramètre de requête URL. 
app.get(['/'], function (req, res) { 
  const pageId = req.query.pageId;
  if (pageId && pageId[0] == '.') { 
    res.status(301).location(pageId); 
  }
  res.send('OK'); 
});

  • Dans un navigateur, visitez la route de l'application Express avec une requête comme la suivante :
http ://localhost:3000//?pageId=./exemple.com

  • Le navigateur devrait être redirigé vers https://example.com. Le résultat peut également être observé en inspectant les détails de l'en-tête du navigateur avec Chrome DevTools.

Preuve de concept

Une reproduction complète avec un code similaire à celui mentionné ci-dessus est disponible ici :
Express 3.x open redirect reproduction

Crédits

  • Matvejs Mascenko (trouveur)

Atténuation

Express 3 a atteint sa fin de vie et ne recevra plus de mises à 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 d'Express
  • Appliquer son propre correctif
  • 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-9266
PROJET concerné
Express
Versions concernées
>=3.4.5 <4.0.0
Date de publication
3 octobre 2024
≈ Date fixe
23 août 2024
Fixé en
Sévérité
Moyen
Catégorie
URL Redirect/Open Redirect