
Citrix NetScaler CVE-2026-8452 के लिए व्यवहार-आधारित पैच-स्थिति डिटेक्टर। यह निर्धारित करने के लिए तैयार किए गए SAML अनुरोध भेजता है कि PrefixList आकार जाँच मौजूद है या नहीं, बिना मेमोरी का शोषण या भ्रष्टीकरण किए।
CVE-2026-8452 के लिए एक सुरक्षित, गैर-विनाशकारी पैच-स्थिति जाँच, जो प्रमाणीकरण-पूर्व हीप ओवरफ्लो है
Citrix NetScaler ADC / NetScaler Gateway SAML सिग्नेचर कैननिकलाइज़र में
(CTX696604,
CVSS 8.8). एक अत्यधिक बड़ा एक्सक्लूसिव-कैननिकलाइज़ेशन PrefixList निश्चित-आकार के बफर को ओवरफ्लो कर देता है
कैननिकलाइज़ेशन के दौरान, जिसे NetScaler सिग्नेचर की पुष्टि करने से पहले करता है जो इसे ले जाता है — इसलिए
पूरा पथ बिना क्रेडेंशियल, बिना सत्र, और बिना मान्य हस्ताक्षर के पहुँच योग्य है। रिपोर्ट माइकल
टकर (JPMorgan Chase XOR टीम) द्वारा; मूल-कारण और शोषण विश्लेषण का श्रेय
watchTowr Labs को जाता है।
यह स्क्रिप्ट बग का नहीं शोषण करती और मेमोरी को दूषित नहीं करती। यह प्रति लक्ष्य एक प्रश्न का उत्तर देती है: क्या यह उपकरण पैच किया गया है? — व्यवहारिक रूप से निर्धारित, पैच का अवलोकन करके बिल्ड का अनुमान लगाने के बजाय।
हाँ। इसे प्रोडक्शन और मूल्यांकन उपयोग के लिए डिज़ाइन किया गया है:
PrefixList को । यह सीमा बाइट-दर-बाइट स्थित थी,
दोनों समर्थित शाखाओं पर समान है, और उपकरण के कॉन्फ़िगरेशन या
आस-पास के SAML संदेश के आकार के साथ नहीं बदलती — दोनों रूटों की जाँच से पुष्टि हुई, जो मान को
काफी भिन्न मात्रा में XML में लपेटते हैं, और यह पाते हैं कि वे समान
बाइट पर व्यवहार बदलते हैं। 575 सीमा को 63 बाइट्स से पार करता है, इसलिए निर्णय इस पर निर्भर नहीं करता कि कोई लक्ष्य किस तरह
कॉन्फ़िगर किया गया है।PrefixList विशेषता पर लागू होती है। अन्य फ़ील्डों को इससे अधिक बढ़ाना — एसर्शन कंज्यूमर सर्विस URL,
जारीकर्ता नाम, एल्गोरिदम पहचानकर्ता, डाइजेस्ट और सिग्नेचर मान — एक फिक्स बिल्ड पर कुछ भी नहीं बदलते, इसलिए
फिक्स लागू करने से कार्यशील SAML कॉन्फ़िगरेशन विफल नहीं होना चाहिए।यदि आप प्रोब को संशोधित करते हैं, तो
PROBE_PREFIXESन बदलें और लंबाई स्वीप न करें। 575 बाइट्स भार-वहन करने वाले हैं। अन्यPrefixListलंबाई उपकरण को अस्थिर कर सकती हैं, कम से कम एक मामले में ऐसे बिल्ड पर जो इस फिक्स को रखता है, इसलिए लंबाई स्वीप इस बग का पता लगाने का सुरक्षित तरीका नहीं है और छोटा होना सुरक्षित नहीं है।
पैच किए गए बिल्ड एक बड़े PrefixList को स्पष्ट रूप से, एक विशिष्ट संदेश के साथ अस्वीकार करते हैं। बिना पैच वाले बिल्ड
पार्सर से गुजरते हैं और एक सामान्य आंतरिक त्रुटि लौटाते हैं। एक समान अनुरोध, दो अलग-अलग
उत्तर:
575-बाइट PrefixList | प्रतिक्रिया |
|---|---|
| बिना पैच | 500 Internal Server Error 43549 |
| पैच किया हुआ | 200 Malformed Assertion sent to Netscaler |
दो रूट आज़माए जाते हैं, पहले IdP, जैसे ही एक उत्तर देता है, रोक दिया जाता है। कोई भी अकेले पर्याप्त है, और साथ में वे दोनों SAML भूमिकाओं को कवर करते हैं:
| रूट | अनुरोध | आवश्यकता |
|---|---|---|
| 1 (पहला) | POST /saml/login — हस्ताक्षरित AuthnRequest, PrefixList में ds:SignedInfo | लक्षित vserver से बंधी एक SAML IdP नीति |
| 2 (फॉलबैक) | POST /cgi/samlauth — SAMLResponse, एसर्शन सिग्नेचर में PrefixList | लक्षित vserver पर एक SAML SP एसर्शन कंज्यूमर सर्विस |
IdP रूट पहले आता है क्योंकि यह दोनों में से अधिक मजबूत है। यह Issuer मान,
AssertionConsumerServiceURL, और घड़ी विचलन के प्रति असंवेदनशील है — एक IssueInstant जो उपकरण की
विचलन सहनशीलता से काफी बाहर है, फिर भी सही ढंग से अंतर करता है, क्योंकि कैननिकलाइज़ेशन समय जाँच से पहले होता है
और सिग्नेचर जाँच से भी पहले।
रूट-1 का
AuthnRequestहस्ताक्षरित होना चाहिए। एक अहस्ताक्षरित अनुरोध पैच किए गए और बिना पैच वाले बिल्ड पर200 Malformed Assertion sent to Netscalerलौटाता है, जो पैच किए गए सिग्नल से बाइट-समान है, इसलिए एक प्रोब जो सिग्नेचर ब्लॉक को छोड़ देता है, हर उपकरण को पैच किए हुए के रूप में रिपोर्ट करता है। सिग्नेचर को मान्य होने की आवश्यकता नहीं है, और इस उपकरण का सिग्नेचर मान्य नहीं है; इसे केवल मौजूद होना है, क्योंकि इसकाSignedInfoहीPrefixListको कैननिकलाइज़र में ले जाता है।
दोनों समर्थित शाखाएँ अपने फिक्स बिल्ड पर, दोनों रूटों पर, ठीक उसी समय व्यवहार बदलती हैं:
| बिल्ड | निर्णय | |
|---|---|---|
13.1-63.16 | अंतिम संवेदनशील 13.1 | VULNERABLE |
13.1-63.18 | पहला फिक्स 13.1 | PATCHED |
14.1-66.59 | संवेदनशील 14.1 | VULNERABLE |
14.1-72.61 | पहला फिक्स 14.1 | PATCHED |
13.1-63.16 और 63.18 क्रमागत रिलीज़ हैं, इसलिए यह परिवर्तन पैच के कारण है, न कि
बीच के बिल्डों में हुए बदलाव के कारण।
वे बिल्ड हैं जहाँ यह फिक्स पहली बार प्रकट हुआ, और प्रोब ठीक उसी संक्रमण का पता लगाता है।
वे अब अपग्रेड करने के लिए बिल्ड नहीं हैं: बाद के बुलेटिनों ने उनकी जगह ले ली है, इसलिए 13.1-63.18 और
14.1-72.61 दोनों यहाँ PATCHED उत्तर देते हैं, जबकि नई समस्याओं के प्रति संवेदनशील रहते हैं। देखें
Remediation वर्तमान फिक्स बिल्ड के लिए।
क्योंकि यह इस बग पर सैद्धांतिक रूप से भी काम नहीं कर सकता। 13.1-63.16 और 13.1-63.18, वे बिल्ड
जो फिक्स के तुरंत दोनों ओर होते हैं, बाइट-समान tmindex.html, base.css और
resources.js प्रदान करते हैं — फिक्स किसी भी वेब एसेट को स्पर्श नहीं करता। स्थिर एसेट हैश भी शाखाओं में टकराते हैं, इसलिए एक
हैश-आधारित दृष्टिकोण एक संवेदनशील उपकरण को पैच किए गए बिल्ड के रूप में पहचान सकता है और उसे स्वच्छ रिपोर्ट कर सकता है,
जो एक पहचान उपकरण की सबसे खराब विफलता स्थिति है। इसलिए बिल्ड फिंगरप्रिंटिंग को जानबूझकर
नहीं लागू किया गया है। पैच स्थिति प्रोब से आती है, या show ns version से, जहाँ आपके पास
क्रेडेंशियल होते हैं।
./cve_2026_8452_check.py https://gateway.example.com
./cve_2026_8452_check.py https://gateway.example.com:9443
./cve_2026_8452_check.py -f targets.txt --brief
./cve_2026_8452_check.py -f targets.txt --json > results.json
टूल को **गेटवे या AAA वर्चुअल सर्वर** पर इंगित करें, प्रबंधन इंटरफ़ेस पर नहीं।
पूर्वशर्त प्रति वर्चुअल सर्वर है, इसलिए कई VIP वाले उपकरण का प्रत्येक VIP पर परीक्षण आवश्यक है।
### Options
| Flag | Description |
| --- | --- |
| `URL` | एक या अधिक `https://HOST[:PORT]` लक्ष्य |
| `-f, --targets-file FILE` | लक्ष्यों को फ़ाइल से पढ़ें (प्रति पंक्ति एक; `#` टिप्पणियाँ) |
| `-b, --brief` | प्रति लक्ष्य एक संरेखित पंक्ति — निर्णय, लक्ष्य, कारण टैग — कई होस्ट स्कैन करने के लिए |
| `--json` | संरचित JSON परिणाम आउटपुट करें |
| `--no-color` | रंगीन आउटपुट अक्षम करें (`NO_COLOR` और गैर-TTY का भी सम्मान करता है) |
| `--timeout SECS` | प्रति-अनुरोध टाइमआउट (डिफ़ॉल्ट: 15) |
### Examples
**एक बिना पैच वाला उपकरण,** IdP रूट पर उत्तर दिया और नियंत्रण के विरुद्ध पुष्टि की गई:```console
$ ./cve_2026_8452_check.py https://gateway.example.com:9443
====================================================================
CVE-2026-8452 - NetScaler SAML PrefixList patch-state check
https://gateway.example.com:9443
====================================================================
>> Identifying the appliance
[ OK ] NetScaler indicators: 5 (CSP contains citrixng://)
>> Probing patch state (64 prefixes / 575 bytes, confirmed against a 35-byte control)
idp /saml/login HTTP 500 / 43549: no size check present
idp /saml/login 35-byte control: HTTP 200 "message timestamp outside the appliance's skew tolerance": a different SAML condition, not the size check
[FAIL] Size check absent (via the IDP route)
====================================================================
RESULT: VULNERABLE
====================================================================
https://gateway.example.com:9443 via IDP [size-check-absent]
The size check is absent. This appliance is unpatched for
CVE-2026-8452. Upgrade to 13.1-63.21+ / 14.1-73.32+ (12.1 and
13.0 are EOL and never fixed).
====================================================================
नियंत्रण रेखा को ध्यान से पढ़ना उचित है: 35-बाइट अनुरोध आकार जाँच को पार कर जाता है
और फिर अपने पुराने IssueInstant के कारण अस्वीकार कर दिया जाता है, जबकि 575-बाइट प्रोब कभी
उस चरण तक नहीं पहुँचा। यही वह क्रम है जिस पर पूरी विधि निर्भर करती है — कैननिकलाइज़ेशन
समय जाँच से पहले चलता है, ठीक वैसे ही जैसे यह हस्ताक्षर जाँच से पहले चलता है।
एक पैच किया गया एप्लायंस, फिक्स बिल्ड के विरुद्ध वही अनुरोध। केवल प्रोब लाइन अलग है —
विशाल PrefixList को नाम से अस्वीकार कर दिया जाता है, बजाय इसके कि यह आंतरिक त्रुटि तक पहुँचे:```console
Probing patch state (64 prefixes / 575 bytes, confirmed against a 35-byte control) idp /saml/login HTTP 200 "Malformed Assertion": size check rejected the probe idp /saml/login 35-byte control: HTTP 200 "message timestamp outside the appliance's skew tolerance": a different SAML condition, not the size check [ OK ] Size check present (via the IDP route)
RESULT: PATCHED
https://vpn.example.com via IDP [size-check-present]
**SP रूट पर फ़ॉलबैक।** यहाँ IdP एंडपॉइंट पहुंच योग्य है, लेकिन इस वर्चुअल सर्वर से कोई IdP नीति बंधी नहीं है
इसलिए रूट 1 परहेज़ करता है और रूट 2 जवाब देता है। जब *कोई भी* रूट किसी नीति से मेल नहीं खाता
तो निर्णय `INCONCLUSIVE` होता है जिसे `no-policy-match` टैग किया जाता है — कभी `PATCHED` नहीं, जो कि पूरा कारण है
कि वह निर्णय मौजूद है:```console
>> Probing patch state (64 prefixes / 575 bytes, confirmed against a 35-byte control)
idp /saml/login HTTP 200 "Matching policy not found": parser not reached
sp /cgi/samlauth HTTP 500 / 43549: no size check present
sp /cgi/samlauth 35-byte control: HTTP 200 "assertion rejected before the size check": a different SAML condition, not the size check
[FAIL] Size check absent (via the SP route)
RESULT: VULNERABLE
नियंत्रण ने इसे पकड़ लिया। यहाँ एंडपॉइंट ने दोनों लंबाईयों पर पैच किए गए संदेश के साथ उत्तर दिया, इसलिए आकार जाँच कभी निष्पादित नहीं हुई और निर्णायक प्रतीत होने वाला उत्तर वापस ले लिया गया। यह फॉल्स-पॉज़िटिव गार्ड का सक्रिय होना है, और इसके सक्रिय होने का कारण बताया गया है, न कि अनुमान लगाने के लिए छोड़ा गया है:```console
Probing patch state (64 prefixes / 575 bytes, confirmed against a 35-byte control) idp /saml/login HTTP 200 "Malformed Assertion": size check rejected the probe idp /saml/login 35-byte control: HTTP 200 "Malformed Assertion": size check rejected the probe [WARN] Probe and control answered alike, so the size check was never exercised
RESULT: INCONCLUSIVE
https://sp-strict.example.com via IDP [flat-response]
The 575-byte probe and the 35-byte control got the same answer, so this endpoint replies the same way whatever it is sent and the size check was never exercised. Unknown, not patched.
**बेड़े की स्कैनिंग** (`--brief`), प्रति लक्ष्य एक संरेखित पंक्ति जिसके अंत में रीज़न टैग होता है। निकास स्थिति
`1` है यदि कोई भी लक्ष्य `VULNERABLE` है:```console
$ ./cve_2026_8452_check.py -f targets.txt --brief; echo "exit: $?"
VULNERABLE https://gateway.example.com:9443 size-check-absent
VULNERABLE https://gateway.example.com:9444 size-check-absent
PATCHED https://vpn.example.com size-check-present
INCONCLUSIVE https://sp-strict.example.com flat-response
INCONCLUSIVE https://gw-nopolicy.example.com no-policy-match
UNAFFECTED https://mgmt.example.com no-saml-endpoint
ERROR https://offline.example.com not-identified
exit: 1
मशीन-पठनीय आउटपुट (--json), जो हर आज़माए गए रूट को रिकॉर्ड करता है। verdict, reason और
detail प्रामाणिक फ़ील्ड हैं; attempts कच्चा साक्ष्य है, इसलिए कोई व्यक्तिगत प्रयास ऐसे टारगेट पर
patched पढ़ा जा सकता है जिसका निर्णय INCONCLUSIVE हो:```console
$ ./cve_2026_8452_check.py https://vpn.example.com --json
[
{
"target": "https://vpn.example.com",
"verdict": "PATCHED",
"reason": "size-check-present",
"route": "idp",
"detail": "HTTP 200 "Malformed Assertion": size check rejected the probe",
"attempts": [
{
"route": "idp",
"path": "/saml/login",
"state": "patched",
"detail": "HTTP 200 "Malformed Assertion": size check rejected the probe"
},
{
"route": "idp",
"path": "/saml/login",
"state": "control:known-error",
"detail": "35-byte control: HTTP 200 "message timestamp outside the appliance's skew tolerance": a different SAML condition, not the size check"
}
],
"netscaler_indicators": [
"CSP contains citrixng://",
"CSP contains com.citrix.nsgclient://",
"CSP contains nsgcepa://",
"CSP report-uri /nscsp_violation/report_uri",
"/vpn/js/rdx/ present (HTTP 404)"
]
}
]
## Verdicts
Every verdict carries a short `reason` tag naming the condition behind it. `--brief` prints the tag as
its third column, and `--json` carries it as `reason`.
| Verdict | Reason tag | Meaning |
| --- | --- | --- |
| `VULNERABLE` | `size-check-absent` | The size check is absent. This appliance is unpatched — patch it. |
| `PATCHED` | `size-check-present` | The size check fired on the code path the probe reached. **Scoped to this CVE:** it does not mean the appliance is on a current build. |
| `UNAFFECTED` | `no-saml-endpoint` | No SAML endpoint answered on this virtual server, so the vulnerable path is not reachable here. **Per-vserver, not per-appliance:** SAML may be configured on another vserver or VIP on the same box. |
| `INCONCLUSIVE` | `flat-response` | The endpoint answered the 575-byte probe and the 35-byte control identically, so the size check was never exercised. The decisive-looking answer is withdrawn — this is the false-positive guard firing. |
| `INCONCLUSIVE` | `no-policy-match` | A SAML endpoint answered but no bound policy matched the probe, so neither route reached the canonicalizer. |
| `INCONCLUSIVE` | `other-saml-error` | A recognized but non-diagnostic SAML condition rejected the probe before the size check — a different length limit, a signature policy, a timestamp. |
| `INCONCLUSIVE` | `unrecognized-reply` | A SAML surface answered with something outside the recognized set. |
| `ERROR` | `not-identified` | Not identified as a NetScaler, or unreachable. |
सभी चार `INCONCLUSIVE` कारणों का निर्णय लेने के लिए एक ही अर्थ है — **अज्ञात, पैच नहीं किया गया।**
`show ns version` से पुष्टि करें। टैग ऑपरेटर को बताने के लिए है कि दोबारा चलाने से पहले *कौन-सी* स्थिति ठीक करनी है:
प्रोब को किसी भिन्न वर्चुअल सर्वर पर इंगित करें, या कोई मेल खाती पॉलिसी बाइंड करें।
`INCONCLUSIVE` एक अलग निर्णय के रूप में मौजूद है, इसके अपने निकास कोड के साथ, क्योंकि एक कमज़ोर उपकरण
प्रोब का उत्तर देने से मना कर सकता है। यदि किसी वर्चुअल सर्वर से बाउंड SAML पॉलिसी प्रोब के अनुरोध से मेल
नहीं खाती है, तो उपकरण canonicalizer से पहले ही शॉर्ट-सर्किट हो जाता है और कुछ भी निदानात्मक नहीं लौटाता। एक
स्कैनर जो केवल मेल नहीं खाता, ऐसे होस्ट पर चुप हो जाता है, और चुप्पी "पैच किया हुआ" जैसी पढ़ी जाती है। यह
उपकरण इसके बजाय इसे अज्ञात के रूप में रिपोर्ट करता है।
### हर निर्णय एक नियंत्रण के विरुद्ध पुष्ट किया जाता है
`PATCHED` और `VULNERABLE` दोनों एक *एकल* विभेदक प्रतिक्रिया पर आधारित हैं, इसलिए उपकरण सत्यापित करता है कि
प्रतिक्रिया वास्तव में भेजी गई चीज़ पर निर्भर करती है। निर्णायक उत्तर के बाद यह अनुरोध को छोटे
35-बाइट `PrefixList` के साथ दोहराता है — किसी भी साइज़ जाँच से नीचे — और निर्णय तभी टिकता है यदि दोनों उत्तर भिन्न हों।
यदि वे मेल खाते हैं, तो एंडपॉइंट जो कुछ भी प्राप्त करता है उसका एक ही तरह से उत्तर देता है, साइज़ जाँच कभी लागू नहीं हुई,
और परिणाम `INCONCLUSIVE` होता है।
यह काल्पनिक नहीं है। `samlRejectUnsignedAssertion STRICT` के साथ कॉन्फ़िगर किया गया एक सेवा प्रदाता
canonicalization से *पहले* लापता हस्ताक्षर के लिए प्रोब को अस्वीकार करता है, और हर लंबाई पर पैच किया गया संदेश उत्तर देता है।
नियंत्रण के बिना, ऐसा उपकरण exit 0 के साथ `PATCHED` रिपोर्ट करता है — एक वास्तविक रूप से कमज़ोर बिल्ड पर देखा गया।
अब यह `flat-response` कारण टैग के साथ `INCONCLUSIVE` रिपोर्ट करता है, और रन स्पष्ट शब्दों में बताता है
कि साइज़ जाँच कभी लागू नहीं हुई। वही नियंत्रण दर्पण-छवि स्थिति को भी पकड़ता है, जहाँ एक एंडपॉइंट उन अनुरोधों के लिए
सामान्य आंतरिक त्रुटि लौटाता है जिन्हें उसने कभी पार्स नहीं किया।
### पहचाने गए गैर-निदानात्मक उत्तर
एक NetScaler SAML एंडपॉइंट के पास संभावित उत्तरों का एक बड़ा समूह होता है, और उनमें से केवल दो पैच स्थिति स्थापित करते हैं।
उपकरण अन्य 20 को पहचानता है और प्रतिक्रिया बॉडी को प्रतिध्वनित करने के बजाय प्रति-रूट पंक्ति पर स्थिति का नाम बताता है,
उदाहरण के लिए:```text
idp /saml/login HTTP 200 "post body over the appliance's maximum": a different length limit rejected the probe first
sp /cgi/samlauth HTTP 200 "assertion rejected before the size check": a different SAML condition, not the size check
उनमें से तीन लंबाई सीमाएँ हैं — एक अत्यधिक बड़ा पोस्ट बॉडी, एक अत्यधिक बड़ा RelayState, एक अत्यधिक
लंबा निकाला गया उपयोगकर्ता नाम। ये सबसे महत्वपूर्ण हैं, क्योंकि इनका मतलब है कि अनुरोध को पैच स्थिति को
अलग करने वाली जाँच तक पहुँचने से पहले एक अलग लंबाई जाँच द्वारा अस्वीकार कर दिया गया था। इसका आम तौर पर
मतलब है कि प्रोब को किसी भिन्न वर्चुअल सर्वर पर लक्षित करने की आवश्यकता है, न कि यह कि उपकरण ठीक है।
उन 20 में से एक हर IdP-मार्ग रन पर दिखाई देता है: नियंत्रण का message timestamp outside the appliance's skew tolerance। प्रोब एक निश्चित IssueInstant ले जाता है, इसलिए एक नियंत्रण जो आकार जाँच
पास कर लेता है उसे फिर उसकी आयु के कारण अस्वीकार कर दिया जाता है — यह प्रोब का गुण है, उपकरण का नहीं। 20
के सेट से बाहर का उत्तर नामित स्थिति के बजाय अपनी स्वयं की पहली पंक्ति के रूप में मुद्रित होता है।
ये सभी फिर भी INCONCLUSIVE उत्पन्न करते हैं, जिन्हें other-saml-error टैग किया गया है। किसी
प्रतिक्रिया को पहचानना उसे कभी भी PATCHED में अपग्रेड नहीं करता: केवल एक स्पष्ट पैच्ड-बिल्ड उत्तर ही
ऐसा करता है, और हर अपरिचित उत्तर भी INCONCLUSIVE में ही फॉल-थ्रू होता है — unrecognized-reply के
रूप में। पहचान इसलिए मौजूद है ताकि ऑपरेटर को बताया जा सके कि कोई लक्ष्य क्यों वर्गीकृत नहीं किया जा
सका, न कि उसे वर्गीकृत करने के लिए।
| कोड | अर्थ |
|---|---|
0 | पैच किया गया, या लक्षित वर्चुअल सर्वर पर अप्रभावित |
1 | कम से कम एक लक्ष्य VULNERABLE है |
2 | उपयोग त्रुटि (गलत तर्क / अपठनीय लक्ष्य फ़ाइल) |
3 | कम से कम एक लक्ष्य INCONCLUSIVE है, कोई भी असुरक्षित नहीं |
4 | कम से कम एक लक्ष्य में त्रुटि हुई, कोई भी असुरक्षित या अनिर्णीत नहीं |
2 एक गलत इनवोकेशन के लिए argparse का अपना एक्ज़िट कोड है, इसलिए निर्णय कोड इसे छोड़ देते हैं। एक रैपर
स्क्रिप्ट इसलिए "इस उपकरण को वर्गीकृत नहीं किया जा सका" (3) को "मैंने टूल को गलत तरीके से कॉल किया"
(2) से अलग बता सकती है, जो एक ऐसी स्कीम नहीं कर सकती जो 2 को ओवरलोड करती है।
मल्टी-टारगेट स्वीप में कोड प्राथमिकता द्वारा चुना जाता है, सबसे खराब स्थिति से नहीं: VULNERABLE >
INCONCLUSIVE > ERROR > क्लीन। इसलिए एक अगम्य होस्ट कभी भी एक्ज़िट कोड में किसी असुरक्षित निष्कर्ष को
छिपा नहीं सकता।
PATCHED और एक्ज़िट कोड 0 का मतलब है कि
CVE-2026-8452 आकार जाँच उस पथ पर मौजूद है जिस तक प्रोब पहुँचा। वे किसी अन्य NetScaler भेद्यता के बारे में
कुछ नहीं कहते, जिनमें इस बग के बाद खुलासा हुई और बाद के बिल्ड में ठीक की गई भेद्यताएँ शामिल हैं। इस टूल से
मिले एक्ज़िट 0 को उपकरण के लिए पूर्ण स्वास्थ्य प्रमाणपत्र के रूप में न पढ़ें।UNAFFECTED का अर्थ है "यहाँ पहुँच योग्य नहीं", न कि "यह उपकरण सुरक्षित है"।/saml/login उपकरण-व्यापी है, लेकिन बिना किसी
बाध्य IdP पॉलिसी वाले वर्चुअल सर्वर पर यह Matching policy not found उत्तर देता है और कैनोनिकलाइज़र से
पहले शॉर्ट-सर्किट करता है। एक IdP जिसकी पॉलिसी एक ऐसे एक्सप्रेशन नियम का उपयोग करती है जिसे प्रोब का
अनुरोध संतुष्ट नहीं करता, उत्तर देने के बजाय INCONCLUSIVE में जाएगा।INCONCLUSIVE पूर्ण स्वास्थ्य प्रमाणपत्र नहीं है। इसे जानबूझकर एक अलग एक्ज़िट कोड के साथ PATCHED से
अलग किया गया है ताकि मौन कभी भी पासिंग परिणाम के लिए गलत न समझा जाए।INCONCLUSIVE रिपोर्ट करती हैं। जहाँ SAML पॉलिसी
सीधे वर्चुअल सर्वर से बाध्य होने के बजाय nextFactor द्वारा पहुँचे गए पॉलिसी लेबल में होती है, वहाँ एक
अनचाहा assertion कोई मिलती हुई पॉलिसी नहीं पाता और कैनोनिकलाइज़र से पहले शॉर्ट-सर्किट करता है। एक असुरक्षित
बिल्ड पर सत्यापित, जिसने INCONCLUSIVE रिपोर्ट किया। चूँकि डिवाइस-पोस्चर या लॉगिन-स्कीमा पहले फैक्टर के
पीछे SAML एक सामान्य पैटर्न है, nFactor गेटवे पर INCONCLUSIVE को "संभवतः पहुँच योग्य, show ns version
से पुष्टि करें" के रूप में मानें, न कि एक जिज्ञासा के रूप में।VULNERABLE निर्णय लापता आकार जाँच की पुष्टि करता है, जो पैच स्थिति है। यह
नहीं मापता कि कोई हमलावर आपके बिल्ड पर भ्रष्टाचार को कितनी दूर ले जा सकता है।13.1-63.21 या उसके बाद के संस्करण, या 14.1-73.32 या उसके बाद के संस्करण में अपग्रेड करें (FIPS और NDcPP: 14.1-73.32 FIPS, या 13.1-FIPS और 13.1-NDcPP के लिए 13.1-37.277)।
CTX696604
के अनुसार CVE-2026-8452 का फिक्स स्वयं पहली बार 13.1-63.18 / 14.1-72.61 में शामिल किया गया था, और यही
वह परिवर्तन है जिसे यह टूल पहचानता है। उन बिल्ड को तब से
CTX696939
(2026-08-19) द्वारा प्रतिस्थापित कर दिया गया है, जो CVE-2026-19489 और CVE-2026-19490 जोड़ता है,
बाद वाला एक CVSS 9.3 प्री-ऑथेंटिकेशन प्रमाणीकरण बाईपास है। 14.1-43.56 / 13.1-61.28 से आगे के बिल्ड पर
इसकी पूर्वशर्त एक कॉन्फ़िगर की गई SAML क्रिया है — इसलिए जो उपकरण इस टूल द्वारा जाँचे गए बग के दायरे में है,
उसके उस भेद्यता के दायरे में होने की भी संभावना है, और यहाँ PATCHED निर्णय अपग्रेड को स्थगित करने का कारण
नहीं है। दोनों बुलेटिन उपरोक्त बिल्ड द्वारा क्लियर हो जाते हैं।
12.1 या 13.0 पर उपकरणों का कोई फिक्स नहीं है और उन्हें कोई नहीं मिलेगा — वे ब्रांच अपने जीवन के अंत (end of life) पर हैं और उन्हें स्थायी रूप से असुरक्षित माना जाना चाहिए और एक समर्थित ब्रांच में स्थानांतरित किया जाना चाहिए।
दो अतिरिक्त नोट:
add authentication samlAction और add authentication samlIdPProfile के साथ-साथ
add authentication vserver और add vpn vserver की जाँच करें।यह परीक्षण किया गया है, अनुमानित नहीं। एक पुष्टि-असुरक्षित उपकरण पर हमने हर SAML ऑब्जेक्ट हटा दिया, उसके
स्थान पर एक गैर-SAML प्रमाणीकरण फैक्टर बाध्य किया, और AAA वर्चुअल सर्वर को चालू और सेवारत छोड़ दिया: SAML
एंडपॉइंट्स ने तब हर अनुरोध पर 404 लौटाया। वे SAML कॉन्फ़िगरेशन के बिना केवल पॉलिसी-गेटेड नहीं हैं — वे
अस्तित्व में ही नहीं हैं। इसलिए जिस वर्चुअल सर्वर पर कोई SAML नहीं है वह वास्तव में इस बग के दायरे से बाहर
है, और ऐसे लक्ष्य पर UNAFFECTED एक वास्तविक उत्तर है, न कि एक ब्लाइंड स्पॉट। जो चेतावनी अभी भी लागू होती
है वह उपरोक्त स्कोपिंग वाली है: यह प्रति वर्चुअल सर्वर है, इसलिए उपकरण के बारे में कुछ भी निष्कर्ष निकालने
के बजाय प्रत्येक VIP की पुष्टि करें।
CVE-2026-8452 उसी बुलेटिन में पाँच सहोदरों के साथ जारी किया गया था। इसके साथ ट्रैक करने योग्य एक CVE-2026-8451 है, जो SAML IdP पथ में एक प्री-ऑथेंटिकेशन मेमोरी ओवररीड है जिसका वास्तविक दुनिया में सक्रिय शोषण देखा गया है। दोनों एक ही हमले की सतह साझा करते हैं, इसलिए एक ही कॉन्फ़िगरेशन ऑडिट दोनों को कवर करता है।
यह कोड MIT लाइसेंस के अंतर्गत वितरित किया जाता है।
पूर्व पारस्परिक सहमति के बिना लक्ष्यों पर हमला करने के लिए इस टूल का उपयोग अवैध है। सभी लागू स्थानीय, राज्य और संघीय कानूनों का पालन करना अंतिम उपयोगकर्ता की जिम्मेदारी है। डेवलपर्स कोई दायित्व नहीं मानते हैं और इस प्रोग्राम के कारण होने वाले किसी भी दुरुपयोग या क्षति के लिए जिम्मेदार नहीं हैं।