
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 |
प्रभावित बिल्ड में SSO टिकट केवल System.currentTimeMillis() (एक अनुमानित टाइमस्टैम्प) होता है जिसे पीड़ित के लॉगिन के समय नमूना लिया जाता है, इसलिए इसे CUSTOM_SSO_TICKET कुकी के माध्यम से रीप्ले करके उस सत्र का अपहरण किया जा सकता है। फिक्स टिकट को UUID.randomUUID() (एक पर्याप्त रूप से यादृच्छिक पहचानकर्ता) से बदल देता है। रीप्ले पथ केवल तभी पहुंच योग्य है जब उत्पाद AD360-एकीकृत हो: ADSFilter इसे isProductIntegrated() पर गेट करता है। यह गेट ही वह पूर्व-शर्त है जिसकी यह उपकरण जाँच करता है।
नोट: यह डिटेक्टर पूर्व-शर्त की पुष्टि करता है, स्वयं भेद्यता की नहीं।
POTENTIALLY_AFFECTEDपरिणाम पुष्टिकृत-संवेदनशील निर्णय नहीं है — अधिक जानकारी के लिए नीचे देखें।
हाँ। यह प्रोडक्शन और आकलन उपयोग के लिए बनाया गया है।
1700000000000, एक मिलीसेकंड मान जो अतीत में इतना दूर है कि वह कभी कैश-निवासी नहीं हो सकता) भेजता है, इसलिए कोई सत्र कभी पुनर्प्राप्त नहीं होता। सर्वर केवल हमें बताता है कि हमने जो कुकीज़ भेजी थीं उन्हें साफ़ कर दे।GET है, और प्रभावित होने वाली एकमात्र कुकीज़ वे डिस्पोज़ेबल कुकीज़ हैं जिन्हें उपकरण भेजता है।CVE-2026-11374 के पैच ने केवल टिकट उत्पन्न करने के तरीके को बदला (मिलीसेकंड से UUID); इसने उस कुकी-रीप्ले पथ को नहीं बदला जिसे यह प्रोब उपयोग करता है। परिणामस्वरूप, एक पैच किया गया इंस्टॉल किसी भी अप्रमाणित अनुरोध के लिए एक संवेदनशील इंस्टॉल के समान बाइट-दर-बाइट प्रतिक्रिया करता है।
उपकरण अप्रमाणित और गैर-विनाशकारी रूप से यह कर सकता है:
यह क्या नहीं कर सकता:
POTENTIALLY_AFFECTED परिणाम का अर्थ है कि पूर्व-शर्त पूरी होती है और आपको पैच स्तर सत्यापित करना चाहिए, यह नहीं कि होस्ट पुष्टिकृत रूप से संवेदनशील है।conf/product.conf पढ़ना, या सक्रिय रूप से एक लाइव टिकट का समाधान करना (वास्तविक शोषण, जानबूझकर यहाँ लागू नहीं किया गया)।?build= कभी-कभी वास्तविक बिल्ड होता है और कभी-कभी एक स्थिर प्लेसहोल्डर होता है जो फिक्स्ड बिल्ड से नीचे पढ़ता है, इसलिए फिक्स्ड बिल्ड से नीचे का मान अस्पष्ट है और उपकरण उसे अनिर्णायक चिह्नित करता है। फिक्स्ड बिल्ड के बराबर या उससे ऊपर का मान अभी भी एक विश्वसनीय पैच किया हुआ संकेत है, क्योंकि प्लेसहोल्डर हमेशा उस तक पहुँचने के लिए बहुत कम होता है।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)। यदि कोई होस्ट POTENTIALLY_AFFECTED है तो निकास स्थिति 1 है, अन्यथा 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"
}
]