
Technical analysis and proof of concept for CVE-2026-59827, a critical unsafe Java deserialization vulnerability in Metabase leading to remote code execution.
심각도: 치명적(CVSS 9.9)
CVE: CVE-2026-59827
신고자: Matheus Gutierre (@Gutierre0x80)
게시일: 2026년 6월 30일
H2 데이터베이스에서 네이티브 SQL 쿼리에 접근할 수 있는 인증된 사용자는 SELECT CAST(X'...' AS OTHER) 쿼리에서 반환된 Java 객체의 안전하지 않은 역직렬화를 통해 Metabase 서버에서 임의의 Java 코드를 실행할 수 있습니다.
기본 Metabase 설치에는 H2 샘플 데이터베이스가 포함되어 있어 모든 기본 배포에서 이 취약점을 악용할 수 있습니다.
pip install requestsexploit.py와 같은 디렉터리에 있어야 합니다:모든 사전 요구 사항이 설치되어 PATH에 있는지 확인하십시오:
# Install Python requests library
pip install requests
# Verify Java is available (OpenJDK 11+)
java -version
# Verify Python 3.7+
python3 --version
그런 다음 poc/ 디렉터리에서 익스플로잇을 실행합니다:
cd poc/
python3 exploit.py <target_url> <username> <password> <command>
이 스크립트는 실행 전에 clojure-1.12.3.jar와 VarChainPayload.class가 작업 디렉터리에 있는지 검증합니다.
python3 exploit.py <target_url> <username> <password> <command>
python3 exploit.py http://127.0.0.1:3000 [email protected] Admin1234! "id > /tmp/pwned.txt"
이 명령은 Metabase 프로세스의 컨텍스트에서 실행됩니다 (일반적으로 Docker의 metabase 사용자).
H2 OTHER 열 유형은 JEP-290 필터링 없이 순수한 ObjectInputStream을 사용하여 Java 객체를 역직렬화합니다. 이로 인해 임의 클래스 인스턴스화가 가능합니다.
페이로드는 Clojure의 직렬화 가능 클래스(clojure.core$apply, clojure.lang.Var$Serialized, 및 PersistentList)를 기반으로 한 가젯 체인과 Java의 PriorityQueue를 결합하여 clojure.core/eval을 통한 코드 실행을 트리거합니다.
전체 기술 분석은 writeup/analysis.md를 참조하십시오.
| 인자 | 설명 | 예시 |
|---|
target_url | Metabase 인스턴스 URL | http://127.0.0.1:3000 |
username | 인증된 사용자 (관리자 또는 네이티브 쿼리 접근 권한 보유) | [email protected] |
password | 사용자 비밀번호 | SecurePassword123! |
command | 실행할 셸 명령 | id or whoami |