
CVE-2026-41940 cPanel/WHM Auth-Bypass-IOC-Scanner — behebt Fehlalarme im vorgelagerten Erkennungsskript und ergänzt Log-Kreuzkorrelation
Erkennungsskript für die cPanel/WHM-Authentifizierungsumgehung (CVE-2026-41940), die alle cPanel-Versionen nach 11.40 betrifft.
Dies ist eine Neufassung des offiziellen cPanel-Erkennungsskripts mit Korrekturen für Fehlalarme und ergänzter Log-Korrelation.
Durchsucht /var/cpanel/sessions/raw/ nach Sitzungsdateien, die Anzeichen einer Newline-Injection-Ausnutzung aufweisen, und gleicht verdächtige IPs und Sitzungstoken anschließend mit den cPanel-Zugriffs-/Login-/Fehlerprotokollen ab. Zusätzlich wird die access_log auf historische Ausnutzung geprüft, bei der die Sitzungsdatei inzwischen abgelaufen oder bereinigt wurde.
pass-Regex, die in Produktion bei jeder authentifizierten Sitzung Fehlalarme auslöst (die Regex matcht jedes pass=-Feld, gefolgt von einer weiteren Zeile – also jede Sitzungsdatei).method=badpass origin + BELIEBIGES Post-Auth-Attribut statt der engen -Kombination. Erfasst PoC-Varianten, die auslassen.token_denied + cp_security_tokentoken_deniedPOST /login/?login_only=1 -> 401) mit anschließender erfolgreicher cpsess-Token-Nutzung von derselben IP.--extended-Modus für einen tieferen Log-Scan über zusätzliche Quellen.# Bash – funktioniert überall, keine Abhängigkeiten
bash <(curl -fsSL https://raw.githubusercontent.com/AndreiG6/cpanel-cve-2026-41940-ioc/main/ioc.sh)
# Python – schneller bei großen Sitzungsverzeichnissen, unterstützt --json
curl -fsSLo /tmp/ioc.py https://raw.githubusercontent.com/AndreiG6/cpanel-cve-2026-41940-ioc/main/ioc.py
python3 /tmp/ioc.py
# Erweiterter Scan (beide Varianten)
bash <(curl -fsSL https://raw.githubusercontent.com/AndreiG6/cpanel-cve-2026-41940-ioc/main/ioc.sh) --extended
python3 /tmp/ioc.py --extended
# Exit-Code nach dem Lauf prüfen ($? = 0 sauber, 1 IOCs gefunden, 2 Umgebungsfehler)
echo $?
curl-Flags:
-fFehler bei HTTP-Fehlern statt eine Fehlerseite in bash zu pipen,-sstill (kein Fortschrittsbalken),-SFehler trotz-sanzeigen,-LRedirects folgen.
Die Python-Variante unterstützt --json für strukturierte Ausgabe, die Sie in jq pipen, in ein SIEM einspeisen oder programmatisch verarbeiten können.
# Vollständige JSON-Ausgabe
python3 ioc.py --json
# Nur die Zusammenfassungszahlen
python3 ioc.py --json | jq '.counts'
# Alle KRITISCHEN Befunde auflisten
python3 ioc.py --json | jq '[.findings[] | select(.severity == "CRITICAL")]'
# Eindeutige Angreifer-IPs extrahieren
python3 ioc.py --json | jq '.suspect_ips[]'
# Befunde mit ihren Quell-IPs anzeigen (für Firewall-Blocklisten)
python3 ioc.py --json | jq '[.findings[] | {severity, source_ip, token: .cp_security_token}]'
# Alle IPs mit erfolgreicher Token-Nutzung abrufen (für sofortige Blockierung)
python3 ioc.py --json | jq '[.findings[] | select(.severity == "CRITICAL") | .source_ip] | unique'
# Kreuzreferenzdaten für eine bestimmte IP abrufen
python3 ioc.py --json | jq '.cross_ref[.suspect_ips[0]]'
Beispiel-JSON-Struktur:
{
"findings": [
{
"severity": "CRITICAL",
"file": "/var/cpanel/sessions/raw/:Q3f8Ag2epeBuTaIZ",
"verdict": "Injected token used successfully (2xx/3xx in access_log)",
"origin": "address=203.0.113.50,app=whostmgrd,method=badpass",
"source_ip": "203.0.113.50",
"user": "root",
"hasroot": "1",
"tfa_verified": "0",
"cp_security_token": "/cpsess04396539398",
"token_denied": "1",
"successful_internal_auth_with_timestamp": "9999999999",
"token_hits": [
"203.0.113.50 - root [04/30/2026:12:12:01 -0000] \"GET /cpsess04396539398/json-api/version HTTP/1.1\" 200 0 ..."
]
},
{
"severity": "MEDIUM",
"file": "/var/cpanel/sessions/raw/:2TDiaHwh_r8qOH5y",
"verdict": "Injection landed; token was tried but BLOCKED (all 4xx/5xx)",
"source_ip": "198.51.100.23",
"cp_security_token": "/cpsess5637704041",
"token_hits": [
"198.51.100.23 - root [04/30/2026:04:08:09 -0000] \"GET /cpsess5637704041/json-api/version HTTP/1.1\" 403 0 ..."
]
},
{
"severity": "CRITICAL",
"file": null,
"verdict": "Injected cpsess token used with 2xx/3xx after failed login; session expired or purged",
"source_ip": "203.0.113.99",
"cp_security_token": "/cpsess8705792557",
"token_hits": ["..."]
}
],
"counts": {"critical": 2, "high": 15, "medium": 71, "warning": 0},
"suspect_ips": ["203.0.113.50", "198.51.100.23", "203.0.113.99"],
"suspect_ips_omitted": 0,
"cross_ref": {
"203.0.113.50": {
"cpanel_access_log": ["...last 5 lines..."],
"cpanel_login_log": ["..."]
}
},
"advisory": "https://support.cpanel.net/hc/en-us/articles/40073787579671"
}
git clone https://github.com/AndreiG6/cpanel-cve-2026-41940-ioc.git
cd cpanel-cve-2026-41940-ioc
# Bash-Variante
bash ioc.sh # Standard (KRITISCH/HOCH erweitert, MITTEL/WARNUNG nur Zählungen)
bash ioc.sh -v # ausführlich (alle Befunde erweitert)
bash ioc.sh --extended # ausführlich + tiefere Logs + alle IPs in der Kreuzreferenz
# Python-Variante (gleiche Erkennungslogik, schneller, strukturierte Ausgabe)
python3 ioc.py # Standard (gleiches Einklappverhalten wie bash)
python3 ioc.py -v # ausführlich
python3 ioc.py --extended # ausführlich + tiefere Logs
python3 ioc.py --json # strukturiertes JSON (enthält immer alle Befunde)
Muss als root auf dem Ziel-cPanel-Server ausgeführt werden. Die Python-Variante erfordert Python 3.6+ (bei CentOS 7 / CloudLinux 7+ enthalten).
| Code | Bedeutung |
|---|---|
| 0 | Keine Indikatoren gefunden |
| 1 | IOCs erkannt |
| 2 | Umgebungsfehler (kein cPanel-Server) |
MIT