
Detecte com segurança se um host SolarWinds Serv-U está vulnerável ao CVE-2026-28318
Um detector seguro, não destrutivo para CVE-2026-28318, uma negação de serviço não autenticada no SolarWinds Serv-U <= 15.5.4.108. Um único POST que carrega Content-Encoding: deflate e um corpo alimenta esse corpo para um descompressor deflate em memória (CZLibCompression) cujo gerenciamento de buffer realiza um free() inválido, abortando o processo do serviço Serv-U. (CVSS 7.5, AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, CWE-763.)
Este script não derruba o alvo. Ele responde uma pergunta por host: a correção 15.5.4 HF1 está ausente? Isso é um proxy exato para saber se o servidor é vulnerável ao CVE-2026-28318.
Sim. Este é o objetivo principal da ferramenta, e é seguro executá-la contra produção:
deflate. deflate é o único valor de Content-Encoding que inicia o descompressor vulnerável. O script envia um único POST com um Content-Encoding: identity benigno e um corpo curto, que nunca atinge o caminho de código que causa a falha.15.5.4.125) rejeita qualquer requisição que tenha um corpo e um Content-Encoding não vazio com 415 Unsupported Media Type. Builds vulneráveis não possuem essa barreira e tratam a sonda identity normalmente. Portanto, o veredito depende puramente do código de status, e o serviço nunca é desestabilizado.O script envia um POST seguro para a raiz do site e lê o código de status:
O alvo é identificado como Serv-U pelo próprio cabeçalho Server da resposta da sonda, portanto nenhuma requisição de identificação separada é necessária.
Isso prova que a correção está ausente; não derruba o serviço para confirmar. Um veredito
VULNERABLEsignifica que a barreira de validação de entrada do HF1 está ausente, o que é um proxy exato para este CVE. O script deliberadamente para aí em vez de enviar o valordeflateque causa a falha.
# 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
Um servidor Serv-U vulnerável (o marcador [!] e VULNERABLE aparecem em vermelho no TTY):
$ ./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+).
Um servidor corrigido retorna PATCHED (a barreira 415 do HF1 respondeu à sonda identity):
$ ./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.
Escaneie uma lista, uma linha alinhada por host (--brief). O código de saída é 1 se algum host for VULNERABLE, caso contrário 0, o que é útil em scripts:
$ ./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
Saída legível por máquina para 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+)."
}
]
| Código | Significado |
|---|---|
0 | Nenhum alvo era VULNERABLE |
1 | Pelo menos um alvo é VULNERABLE |
2 | Erro de uso (argumentos ruins / arquivo de alvos ilegível) |
Server (reportado como NOT-SERV-U) ou responder com seu próprio 415 (um possível falso PATCHED). Aponte a ferramenta diretamente para a interface de gerenciamento do Serv-U sempre que possível.VULNERABLE prova que a correção de validação de entrada do HF1 está ausente; não demonstra a falha (por design). Essa barreira é um proxy exato para este CVE.Atualize para SolarWinds Serv-U 15.5.4 Hotfix 1 (build 15.5.4.125) ou posterior, que adiciona a barreira de validação de entrada que rejeita uma requisição carregando um corpo e um Content-Encoding não vazio. Até que você possa corrigir, restrinja o acesso de rede ao serviço Serv-U a fontes confiáveis.
Este código é distribuído sob uma licença MIT.
O uso desta ferramenta para atacar alvos sem consentimento mútuo prévio é ilegal. É de responsabilidade do usuário final obedecer todas as leis locais, estaduais e federais aplicáveis. Os desenvolvedores não assumem responsabilidade e não são responsáveis por qualquer uso indevido ou danos causados por este programa.
Resposta da sonda identity | Veredito | Significado |
|---|
Cabeçalho Serv-U no Server, status ≠ 415 (ex.: 401 / 404 / 200 / 302) | VULNERABLE [missing-415-gate] | A barreira 415 do HF1 está ausente, portanto build <= 15.5.4.108, CVE-2026-28318 sem correção. |
Cabeçalho Serv-U no Server, status = 415 | PATCHED [hf1-415-gate] | Barreira de validação de entrada do HF1 presente, portanto build >= 15.5.4.125. Não vulnerável. |
Respondeu, mas sem cabeçalho Serv-U no Server | NOT-SERV-U [not-servu] | Não é um servidor Serv-U, ou um proxy removeu o cabeçalho. |
| Nenhuma resposta utilizável / falha de conexão | ERROR [no-response] | Nenhum serviço HTTP acessível, filtrado, erro TLS ou tempo esgotado. |
| Flag | Descrição |
|---|
targets | Um ou mais HOST[:PORT] ou URL (esquema padrão https://) |
-t, --target TARGET | Adicionar um alvo (repetível) |
-f, --file FILE | Ler alvos de um arquivo (um por linha; comentários #) |
-b, --brief | Uma linha alinhada por alvo, ideal para escanear muitos hosts |
--json | Emitir resultados JSON estruturados |
--no-color | Desabilitar saída colorida (também respeita NO_COLOR e não-TTY) |
--timeout SECS | Tempo limite por sonda (padrão: 10) |
-v, --verbose | Mostrar a sonda enviada e os cabeçalhos brutos da resposta |
| Veredito | Tag de motivo | Significado |
|---|
VULNERABLE | missing-415-gate | Servidor Serv-U sem barreira 415 do HF1, portanto build <= 15.5.4.108, CVE-2026-28318 sem correção. Corrija imediatamente. |
PATCHED | hf1-415-gate | Servidor Serv-U que responde à sonda identity com 415, portanto a correção HF1 está presente (build >= 15.5.4.125). |
NOT-SERV-U | not-servu | Respondeu, mas sem cabeçalho Serv-U no Server; não é Serv-U, ou um proxy removeu. |
ERROR | no-response | Nenhuma resposta HTTP utilizável (nenhum serviço na porta, filtrado, erro TLS ou tempo esgotado). |
ERROR | bad-target | O argumento do alvo não pôde ser analisado. |