
نص برمجي للكشف عن CVE-2026-11374
نص كشف للشرط الأساسي لاستغلال CVE-2026-11374، وهو ثغرة في تذكرة الدخول الموحد (SSO) القابلة للتوقع تؤدي إلى الاستيلاء على الحسابات دون مصادقة عبر مجموعة ManageEngine AD360. المنتجات الأربعة ضمن النطاق تشترك في إطار ManageEngineADSFramework:
| المنتج | الإصدار المتأثر | الإصدار المعالج |
|---|---|---|
| ADSelfService Plus | ≤ 6528 | 6529 |
| RecoveryManager Plus | ≤ 6320 | 6321 |
| M365 Manager Plus | ≤ 4816 | 4817 |
| ADAudit Plus | ≤ 8702 | 8703 |
في الإصدارات المتأثرة، تكون تذكرة الدخول الموحد مجرد System.currentTimeMillis() (طابع زمني قابل للتوقع) يتم أخذها عند تسجيل دخول الضحية، لذا يمكن إعادة تشغيلها عبر ملف تعريف الارتباط CUSTOM_SSO_TICKET لاختطاف تلك الجلسة. يستبدل الإصلاح التذكرة بـ UUID.randomUUID() (معرف عشوائي كافٍ). مسار إعادة التشغيل يمكن الوصول إليه فقط عندما يكون المنتج مدمجًا مع AD360: ADSFilter يتحكم فيه عبر isProductIntegrated(). تلك البوابة هي الشرط الأساسي الذي يتحقق منه هذه الأداة.
ملاحظة: هذا الكاشف يؤكد الشرط الأساسي، وليس الثغرة نفسها. نتيجة
POTENTIALLY_AFFECTEDليست حكمًا مؤكدًا بالضعف — انظر أدناه لمزيد من المعلومات.
نعم. هي مصممة للاستخدام في الإنتاج والتقييم.
1700000000000، قيمة ميلي ثانية قديمة بما يكفي بحيث لا يمكن أبدًا أن تكون موجودة في الذاكرة المؤقتة)، لذا لا يتم استرداد أي جلسة على الإطلاق. يخبرنا الخادم فقط بمسح ملفات تعريف الارتباط التي أرسلناها.GET عادي، وملفات تعريف الارتباط الوحيدة المتأثرة هي تلك المؤقتة التي ترسلها الأداة.إصلاح CVE-2026-11374 غيّر فقط كيفية إنشاء التذكرة (من ميلي ثانية إلى UUID)؛ لم يغير مسار إعادة تشغيل ملف تعريف الارتباط الذي يمارسه هذا المسبار. نتيجة لذلك، يستجيب التثبيت المُعالَج بايت ببايت بشكل مطابق للتثبيت الضعيف لأي طلب غير مصادق.
ما يمكن للأداة فعله، بدون مصادقة وبدون تدمير:
ما لا يمكنه فعله:
POTENTIALLY_AFFECTED تعني أن الشرط الأساسي قد تحقق ويجب عليك التحقق من مستوى الإصلاح، وليس أن المضيف مؤكد الضعف.conf/product.conf محليًا، أو حل تذكرة حية بنشاط (استغلال حقيقي، لم يتم تنفيذه عمدًا هنا).?build= في ADSSP هو أحيانًا الإصدار الحقيقي وأحيانًا عنصر نائب مجمد يقرأ أقل من الإصدار المعالج، لذلك القيمة الأقل من المعالج غامضة وتضعها الأداة كغير حاسمة. القيمة عند أو فوق الإصدار المعالج لا تزال إشارة موثوقة للمعالجة، لأن العنصر النائب دائمًا منخفض جدًا للوصول إليه.requests. قم بالتثبيت باستخدام pip install requests.# single host (prefer a URL or host:port; ports differ per product)
./cve_2026_11374_check.py https://adssp.example.com:8888
# multiple hosts (scheme optional: https is tried first, then http)
./cve_2026_11374_check.py host-a:8081 host-b:8365
# scan a list, one target per line ('#' comments allowed), compact output
./cve_2026_11374_check.py -f targets.txt --brief
# machine-readable output for pipelines
./cve_2026_11374_check.py -f targets.txt --json > results.json
المنافذ الافتراضية تختلف حسب المنتج (ADSelfService Plus 8888, ADAudit Plus 8081, M365 Manager Plus 8365, RecoveryManager Plus 8090)، لذا مرر عنوان URL أو host:port. المضيف العاري يستخدم 8888 افتراضيًا.
| العلم | الوصف |
|---|---|
targets | مضيف أو أكثر بصيغة host أو host:port أو https://host:port |
-f, --targets-file FILE | قراءة الأهداف من ملف (هدف واحد لكل سطر؛ يُسمح بالتعليقات #) |
--brief | سطر واحد محاذي لكل هدف، مفيد لمسح العديد من المضيفين |
--json | إخراج نتائج JSON منظمة |
--timeout SECS | مهلة لكل طلب (الافتراضي: 15) |
--no-build | تخطي طلب رقم الإصدار الإضافي عند الإيجابية |
--no-color | تعطيل الإخراج الملون (يحترم أيضًا NO_COLOR وغير TTY) |
وحدة تحكم مدمجة مع AD360 (مفصل، الافتراضي). يوضح السطر الثاني أن هذا هو الشرط الأساسي وليس حكم ضعف؛ الثالث هو دليل الإصدار الأفضل جهدًا:
$ ./cve_2026_11374_check.py https://adssp.example.com:8888
[!] https://adssp.example.com:8888: POTENTIALLY_AFFECTED
ADSelfService Plus: AD360-integrated, CustomSSO replay path active - precondition met. Not confirmed vulnerable; verify patch level (fixed build 6529).
build: 6519 (below fixed 6529 - inconclusive: ?build= may be a stale placeholder or a hotfix)
تثبيت مستقل لنفس المنتج، حيث مسار إعادة التشغيل غير نشط:
$ ./cve_2026_11374_check.py https://adssp.example.com:8888
[+] https://adssp.example.com:8888: UNAFFECTED
ADSelfService Plus: standalone / not AD360-integrated (no cleanup), so the replay path isn't reachable here. Verify build >= 6529 regardless.
مسح قائمة مع سطر واحد محاذي لكل مضيف (--brief). رمز الخروج هو 1 إذا كان أي مضيف POTENTIALLY_AFFECTED، وإلا 0، وهو مفيد في البرامج النصية. الملاحظة الطرفية تظهر المنتج المحدد، بالإضافة إلى رقم الإصدار عند العثور:
$ ./cve_2026_11374_check.py -f targets.txt --brief; echo "exit: $?"
POTENTIALLY_AFFECTED https://host-a:8888 ADSelfService Plus 6519
POTENTIALLY_AFFECTED http://host-b:8081 ADAudit Plus 8530
UNAFFECTED http://host-c:8365 M365 Manager Plus
UNAFFECTED https://host-d:443
INCONCLUSIVE http://host-e:8888 ADSelfService Plus
ERROR host-f:8888 timeout
exit: 1
إخراج قابل للقراءة آليًا (--json). كل نتيجة تحمل verdict و state و detail خلفها، و product المحدد، وعند العثور على شيء - كائن build: build هو الرقم الموجود، fixed_build هو الحد الأدنى لهذا المنتج، patch_hint هو التوجيه (likely_patched عند أو فوق الإصدار المعالج، وإلا inconclusive)، و note شرح قصير:
$ ./cve_2026_11374_check.py https://host-b:8081 --json
[
{
"target": "https://host-b:8081",
"state": "potentially_affected",
"detail": "ADAudit Plus: AD360-integrated, CustomSSO replay path active - precondition met ...",
"product": "ADAudit Plus",
"build": { "build": "8530", "fixed_build": "8703", "patch_hint": "inconclusive", "note": "below fixed 8703 - inconclusive: may be a hotfix" },
"verdict": "POTENTIALLY_AFFECTED"
}
]
| الحكم | المعنى |
|---|---|
POTENTIALLY_AFFECTED | منتج ضمن النطاق مدمج مع AD360؛ مسار إعادة تشغيل ملف تعريف الارتباط CustomSSO نشط، لذا تحقق الشرط الأساسي لاستغلال CVE-2026-11374. هذا ليس حكمًا مؤكدًا بالضعف؛ تحقق من مستوى الإصلاح (انظر الخطوات التالية). |
UNAFFECTED | مسار إعادة التشغيل غير قابل للوصول. إما: منتج مستقل ضمن النطاق (غير مدمج مع AD360 — على الرغم من أنه سيصبح قابلاً للوصول إذا تم دمجه لاحقًا، لذا تحقق من الإصدار على أي حال)؛ منتج من إطار ManageEngine ADS ليس أحد المنتجات الأربعة ضمن النطاق؛ أو لا يوجد منتج ضمن النطاق في الاستجابة على الإطلاق (ليس أحد منتجات CVE-2026-11374 الأربعة، أو وكيل يزيل ملف تعريف ارتباط الجلسة). |
INCONCLUSIVE | HTTP 400 — على الأرجح قفل تحديد معدل IAM يخفي الإشارة؛ أعد المحاولة بعد ~60 ثانية. |
ERROR | فشل الاتصال/المهلة/TLS. |