
Cacti ≤1.2.30에 대한 CVE-2026-39938 상세 취약점 보고서로, 인증 없이 LFI를 연쇄하여 OS 명령 주입 RCE를 달성하는 PoC, 근본 원인 분석 및 수정 지침을 제공합니다.
| 필드 | 값 |
|---|
| 제품 | Cacti — 완전한 RRDtool 기반 그래핑 솔루션 |
| 영향받는 버전 | ≤ 1.2.30 |
| 취약점 클래스 | CWE-22: 경로 탐색 (LFI) → CWE-78: OS 명령 삽입 |
| 공격 벡터 | 네트워크 |
| 인증 | 필요 없음 (게스트 계정 우회) |
| 사용자 상호작용 | 없음 |
| CVSSv3.1 점수 | 9.8 — 치명적 |
| 벡터 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
Cacti ≤ 1.2.30은 graph_image.php의 graph_theme 매개변수를 통한 인증되지 않은 로컬 파일 포함(LFI) 에 취약하며, Windows에서 cacti_escapeshellarg()를 통한 OS 명령 삽입을 통해 원격 코드 실행(RCE) 로 연결됩니다.
HTTP 요청
│
▼
graph_image.php
│
├── $guest_account = true → 인증 우회 (로그인 불필요)
│
├── graph_theme 매개변수 → LFI (CWE-22)
│ └── basename() 우회를 통한 경로 탐색
│
└── 기타 매개변수 (graph_height 등)
└── cacti_escapeshellarg() → OS 삽입 (CWE-78)
└── proc_open() → RCE
graph_theme를 통한 LFIgraph_theme 매개변수가 충분히 검증되지 않았습니다. 수정에서는 basename()을 사용하려 했으나, themes/../../etc/passwd와 같은 경로는 basename() 검증을 통과하면서도 디렉토리 탐색이 가능하여 우회가 쉽습니다.
graph_image.php의 취약한 코드 경로:
$theme = basename($_GET['graph_theme']); // basename()은 충분하지 않음
include_once("./include/theme_" . $theme . ".php"); // LFI
1.2.31의 수정에서는 basename()을 cacti_validate_theme()로 대체하여 파일 시스템 허용 목록을 사용합니다.
| 조건 | 가능성 | 비고 |
|---|---|---|
| Cacti가 Windows에서 실행 | 엔터프라이즈 환경에서 일반적 | cmd.exe 이스케이프 결함으로 RCE 가능 |
| 게스트 계정 활성화 | 일반적 — 종종 기본값 | 게스트 사용자가 공개 그래프 보기 허용 |
| 하나 이상의 그래프 존재 | 거의 항상 | 설치 후 local_graph_id=1 존재 |
| RRDtool 설치됨 | Cacti에 필요 | 항상 존재 |
GET /cacti/graph_image.php?local_graph_id=1&graph_theme=../../../../etc/passwd
GET /cacti/graph_image.php?local_graph_id=1&graph_height=100" & whoami & "&action=view
OS 명령 삽입은 이미 직접적인 원격 코드 실행(RCE)을 제공하므로, 손상을 입히기 위해 LFI가 필요하지 않습니다.
그러나 연구자 관점에서 두 문제를 함께 고려하면:
이는 여러 취약점을 결합하면 전체 영향이 증가하고 익스플로잇이 더 쉽고 안정적이게 된다는 것을 보여줍니다.
| 기둥 | 등급 | 설명 |
|---|---|---|
| 기밀성 | 높음 | 웹 서버 파일 시스템(config, DB 자격 증명)에 대한 전체 읽기 액세스 |
| 무결성 | 높음 | 임의 명령 실행, 웹 셸 배포 |
| 가용성 | 높음 | 프로세스 종료, 파일 손상, DoS |
| 지표 | 값 |
|---|---|
| 공격 벡터 | 네트워크 |
| 공격 복잡성 | 낮음 |
| 필요한 권한 | 없음 |
| 사용자 상호작용 | 없음 |
| 범위 | 변경되지 않음 |
| 기밀성 | 높음 |
| 무결성 | 높음 |
| 가용성 | 높음 |
점수: 9.8 — 치명적
| 우선순위 | 조치 |
|---|---|
| 즉시 | Cacti 1.2.31 이상으로 업그레이드 |
MENG HOKSENG
독립 보안 연구원
참조: