
취약점 개요
| 항목 | 내용 |
| CVE ID | CVE-2026-67401 |
| 대상 컴포넌트 | cPanel & WHM — EmailTrack (Email ▸ Track Delivery) |
| 취약점 유형 | CWE-89 (SQL Injection) |
| 공개일 | 2026년 9월 8일 (cPanel 공식 권고문), CVE 레코드 등록 2026년 9월 9일 |
| 영향받는 버전 | cPanel & WHM의 모든 지원 버전 (11.110, 11.134, 11.136, 11.138, WP2 계열 포함) |
| 공격 조건 | 메일 관련 권한을 가진 일반 cPanel 계정으로 인증된 상태 |
| 영향 | SQL Injection → 임의 파일 생성 → root 권한 코드 실행 |
EmailTrack은 cPanel 사용자가 자신의 도메인에서 발송·수신된 이메일의 배달 상태와 로그를 조회할 수 있게 해주는 "Track Delivery" 기능이다. 이 기능 자체는 자기 계정 범위 내의 조회 기능이라는 점이 중요하다. cPanel의 권한 모델에서 일반 계정은 자신의 메일/도메인 데이터만 다룰 수 있고, 서버 전체를 통제하는 것은 WHM을 통한 root 뿐이다. CVE-2026-67401은 바로 이 경계를 SQL Injection 하나로 무너뜨린다.
cPanel 공식 권고문은 특이하게도 취약한 요청 파라미터, 실제 SQL 구문, 파일 생성이 root 실행으로 이어지는 정확한 메커니즘을 공개하지 않았다. 아래 분석은 공개된 취약점 분류(SQL Injection → 파일 쓰기 → 권한 상승)와 cPanel 아키텍처의 공개된 특성을 바탕으로 한 개념적 재구성이며, 실제 cPanel 소스코드나 검증된 공격 코드가 아니라는 점을 먼저 밝힌다.
공격 흐름 한눈에 보기

- 인증 — 공격자는 별도의 취약점 없이, 메일 권한만 가진 정상적인 cPanel 계정(혹은 탈취한 계정)으로 로그인한다.
- SQL Injection — EmailTrack이 호출하는 UAPI/내부 API의 파라미터(계정명, 도메인명 등)가 SQL 쿼리에 그대로 삽입된다.
- 파일 쓰기 — 삽입된 SQL이 INTO OUTFILE 계열 구문을 실행시켜, DB 서버 프로세스 권한으로 웹 루트 등 임의 경로에 파일을 생성한다.
- 코드 실행 — 생성된 파일이 PHP 등으로 해석되며, 공격자는 해당 계정(또는 서비스 계정) 권한으로 명령을 실행할 수 있게 된다.
- Root 권한 상승 — cPanel 환경에 존재하는 SUID 바이너리, cron, 내부 작업 큐 등 로컬 권한 상승 경로를 통해 최종적으로 root를 획득한다.
핵심은 1번(인증)의 문턱이 매우 낮다는 것이다. 서버 관리자가 아니라 메일 계정 하나만 가진 일반 고객이 공격자가 될 수 있다는 뜻이고, 이는 공유 호스팅 환경에서 "옆집 계정"이 전체 서버를 장악할 수 있다는 의미다.
권한 경계가 어떻게 무너지는가

cPanel의 권한 모델은 단순하다.
- 일반 계정: 자신의 메일, 도메인, 파일에만 접근
- WHM/root: 서버 전체와 모든 계정을 통제
이 둘 사이의 경계는 "코드가 사용자 입력을 신뢰하지 않는다"는 전제 위에 서 있다. EmailTrack이 사용자 입력(계정명 파라미터)을 SQL 쿼리 문자열에 안전하지 않게 끼워 넣는 순간, 그 경계는 애플리케이션 로직이 아니라 공격자가 작성한 SQL 구문이 결정하게 된다. 즉, "내 메일 기록만 보여줘"라는 요청이 "DB 서버 프로세스의 쓰기 권한으로 서버 어딘가에 파일을 하나 만들어줘"라는 전혀 다른 요청으로 둔갑하는 것이다.
소스코드 수준 분석 (개념적 재구성)
cPanel은 비공개 소스 소프트웨어이고, 이번 권고문은 실제 코드나 쿼리를 공개하지 않았다. 아래 코드는 **"사용자 입력이 검증 없이 SQL 쿼리 문자열에 결합되는 전형적인 SQL Injection 패턴"**을 보여주기 위한 예시이며, cPanel의 실제 구현이 아니다.
1) 취약한 패턴: 문자열 결합으로 쿼리를 만드는 경우

이렇게 짜여진 코드는 $account 값이 정상적인 계정명(alice)일 때는 문제없이 동작한다. 하지만 입력값에 작은따옴표(')로 문자열을 조기에 끝내버리는 값이 들어오면, 그 뒤에 이어지는 문자열은 데이터가 아니라 SQL 명령어로 해석된다. 이것이 SQL Injection의 가장 기본적인 원리다.
2) "쉽게 보는" SQL Injection의 핵심 — 따옴표 하나의 의미 변화

쿼리 작성자 입장에서는 account가 항상 "값"이라고 가정하고 코드를 짰지만, DB 엔진 입장에서는 최종적으로 조립된 문자열 전체가 "실행할 SQL"이다. 이 간극이 모든 SQL Injection의 본질이다.
3) 파일 쓰기로 이어지는 지점 — INTO OUTFILE의 위험성
MySQL/MariaDB는 SELECT ... INTO OUTFILE '경로' 구문을 통해 쿼리 결과를 서버의 파일 시스템에 직접 써 줄 수 있다. 이 기능 자체는 백업이나 데이터 내보내기 같은 정상적인 용도로 존재한다. 문제는 이 구문이 공격자가 통제하는 SQL 안에 삽입될 수 있을 때다.

이 구문이 실행되면, DB 서버 프로세스가 가진 파일 쓰기 권한으로 웹에서 접근 가능한 경로에 PHP 코드가 담긴 파일이 생성된다. 웹 서버가 그 경로를 PHP로 해석하도록 설정되어 있다면, 공격자는 브라우저로 그 파일에 접속하는 것만으로 자신이 넣은 코드를 실행시킬 수 있다. SQL Injection이 "코드 실행"으로 바뀌는 지점이 바로 여기다.
4) 왜 하필 "root"까지 가는가 — 로컬 권한 상승의 역할
3번 단계까지는 공격자가 획득하는 것이 DB 서버 프로세스 또는 해당 계정 수준의 실행 권한이지, 곧바로 root는 아니다. cPanel 공고문이 "root 코드 실행으로 이어진다"고 명시한 것은, 이 지점부터 별도의 로컬 권한 상승(privilege escalation) 경로가 추가로 작동한다는 뜻으로 읽을 수 있다. cPanel/WHM 환경에는 다음과 같은 전형적인 상승 지점이 존재한다.
- SUID가 설정된 cPanel 전용 바이너리: 특정 조건에서 root 권한으로 실행되도록 설계된 유틸리티
- cron 작업: root 소유로 주기 실행되는 스크립트가 공격자가 쓸 수 있는 경로를 참조하는 경우
- 내부 작업 큐(task queue): 데몬이 root 권한으로 큐에 쌓인 작업을 처리하는 구조
이런 상승 경로가 정확히 "어떤 바이너리"였는지는 cPanel이 공개하지 않았으므로, 이 글에서는 원리 수준까지만 다룬다. 핵심은 "SQLi → 파일 쓰기"가 사슬의 전부가 아니라, 그 다음에 낮은 권한에서 root로 넘어가는 별도의 설계 결함이 하나 더 연결되어야 완전한 공격 체인이 완성된다는 점이다.
영향도
- 공격 전제조건이 매우 낮다: 관리자 권한이 아니라 메일 기능 하나만 있는 일반 계정이면 충분하다.
- 공유 호스팅 환경에서 치명적: 한 서버에 수백 개의 계정이 올라가 있는 구조에서, 계정 하나만 뚫리면 전체 서버와 다른 모든 고객의 데이터가 위험해진다.
- 탐지가 쉽지 않다: 공격의 시작점이 "정상적인 EmailTrack API 호출"이기 때문에, 별도의 모니터링 없이는 비정상 접근 패턴으로 구분하기 어렵다.
패치 및 대응 방안
| 빌드 계열 | 패치된 버전 |
| 11.110 | 11.110.0.143 |
| 11.134 | 11.134.0.55 |
| 11.136 | 11.136.0.39 |
| 11.138 | 11.138.0.4 |
| WP2 (11.138) | 11.138.1.9 |
현재 설치된 버전 확인:
cat /usr/local/cpanel/version
대응은 명확하다. WHM에서 Home ▸ cPanel ▸ Upgrade to Latest Version으로 즉시 업데이트하거나, root로 직접 업그레이드 명령을 실행해 패치된 빌드로 올려야 한다. 이 취약점은 네트워크 스캐너로 사전에 걸러낼 수 있는 성격이 아니라 인증 후 로직 결함이므로, 버전 업그레이드 외에는 사실상 완화책이 마땅치 않다.
'CVE 취약점' 카테고리의 다른 글
| CVE-2026-61500: Rejetto HFS 세션 위조를 통한 RCE (0) | 2026.10.04 |
|---|---|
| CVE-2026-68771 – ComfyUI LoadTrainingDataset 노드 안전하지 않은 역직렬화로 인한 미인증 원격코드실행(RCE) (0) | 2026.10.03 |
| CVE-2026-12227: Visual Composer Website Builder 인증 없는 LFI 취약점 분석 (0) | 2026.10.01 |
| CVE-2026-87902 분석: WordPress Core 인증 없는 LFI, 그리고 조건부 RCE (0) | 2026.09.30 |
| CVE-2026-31431 "Copy Fail" — Linux 커널 algif_aead 권한 상승 취약점 분석 (0) | 2026.09.29 |