
Rileva in sicurezza se un host SolarWinds Serv-U è vulnerabile a CVE-2026-28318
Un rilevatore sicuro, non distruttivo per CVE-2026-28318, un denial-of-service non autenticato in SolarWinds Serv-U <= 15.5.4.108. Un singolo POST che trasporta Content-Encoding: deflate e un corpo alimenta quel corpo a un decompressore deflate in memoria (CZLibCompression) la cui gestione del buffer esegue un free() non valido, interrompendo il processo del servizio Serv-U. (CVSS 7.5, AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, CWE-763.)
Questo script non causa il crash del target. Risponde a una domanda per host: la correzione HF1 15.5.4 è assente? Questo è un proxy esatto per determinare se il server è vulnerabile a CVE-2026-28318.
Sì. Questo è l'intero scopo dello strumento ed è sicuro da eseguire contro la produzione:
deflate. deflate è l'unico valore Content-Encoding che avvia il decompressore vulnerabile. Lo script invia un singolo POST con un innocuo Content-Encoding: identity e un corpo breve, che non raggiunge mai il percorso del codice che causa il crash.15.5.4.125) rifiuta qualsiasi richiesta che abbia un corpo e un Content-Encoding non vuoto con 415 Unsupported Media Type. Le build vulnerabili non hanno tale blocco e gestiscono la sonda identity normalmente. Quindi il verdetto si basa esclusivamente sul codice di stato e il servizio non viene mai destabilizzato.Lo script invia un POST sicuro alla root del sito e legge il codice di stato:
Il target viene identificato come Serv-U dall'intestazione Server della risposta stessa, quindi non è necessaria una richiesta di identificazione separata.
Dimostra che la correzione è assente; non provoca il crash del servizio per confermarlo. Un verdetto
VULNERABLEsignifica che il blocco di validazione input di HF1 è assente, che è un proxy esatto per questa CVE. Lo script si ferma deliberatamente qui anziché inviare il valoredeflateche causa il crash.
# singolo host (lo schema predefinito è https://)
./cve_2026_28318_check.py 10.0.0.5
# URL / porta esplicita
./cve_2026_28318_check.py https://10.0.0.5:443
# più host contemporaneamente
./cve_2026_28318_check.py host-a:443 host-b https://host-c
# scansione da un elenco, un target per riga (commenti '#' consentiti), output compatto
./cve_2026_28318_check.py -f targets.txt --brief
# output machine-readable per pipeline
./cve_2026_28318_check.py -f targets.txt --json > results.json
Un server Serv-U vulnerabile (il marcatore [!] e VULNERABLE vengono visualizzati in rosso su un TTY):
$ ./cve_2026_28318_check.py https://10.0.0.5
[!] https://10.0.0.5: VULNERABLE [missing-415-gate]
Serv-U ha risposto con 401 (non 415) alla sonda identity, quindi il blocco 415 di HF1 è ASSENTE (build <= 15.5.4.108) e CVE-2026-28318 non è corretta. Questo dimostra che la correzione è assente; NON causa il crash del servizio. Applicare 15.5.4 HF1 (build 15.5.4.125+).
Un server corretto restituisce PATCHED (il blocco 415 di HF1 ha risposto alla sonda identity):
$ ./cve_2026_28318_check.py https://10.0.0.6
[+] https://10.0.0.6: PATCHED [hf1-415-gate]
Serv-U ha risposto con 415 alla sonda identity, quindi il blocco di validazione input di 15.5.4 HF1 è presente (build >= 15.5.4.125). Non vulnerabile a CVE-2026-28318.
Scansione di un elenco, una riga allineata per host (--brief). Lo stato di uscita è 1 se qualsiasi host è VULNERABLE, altrimenti 0, utile negli script:
$ ./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
Output machine-readable per pipeline (--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 ha risposto con 401 (non 415) alla sonda identity, quindi il blocco 415 di HF1 è ASSENTE (build <= 15.5.4.108) e CVE-2026-28318 non è corretta. Questo dimostra che la correzione è assente; NON causa il crash del servizio. Applicare 15.5.4 HF1 (build 15.5.4.125+)."
}
]
| Codice | Significato |
|---|---|
0 | Nessun target era VULNERABLE |
1 | Almeno un target è VULNERABLE |
2 | Errore di utilizzo (argomenti errati / file target illeggibile) |
Server (segnalato come NOT-SERV-U) o rispondere con un proprio 415 (un possibile falso PATCHED). Puntare lo strumento direttamente all'interfaccia di gestione di Serv-U quando possibile.VULNERABLE dimostra che la correzione di validazione input HF1 è assente; non dimostra il crash (per progettazione). Quel blocco è un proxy esatto per questa CVE.Aggiornare a SolarWinds Serv-U 15.5.4 Hotfix 1 (build 15.5.4.125) o successivo, che aggiunge il blocco di validazione input che rifiuta una richiesta con sia un corpo che un Content-Encoding non vuoto. Fino a quando non è possibile applicare la patch, limitare l'accesso di rete al servizio Serv-U a fonti fidate.
Questo codice è distribuito sotto una licenza MIT.
L'uso di questo strumento per attaccare target senza previo consenso reciproco è illegale. È responsabilità dell'utente finale rispettare tutte le leggi locali, statali e federali applicabili. Gli sviluppatori non si assumono alcuna responsabilità e non sono responsabili per qualsiasi uso improprio o danno causato da questo programma.
Risposta sonda identity | Verdetto | Significato |
|---|
Intestazione Server Serv-U, stato ≠ 415 (es. 401 / 404 / 200 / 302) | VULNERABLE [missing-415-gate] | Il blocco 415 di HF1 è assente, quindi build <= 15.5.4.108, CVE-2026-28318 non corretto. |
Intestazione Server Serv-U, stato = 415 | PATCHED [hf1-415-gate] | Blocco di validazione input HF1 presente, quindi build >= 15.5.4.125. Non vulnerabile. |
Ha risposto, ma nessuna intestazione Server Serv-U | NOT-SERV-U [not-servu] | Non è un server Serv-U, oppure un proxy ha rimosso l'intestazione. |
| Nessuna risposta utilizzabile / errore di connessione | ERROR [no-response] | Nessun servizio HTTP raggiungibile, filtrato, errore TLS o timeout. |
| Flag | Descrizione |
|---|
targets | Uno o più HOST[:PORT] o URL (lo schema predefinito è https://) |
-t, --target TARGET | Aggiungi un target (ripetibile) |
-f, --file FILE | Leggi target da un file (uno per riga; commenti #) |
-b, --brief | Una riga allineata per target, ideale per scansionare molti host |
--json | Emetti risultati JSON strutturati |
--no-color | Disabilita output colorato (rispetta anche NO_COLOR e non-TTY) |
--timeout SECS | Timeout per sonda (default: 10) |
-v, --verbose | Mostra la sonda inviata e le intestazioni della risposta grezze |
| Verdetto | Etichetta motivo | Significato |
|---|
VULNERABLE | missing-415-gate | Server Serv-U senza blocco 415 di HF1, quindi build <= 15.5.4.108, CVE-2026-28318 non corretta. Correggere immediatamente. |
PATCHED | hf1-415-gate | Server Serv-U che risponde alla sonda identity con 415, quindi la correzione HF1 è presente (build >= 15.5.4.125). |
NOT-SERV-U | not-servu | Ha risposto, ma nessuna intestazione Server Serv-U; non è Serv-U, oppure un proxy l'ha rimossa. |
ERROR | no-response | Nessuna risposta HTTP utilizzabile (nessun servizio su quella porta, filtrato, errore TLS o timeout). |
ERROR | bad-target | L'argomento del target non può essere analizzato. |