
Sicher erkennen, ob ein SolarWinds Serv-U-Host anfällig für CVE-2026-28318 ist.
Ein sicheres, nicht-destruktives Erkennungswerkzeug für CVE-2026-28318, einen nicht authentifizierten Denial-of-Service in SolarWinds Serv-U <= 15.5.4.108. Ein einzelner POST, der Content-Encoding: deflate und einen Body übermittelt, füttert diesen Body an einen In-Memory-Deflate-Dekomprimierer (CZLibCompression), dessen Pufferverwaltung eine ungültige free() durchführt, wodurch der Serv-U-Dienstprozess abbricht. (CVSS 7.5, AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, CWE-763.)
Dieses Skript stürzt das Ziel nicht ab. Es beantwortet eine Frage pro Host: Fehlt der 15.5.4 HF1-Fix? Das ist ein exakter Stellvertreter dafür, ob der Server anfällig für CVE-2026-28318 ist.
Ja. Das ist der ganze Sinn des Werkzeugs, und es ist sicher gegen die Produktion auszuführen:
deflate. deflate ist der einzige Content-Encoding-Wert, der den verwundbaren Dekomprimierer startet. Das Skript sendet einen einzelnen POST mit einem harmlosen Content-Encoding: identity und einem kurzen Body, der nie den abstürzenden Codepfad erreicht.15.5.4.125) lehnt jede Anfrage ab, die einen Body und eine nicht leere Content-Encoding hat, mit 415 Unsupported Media Type. Verwundbare Builds haben keine solche Sperre und behandeln den identity-Probe normal. Das Urteil beruht also rein auf dem Statuscode, und der Dienst wird nie destabilisiert.Das Skript sendet einen sicheren POST an das Site-Root und liest den Statuscode:
identity-Probeantwort | Urteil | Bedeutung |
|---|---|---|
Serv-U Server-Header, Status ≠ 415 (z.B. 401 / 404 / 200 / 302) | VULNERABLE [missing-415-gate] | Der HF1-415-Gate ist nicht vorhanden, daher Build <= 15.5.4.108, CVE-2026-28318 ungepatcht. |
Serv-U Server-Header, Status = 415 | PATCHED [hf1-415-gate] | HF1-Eingabevalidierungs-Gate vorhanden, daher Build >= 15.5.4.125. Nicht verwundbar. |
Antwort erhalten, aber kein Serv-U Server-Header | NOT-SERV-U [not-servu] | Kein Serv-U-Server, oder ein Proxy hat den Header entfernt. |
| Keine verwertbare Antwort / Verbindungsfehler | ERROR [no-response] | Kein HTTP-Dienst erreichbar, gefiltert, TLS-Fehler oder Zeitüberschreitung. |
Das Ziel wird anhand des Server-Headers in der Probeantwort als Serv-U identifiziert, daher ist keine separate Identifikationsanfrage nötig.
Es beweist, dass der Fix fehlt; es stürzt den Dienst nicht ab, um dies zu bestätigen. Ein
VULNERABLE-Urteil bedeutet, dass der HF1-Eingabevalidierungs-Gate fehlt, was ein exakter Stellvertreter für diese CVE ist. Das Skript stoppt bewusst dort, anstatt den abstürzendendeflate-Wert zu senden.
# single host (scheme defaults to https://)
./cve_2026_28318_check.py 10.0.0.5
# explicit URL / port
./cve_2026_28318_check.py https://10.0.0.5:443
# several hosts at once
./cve_2026_28318_check.py host-a:443 host-b https://host-c
# scan a list, one target per line ('#' comments allowed), compact output
./cve_2026_28318_check.py -f targets.txt --brief
# machine-readable output for pipelines
./cve_2026_28318_check.py -f targets.txt --json > results.json
| Flag | Beschreibung |
|---|---|
targets | Ein oder mehrere HOST[:PORT] oder URL (Schema standardmäßig https://) |
-t, --target TARGET | Ein Ziel hinzufügen (wiederholbar) |
-f, --file FILE | Ziele aus einer Datei lesen (eine pro Zeile; #-Kommentare) |
-b, --brief | Eine ausgerichtete Zeile pro Ziel, ideal zum Scannen vieler Hosts |
--json | Strukturierte JSON-Ergebnisse ausgeben |
--no-color | Farbausgabe deaktivieren (beachtet auch NO_COLOR und Nicht-TTY) |
--timeout SECS | Timeout pro Probe (Standard: 10) |
-v, --verbose | Gesendete Probe und die rohen Antwort-Header anzeigen |
Ein verwundbarer Serv-U-Server (die Markierung [!] und VULNERABLE werden auf einem TTY rot dargestellt):
$ ./cve_2026_28318_check.py https://10.0.0.5
[!] https://10.0.0.5: VULNERABLE [missing-415-gate]
Serv-U returned 401 (not 415) to the identity probe, so the HF1 415 gate is ABSENT (build <= 15.5.4.108) and CVE-2026-28318 is unpatched. This proves the fix is missing; it does NOT crash the service. Apply 15.5.4 HF1 (build 15.5.4.125+).
Ein gepatchter Server gibt PATCHED zurück (der HF1-415-Gate hat auf die Identitätsprobe geantwortet):
$ ./cve_2026_28318_check.py https://10.0.0.6
[+] https://10.0.0.6: PATCHED [hf1-415-gate]
Serv-U returned 415 to the identity probe, so the 15.5.4 HF1 input-validation gate is present (build >= 15.5.4.125). Not vulnerable to CVE-2026-28318.
Eine Liste scannen, eine ausgerichtete Zeile pro Host (--brief). Exit-Status ist 1, wenn irgendein Host VULNERABLE ist, sonst 0, was in Skripten nützlich ist:
$ ./cve_2026_28318_check.py -f targets.txt --brief; echo "exit: $?"
VULNERABLE https://10.0.0.5 missing-415-gate
PATCHED https://10.0.0.6 hf1-415-gate
NOT-SERV-U https://10.0.0.7 not-servu
ERROR https://10.0.0.8 no-response
exit: 1
Maschinenlesbare Ausgabe für Pipelines (--json):
$ ./cve_2026_28318_check.py https://10.0.0.5 --json
[
{
"target": "https://10.0.0.5",
"verdict": "VULNERABLE",
"reason": "missing-415-gate",
"detail": "Serv-U returned 401 (not 415) to the identity probe, so the HF1 415 gate is ABSENT (build <= 15.5.4.108) and CVE-2026-28318 is unpatched. This proves the fix is missing; it does NOT crash the service. Apply 15.5.4 HF1 (build 15.5.4.125+)."
}
]
| Urteil | Grund-Tag | Bedeutung |
|---|---|---|
VULNERABLE | missing-415-gate | Serv-U-Server ohne HF1-415-Gate, daher Build <= 15.5.4.108, CVE-2026-28318 ungepatcht. Sofort patchen. |
PATCHED | hf1-415-gate | Serv-U-Server, der auf die Identitätsprobe mit 415 antwortet, daher ist der HF1-Fix vorhanden (Build >= 15.5.4.125). |
NOT-SERV-U | not-servu | Hat geantwortet, aber kein Serv-U Server-Header; nicht Serv-U, oder ein Proxy hat ihn entfernt. |
ERROR | no-response | Keine verwertbare HTTP-Antwort (kein Dienst auf diesem Port, gefiltert, TLS-Fehler oder Zeitüberschreitung). |
ERROR | bad-target | Das Zielargument konnte nicht analysiert werden. |
| Code | Bedeutung |
|---|---|
0 | Kein Ziel war VULNERABLE |
1 | Mindestens ein Ziel ist VULNERABLE |
2 | Nutzungsfehler (ungültige Argumente / nicht lesbare Zieldatei) |
Server-Header entfernen (gemeldet als NOT-SERV-U) oder mit einem eigenen 415 antworten (möglicher falscher PATCHED). Richten Sie das Werkzeug direkt auf die Serv-U-Verwaltungsoberfläche, wo immer möglich.VULNERABLE-Urteil beweist, dass der HF1-Eingabevalidierungs-Fix fehlt; es demonstriert nicht den Absturz (designbedingt). Dieser Gate ist ein exakter Stellvertreter für diese CVE.