
Nuclei-Erkennungsvorlage für CVE-2026-41473, eine Schwachstelle mit nicht authentifiziertem Lese-/Schreib-API-Zugriff in CyberPanel AI Scanner vor 2.4.4. Verwendet zwei HTTP-Proben, um die fehlende Authentifizierung zu bestätigen.
| Endpunkt | Methode | Auswirkung |
|---|
/api/ai-scanner/list-api-keys | GET | Gibt Administrator-Benutzernamen, API-Key-Präfixe, gehostete Domänennamen und Scan-IDs preis |
/api/ai-scanner/callback | POST | Akzeptiert ohne Authentifizierung beliebige Schreibvorgänge in den Scan-Verlauf |
Beide Endpunkte liegen unter dem URL-Präfix /api/*, das CyberPanels secMiddleware bedingungslos von Sitzungs-Authentifizierungsprüfungen ausnimmt. Für den Zugriff auf einen der beiden Endpunkte sind keinerlei Token, Sitzungs-Cookies oder Anmeldedaten erforderlich.
Der Lese-Endpunkt ermöglicht die Aufzählung von Zielen. Der Schreib-Endpunkt ermöglicht die Manipulation des Scan-Verlaufs und führt – verkettet mit dem gespeicherten XSS im AI-Scanner-Dashboard (CVE-2026-41472) – über die Manipulation von Cron-Jobs zu nicht authentifizierter Remote-Codeausführung.
CVSS 3.1: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — 9.8 Kritisch
CWE: CWE-306 (Fehlende Authentifizierung für kritische Funktion)
Behoben in: CyberPanel 2.4.4 (Commit 8eb29181cb137baa4adb4bba5dce60f601d55a5f)
Das Template sendet zwei Anfragen:
Anfrage 1 — GET /api/ai-scanner/list-api-keys
Bestätigt, dass das Ziel eine CyberPanel-Instanz mit aktivierter AI-Scanner-Funktion und ungeschütztem Lese-Endpunkt ist. Matcht auf die JSON-Struktur (api_keys, recent_scans, is_payment_configured) mit HTTP 200. Extrahiert Administrator-Benutzernamen, API-Key-Präfixe, Domänennamen und Scan-IDs als benannte Ausgaben.
Anfrage 2 — POST /api/ai-scanner/callback mit leerem Body {}
Testet den Schreib-Endpunkt, ohne einen echten Schreibvorgang auszuführen. Ein leerer Body bedeutet, dass keine scan_id vorhanden ist, sodass der Server keinen vorhandenen ScanHistory-Datensatz abgleichen oder ändern kann. Auf einem verwundbaren Server (< 2.4.4) wird die Authentifizierungsprüfung übersprungen und Django gibt HTTP 400 mit scan_id im Fehler-Body zurück – der Server erreichte die Eingabevalidierung, ohne jemals Authentifizierung zu erzwingen. Auf einem gepatchten Server (≥ 2.4.4) greift zuerst die Prüfung des X-API-Key-Headers und gibt HTTP 401 zurück, bevor scan_id überhaupt gelesen wird.
Für den Match sind alle folgenden Bedingungen erforderlich:
scan_id im Antwort-Body + Inhaltstyp application/jsonDiese Kombination bestätigt, dass die CyberPanel-AI-Scanner-Logik bei beiden Anfragen ohne erzwungene Authentifizierung erreicht wurde, während WAF-Blockierungen, Reverse-Proxy-Fehler und unzusammenhängende 400-Antworten ausgeschlossen werden.
nuclei -t cyberpanel-aisscanner-unauth-rw-cve-2026-41473.yaml -u https://target:8090
# Against a list of targets
nuclei -t cyberpanel-aisscanner-unauth-rw-cve-2026-41473.yaml -l targets.txt
| Version | Status |
|---|---|
| CyberPanel < 2.4.4 mit AI-Scanner | Verwundbar |
| CyberPanel ≥ 2.4.4 | Gepatcht |
| CyberPanel ohne AI-Scanner-Modul | Nicht betroffen |
CyberPanel-Instanzen ohne die AI-Scanner-Funktion (in der Regel Versionen vor 2.3) werden nicht matchen — der Endpunkt list-api-keys gibt 404 zurück und das Template wird nicht ausgelöst.