
SolarWinds Serv-U 호스트가 CVE-2026-28318에 취약한지 안전하게 탐지
안전하고 파괴적이지 않은 탐지기로 CVE-2026-28318에 대한 것입니다. **SolarWinds Serv-U <= 15.5.4.108**에서의 인증되지 않은 서비스 거부 취약점입니다. 본문과 함께 Content-Encoding: deflate를 전달하는 단일 POST가 해당 본문을 메모리 내 deflate 압축 해제기(CZLibCompression)에 공급하며, 그 버퍼 관리가 잘못된 free()를 수행하여 Serv-U 서비스 프로세스를 중단시킵니다. (CVSS 7.5, AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, CWE-763.)
이 스크립트는 대상을 충돌시키지 않습니다. 호스트당 한 가지 질문에 답합니다: 15.5.4 HF1 수정이 누락되었습니까? 이것은 서버가 CVE-2026-28318에 취약한지 여부에 대한 정확한 대리자입니다.
예. 이것이 이 도구의 핵심이며, 프로덕션 환경에서 실행해도 안전합니다:
deflate를 절대 보내지 않습니다. deflate는 취약한 압축 해제기를 시작하는 유일한 Content-Encoding 값입니다. 스크립트는 무해한 Content-Encoding: identity와 짧은 본문을 가진 단일 POST를 보내며, 이는 충돌 코드 경로에 도달하지 않습니다.15.5.4.125)은 본문과 비어 있지 않은 Content-Encoding을 가진 모든 요청을 **415 Unsupported Media Type**으로 거부합니다. 취약한 빌드는 그러한 게이트가 없으며 identity 프로브를 정상적으로 처리합니다. 따라서 판정은 순전히 상태 코드에 달려 있으며, 서비스는 절대 불안정해지지 않습니다.스크립트는 사이트 루트로 하나의 안전한 POST를 보내고 상태 코드를 읽습니다:
대상은 프로브 응답 자체의 Server 헤더에서 Serv-U로 식별되므로 별도의 식별 요청이 필요하지 않습니다.
수정이 누락되었음을 증명합니다; 확인을 위해 서비스를 충돌시키지 않습니다.
VULNERABLE판정은 HF1 입력 유효성 검사 게이트가 없음을 의미하며, 이는 이 CVE의 정확한 대리자입니다. 스크립트는 의도적으로 충돌하는deflate값을 보내지 않고 거기서 멈춥니다.
# 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
취약한 Serv-U 서버 ([!] 표시와 VULNERABLE은 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+).
패치된 서버는 PATCHED를 반환합니다 (HF1 415 게이트가 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.
목록 스캔, 호스트당 정렬된 한 줄 (--brief). 종료 상태는 호스트가 VULNERABLE이면 1, 그렇지 않으면 0이며, 스크립트에서 유용합니다:
$ ./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
파이프라인을 위한 기계 판독 가능 출력 (--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+)."
}
]
| 코드 | 의미 |
|---|---|
0 | VULNERABLE인 대상 없음 |
1 | 하나 이상의 대상이 VULNERABLE임 |
2 | 사용법 오류 (잘못된 인수 / 읽을 수 없는 대상 파일) |
Server 헤더를 제거하거나 (NOT-SERV-U로 보고) 자체 415로 응답할 수 있습니다 (가짜 PATCHED 가능). 가능하면 도구를 Serv-U 관리 인터페이스에 직접 지정하십시오.VULNERABLE 판정은 HF1 입력 유효성 검사 수정이 없음을 증명합니다; 충돌을 입증하지는 않습니다 (의도적으로). 그 게이트는 이 CVE의 정확한 대리자입니다.SolarWinds Serv-U 15.5.4 Hotfix 1 (빌드 15.5.4.125) 이상으로 업그레이드하십시오. 이는 본문과 비어 있지 않은 Content-Encoding을 모두 포함하는 요청을 거부하는 입력 유효성 검사 게이트를 추가합니다. 패치할 수 있을 때까지 Serv-U 서비스에 대한 네트워크 액세스를 신뢰할 수 있는 소스로 제한하십시오.
이 코드는 MIT 라이선스에 따라 배포됩니다.
사전 상호 동의 없이 대상을 공격하기 위해 이 도구를 사용하는 것은 불법입니다. 모든 관련 지역, 주, 연방 법률을 준수하는 것은 최종 사용자의 책임입니다. 개발자는 어떠한 책임도 지지 않으며 이 프로그램으로 인한 오용이나 손해에 대해 책임을 지지 않습니다.
identity 프로브 응답 | 판정 | 의미 |
|---|
Serv-U Server 헤더, 상태 ≠ 415 (예: 401 / 404 / 200 / 302) | VULNERABLE [missing-415-gate] | HF1 415 게이트가 없음, 따라서 빌드 <= 15.5.4.108, CVE-2026-28318 패치되지 않음. |
Serv-U Server 헤더, 상태 = 415 | PATCHED [hf1-415-gate] | HF1 입력 유효성 검사 게이트 있음, 따라서 빌드 >= 15.5.4.125. 취약하지 않음. |
응답했지만 Serv-U Server 헤더 없음 | NOT-SERV-U [not-servu] | Serv-U 서버가 아니거나 프록시가 헤더를 제거함. |
| 사용 가능한 응답 없음 / 연결 실패 | ERROR [no-response] | 도달 가능한 HTTP 서비스 없음, 필터링됨, TLS 오류 또는 시간 초과. |
| 플래그 | 설명 |
|---|
targets | 하나 이상의 HOST[:PORT] 또는 URL (스킴 기본값은 https://) |
-t, --target TARGET | 대상 추가 (반복 가능) |
-f, --file FILE | 파일에서 대상 읽기 (한 줄에 하나; # 주석) |
-b, --brief | 대상당 정렬된 한 줄, 많은 호스트 스캔에 이상적 |
--json | 구조화된 JSON 결과 출력 |
--no-color | 색상 출력 비활성화 (NO_COLOR 및 비-TTY도 준수) |
--timeout SECS | 프로브당 시간 초과 (기본값: 10) |
-v, --verbose | 보낸 프로브와 원시 응답 헤더 표시 |
| 판정 | 이유 태그 | 의미 |
|---|
VULNERABLE | missing-415-gate | HF1 415 게이트가 없는 Serv-U 서버, 따라서 빌드 <= 15.5.4.108, CVE-2026-28318 패치되지 않음. 즉시 패치하십시오. |
PATCHED | hf1-415-gate | identity 프로브에 415로 응답하는 Serv-U 서버, 따라서 HF1 수정이 있음 (빌드 >= 15.5.4.125). |
NOT-SERV-U | not-servu | 응답했지만 Serv-U Server 헤더 없음; Serv-U가 아니거나 프록시가 제거함. |
ERROR | no-response | 사용 가능한 HTTP 응답 없음 (해당 포트에 서비스 없음, 필터링됨, TLS 오류 또는 시간 초과). |
ERROR | bad-target | 대상 인수를 구문 분석할 수 없음. |