
Exploit automatizzato per l'iniezione NoSQL di Rocket.Chat (CVE-2021-22911) che perde i token di reset password ed esegue il takeover dell'account non autenticato.
Uno script di exploit automatizzato per Rocket.Chat (e applicazioni basate su Meteor) che sfrutta una NoSQL Injection tramite la clausola $where per divulgare token di reset password attraverso eccezioni lato server. Una volta divulgato il token, lo script esegue un reset password non autenticato.
Autenticazione: Lo script si autentica come utente standard per ottenere accesso all'endpoint /api/v1/users.list.
NoSQL Injection: Utilizza il parametro query per iniettare una clausola JavaScript $where.
Data Exfiltration: Utilizzando l'istruzione throw all'interno dell'iniezione, costringe il server a restituire un errore 'eccezione non catturata' contenente il token di reset password dell'utente target.
Acquisizione dell'account: Lo script utilizza il token divulgato per chiamare resetPassword, cambiando la password dell'account target.
Python 3.x
Libreria 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>
Il cuore dell'exploit è la stringa di iniezione:
JavaScript
{"$where":"this.username==='admin' && (()=>{ throw this.services.password.reset.token })()"}
Quando viene elaborato dal server, il motore del database esegue la funzione anonima, si blocca sull'istruzione throw, e l'applicazione cattura l'eccezione, passando involontariamente il token segreto all'utente nella risposta di errore JSON.
| Argomento | Flag Lungo | Descrizione |
|---|
-u | --user | Il tuo nome utente o email validi per l'autenticazione iniziale. |
-p | --password | La tua password valida. |
-a | --admin | Il nome utente dell'account che vuoi resettare. |
-ap | --admin-pass | La nuova password da impostare per l'account admin. |
--url | L'URL di base dell'istanza Rocket.Chat. |