
Exploit automatizado para injeção NoSQL no Rocket.Chat (CVE-2021-22911) que vaza tokens de redefinição de senha e realiza tomada de conta sem autenticação.
Um script de exploração automatizado para o Rocket.Chat (e aplicações baseadas em Meteor) que aproveita uma Injeção NoSQL através da cláusula $where para vazar tokens de redefinição de senha por meio de exceções do servidor. Uma vez que o token é vazado, o script realiza uma redefinição de senha não autenticada.
Autenticação: O script autentica como um usuário padrão para obter acesso ao endpoint /api/v1/users.list.
Injeção NoSQL: Utiliza o parâmetro query para injetar uma cláusula JavaScript $where.
Exfiltração de Dados: Ao usar a instrução throw dentro da injeção, força o servidor a retornar um erro de "exceção não capturada" contendo o token de redefinição de senha do usuário alvo.
Assunção de Conta: O script usa o token vazado para chamar resetPassword, alterando a senha da conta alvo.
Python 3.x
Biblioteca requests
Bash
pip install requests
Bash
python3 exploit.py --url http://<TARGET_IP>:3000\
-u <YOUR_USER>\
-p <YOUR_PASS>\
-a <TARGET_ADMIN_USER>\
-ap <NEW_ADMIN_PASSWORD>
| Argumento | Bandeira Longa | Descrição |
|---|---|---|
-u | --user | Seu nome de usuário ou email válido para autenticação inicial. |
-p | --password | Sua senha válida. |
-a | --admin | O nome de usuário da conta que você deseja redefinir. |
-ap | --admin-pass | A nova senha a ser definida para a conta de administrador. |
--url | A URL base da instância do Rocket.Chat. |
O núcleo da exploração é a string de injeção:
JavaScript
{"$where":"this.username==='admin' && (()=>{ throw this.services.password.reset.token })()"}
Quando processada pelo servidor, o mecanismo do banco de dados executa a função anônima, falha no throw, e a aplicação captura a exceção, inadvertidamente passando o token secreto de volta para o usuário na resposta de erro JSON.