
اكتشاف آمن لما إذا كان مضيف SolarWinds Serv-U عرضة لـ CVE-2026-28318
كاشف آمن غير مدمر لـ CVE-2026-28318، وهو حجب خدمة غير مصادق في SolarWinds Serv-U <= 15.5.4.108. طلب POST واحد يحمل Content-Encoding: deflate وجسم يغذي ذلك الجسم إلى مزيل ضغط 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 التي تبدأ مزيل الضغط الضعيف. يرسل السكريبت طلب POST واحد مع Content-Encoding: identity غير ضار وجسم قصير، لا يصل أبدًا إلى مسار الكود المتعطل.15.5.4.125) يرفض أي طلب يحتوي على جسم وContent-Encoding غير فارغة برمز 415 Unsupported Media Type. الإصدارات الضعيفة ليس لديها هذه البوابة وتتعامل مع استعلام identity بشكل طبيعي. لذا فإن الحكم يعتمد فقط على رمز الحالة، ولا يتم زعزعة استقرار الخدمة أبدًا.يرسل السكريبت طلب POST آمن واحد إلى جذر الموقع ويقرأ رمز الحالة:
يتم التعرف على الهدف كخادم Serv-U من رأس Server الخاص باستجابة الاستعلام، لذلك ليست هناك حاجة لطلب تحديد منفصل.
إنه يثبت أن الإصلاح مفقود؛ لا يتسبب في تعطل الخدمة للتأكيد. الحكم
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 أجابت على استعلام الهوية):
$ ./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). رمز الخروج هو 1 إذا كان أي مضيف VULNERABLE، وإلا 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، الحالة ≠ 415 (مثل 401 / 404 / 200 / 302) | VULNERABLE [missing-415-gate] | بوابة 415 الخاصة بـ HF1 غائبة، لذا البناء <= 15.5.4.108، CVE-2026-28318 غير مصحح. |
رأس الخادم Serv-U، الحالة = 415 | PATCHED [hf1-415-gate] | بوابة التحقق من الإدخال HF1 موجودة، لذا البناء >= 15.5.4.125. غير معرض. |
استجاب، ولكن لا يوجد رأس خادم Serv-U | 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 | خادم Serv-U بدون بوابة HF1 415، لذا البناء <= 15.5.4.108، CVE-2026-28318 غير مصحح. صحح فورًا. |
PATCHED | hf1-415-gate | خادم Serv-U يجيب على استعلام الهوية بـ 415، لذا إصلاح HF1 موجود (البناء >= 15.5.4.125). |
NOT-SERV-U | not-servu | استجاب، ولكن لا يوجد رأس خادم Serv-U؛ ليس Serv-U، أو وكيل أزال الرأس. |
ERROR | no-response | لا استجابة HTTP قابلة للاستخدام (لا توجد خدمة على هذا المنفذ، تمت تصفيتها، خطأ TLS، أو انتهاء المهلة). |
ERROR | bad-target | تعذر تحليل وسيطة الهدف. |