CVE-2025-23061 - Injection de commande dans Mongoose
Une preuve de concept pour la vulnérabilité d'injection de commande dans Mongoose < 8.9.5 affectant l'option match de la fonction populate().
Détails de la vulnérabilité
ID CVE : CVE-2025-23061
Sévérité : CRITIQUE (CVSS 9.0)
Paquet concerné : mongoose
Versions vulnérables :
- < 6.13.6
-
= 7.0.0 < 7.8.4
-
= 8.0.0 < 8.9.5
Chronologie de CVE-2024-53900 et CVE-2025-23061
- 7 novembre 2024 : Dat Phung a identifié une vulnérabilité critique dans Mongoose et a soumis un rapport de sécurité à Snyk.
- 26 novembre 2024 : Mongoose a publié la version 8.8.3 pour corriger cette vulnérabilité.
- 2 décembre 2024 : La National Vulnerability Database (NVD) a divulgué CVE-2024-53900 pour cette vulnérabilité.
- 17 décembre 2024 : En analysant le correctif de Mongoose 8.8.3, Dat Phung a trouvé un contournement permettant toujours l'exécution de code à distance (RCE). Un rapport de sécurité détaillé a été soumis à Tidelift.
- 13 janvier 2025 : Mongoose a publié la version 8.9.5, introduisant un correctif renforcé qui a effectivement résolu le contournement.
- 15 janvier 2025 : La National Vulnerability Database (NVD) a officiellement divulgué CVE-2025-23061, soulignant la gravité de la vulnérabilité nouvellement identifiée.
Cause racine
Cette vulnérabilité existe en raison d'un correctif incomplet pour CVE-2024-53900. Bien que l'injection directe de $where soit bloquée, les attaquants peuvent contourner cette protection en imbriquant les opérateurs $where dans des opérateurs logiques comme $and, $or, etc.
Chemin de code vulnérable :
- L'utilisateur fournit une entrée via le paramètre
match de populate()
- L'application utilise l'entrée utilisateur non nettoyée directement dans la requête de correspondance
- Mongoose ne nettoie pas
$where lorsqu'il est imbriqué dans des opérateurs logiques
- L'attaquant exécute du JavaScript arbitraire sur le serveur MongoDB
Impact
- Divulgation d'informations : Accès à des données sensibles sans autorisation appropriée
- Contournement d'authentification : Récupération d'informations réservées aux administrateurs
- Exécution de code arbitraire : Exécution de JavaScript sur le serveur MongoDB
- Modification de données : Possibilité de modifier des enregistrements dans la base de données
Configuration et exécution du PoC
Prérequis
- Node.js >= 14
- MongoDB fonctionnant en local ou accessible via une chaîne de connexion
Installation
# Installer les dépendances
npm install
# Optionnel : Utiliser une URI MongoDB spécifique
export MONGODB_URI="mongodb://localhost:27017/mongoose_cve_poc"
Exécuter le serveur vulnérable
npm start
Le serveur démarrera sur http://localhost:3000
Exécuter l'exploit
Dans un autre terminal :
node exploit.js
Références
Avertissement
Ce PoC est fourni à des fins éducatives uniquement. L'accès non autorisé à des systèmes informatiques est illégal. Utilisez-le uniquement sur des systèmes que vous possédez ou pour lesquels vous avez une autorisation explicite de test.