Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-8452-check — Citrix NetScaler CVE-2026-8452 के लिए व्यवहार-आधारित पैच-स्थिति डिटेक्टर। यह निर्धारित करने के लिए तैयार किए गए SAML अनुरोध भेजता है कि PrefixList आकार जाँच मौजूद है या नहीं, बिना मेमोरी का शोषण या भ्रष्टीकरण किए। | Kitploit
उपकरण/GitHubGitHub/bishopfox/cve-2026-8452-check
भेद्यता स्कैनरभेद्यता विश्लेषणवेब सुरक्षानेटवर्क सुरक्षा
GitHubbishopfox/cve-2026-8452-check

CVE-2026-8452-check

Citrix NetScaler CVE-2026-8452 के लिए व्यवहार-आधारित पैच-स्थिति डिटेक्टर। यह निर्धारित करने के लिए तैयार किए गए SAML अनुरोध भेजता है कि PrefixList आकार जाँच मौजूद है या नहीं, बिना मेमोरी का शोषण या भ्रष्टीकरण किए।

रिपॉजिटरी देखें
14 दिन पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

Citrix NetScaler SAML PrefixList हीप ओवरफ्लो — पैच-स्थिति पहचान स्क्रिप्ट

CVE-2026-8452 के लिए एक सुरक्षित, गैर-विनाशकारी पैच-स्थिति जाँच, जो प्रमाणीकरण-पूर्व हीप ओवरफ्लो है Citrix NetScaler ADC / NetScaler Gateway SAML सिग्नेचर कैननिकलाइज़र में (CTX696604, CVSS 8.8). एक अत्यधिक बड़ा एक्सक्लूसिव-कैननिकलाइज़ेशन PrefixList निश्चित-आकार के बफर को ओवरफ्लो कर देता है कैननिकलाइज़ेशन के दौरान, जिसे NetScaler सिग्नेचर की पुष्टि करने से पहले करता है जो इसे ले जाता है — इसलिए पूरा पथ बिना क्रेडेंशियल, बिना सत्र, और बिना मान्य हस्ताक्षर के पहुँच योग्य है। रिपोर्ट माइकल टकर (JPMorgan Chase XOR टीम) द्वारा; मूल-कारण और शोषण विश्लेषण का श्रेय watchTowr Labs को जाता है।

यह स्क्रिप्ट बग का नहीं शोषण करती और मेमोरी को दूषित नहीं करती। यह प्रति लक्ष्य एक प्रश्न का उत्तर देती है: क्या यह उपकरण पैच किया गया है? — व्यवहारिक रूप से निर्धारित, पैच का अवलोकन करके बिल्ड का अनुमान लगाने के बजाय।

क्या इसे चलाना सुरक्षित है?

हाँ। इसे प्रोडक्शन और मूल्यांकन उपयोग के लिए डिज़ाइन किया गया है:

  • प्रोब भ्रष्टाचार सीमा से नीचे रहता है। 575 बाइट्स इतने लंबे हैं कि पैच किए गए और बिना पैच वाले बिल्ड अलग-अलग उत्तर देते हैं, और यह उस लंबाई से काफी नीचे है जहाँ बिना पैच वाले उपकरण का मेमोरी भ्रष्टाचार शुरू होता है। दोनों समर्थित शाखाओं और दोनों पैच स्थितियों पर फैले उपकरणों पर मापन द्वारा सत्यापित किया गया, जिसमें दोनों फिक्स बिल्ड भी शामिल हैं।
  • यह जिस सीमा को पार करता है वह एक निश्चित कोड स्थिरांक है, न कि किसी एक परिनियोजन की संपत्ति। फिक्स बिल्ड एक PrefixList को । यह सीमा बाइट-दर-बाइट स्थित थी, दोनों समर्थित शाखाओं पर समान है, और उपकरण के कॉन्फ़िगरेशन या आस-पास के SAML संदेश के आकार के साथ नहीं बदलती — दोनों रूटों की जाँच से पुष्टि हुई, जो मान को काफी भिन्न मात्रा में XML में लपेटते हैं, और यह पाते हैं कि वे समान बाइट पर व्यवहार बदलते हैं। 575 सीमा को 63 बाइट्स से पार करता है, इसलिए निर्णय इस पर निर्भर नहीं करता कि कोई लक्ष्य किस तरह कॉन्फ़िगर किया गया है।
टूल डाउनलोड करें
512 बाइट्स के लिए स्वीकार करते हैं और 513 या अधिक को अस्वीकार करते हैं
  • पैचिंग से उपकरण सामान्य रूप से लंबे SAML मानों को अस्वीकार नहीं करते। यह सीमा केवल PrefixList विशेषता पर लागू होती है। अन्य फ़ील्डों को इससे अधिक बढ़ाना — एसर्शन कंज्यूमर सर्विस URL, जारीकर्ता नाम, एल्गोरिदम पहचानकर्ता, डाइजेस्ट और सिग्नेचर मान — एक फिक्स बिल्ड पर कुछ भी नहीं बदलते, इसलिए फिक्स लागू करने से कार्यशील SAML कॉन्फ़िगरेशन विफल नहीं होना चाहिए।
  • कोई मेमोरी दूषित नहीं होती और कोई प्रक्रिया पुनः प्रारंभ नहीं होती। पैच किए गए बिल्ड पर प्रोब को आकार जाँच पर अस्वीकार कर दिया जाता है; बिना पैच वाले बिल्ड पर यह पार्सर के भीतर हानिरहित रूप से विफल हो जाता है। कोई भी ओवरफ्लो तक नहीं पहुँचता।
  • स्कैन आउटपुट में कुछ भी संवेदनशील नहीं जाता। प्रोब केवल सिंथेटिक नेमस्पेस-प्रीफिक्स टोकन ले जाता है, और उपकरण निर्णय की रिपोर्ट करता है, प्रतिक्रिया निकायों की नहीं।
  • दो निश्चित लंबाई, कभी स्वीप नहीं। 575-बाइट प्रोब, साथ ही उस रूट पर 35-बाइट नियंत्रण जो उत्तर देता है। उपकरण कभी भी लंबाई की सीमा को स्वीप नहीं करता और कभी कोई अन्य लंबाई नहीं भेजता।
  • यदि आप प्रोब को संशोधित करते हैं, तो 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.1VULNERABLE
    13.1-63.18पहला फिक्स 13.1PATCHED
    14.1-66.59संवेदनशील 14.1VULNERABLE
    14.1-72.61पहला फिक्स 14.1PATCHED

    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 से, जहाँ आपके पास क्रेडेंशियल होते हैं।

    आवश्यकताएँ

    • Python 3.8+, केवल मानक पुस्तकालय — कोई तृतीय-पक्ष पैकेज नहीं।

    उपयोग```bash

    single target

    ./cve_2026_8452_check.py https://gateway.example.com

    a specific AAA / Gateway virtual server

    ./cve_2026_8452_check.py https://gateway.example.com:9443

    scan a list, one target per line ('#' comments allowed), compact output

    ./cve_2026_8452_check.py -f targets.txt --brief

    machine-readable output for pipelines

    ./cve_2026_8452_check.py -f targets.txt --json > results.json

    root@kitploit:~
    टूल को **गेटवे या 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)

    root@kitploit:~
                          RESULT: PATCHED
    

    https://vpn.example.com via IDP [size-check-present]

    root@kitploit:~
    **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

    root@kitploit:~
                        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.

    root@kitploit:~
    **बेड़े की स्कैनिंग** (`--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)" ] } ]

    root@kitploit:~
    ## 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 > क्लीन। इसलिए एक अगम्य होस्ट कभी भी एक्ज़िट कोड में किसी असुरक्षित निष्कर्ष को छिपा नहीं सकता।

    सीमाएँ

    • यह एक CVE की जाँच करता है, उपकरण के पैच स्तर की नहीं। PATCHED और एक्ज़िट कोड 0 का मतलब है कि CVE-2026-8452 आकार जाँच उस पथ पर मौजूद है जिस तक प्रोब पहुँचा। वे किसी अन्य NetScaler भेद्यता के बारे में कुछ नहीं कहते, जिनमें इस बग के बाद खुलासा हुई और बाद के बिल्ड में ठीक की गई भेद्यताएँ शामिल हैं। इस टूल से मिले एक्ज़िट 0 को उपकरण के लिए पूर्ण स्वास्थ्य प्रमाणपत्र के रूप में न पढ़ें।
    • एक गैर-असुरक्षित निर्णय आपके द्वारा जाँचे गए एंडपॉइंट तक सीमित है। पूर्वशर्त प्रति वर्चुअल सर्वर है। UNAFFECTED का अर्थ है "यहाँ पहुँच योग्य नहीं", न कि "यह उपकरण सुरक्षित है"।
    • पॉलिसी मिलान पार्सर तक पहुँच को नियंत्रित करता है। /saml/login उपकरण-व्यापी है, लेकिन बिना किसी बाध्य IdP पॉलिसी वाले वर्चुअल सर्वर पर यह Matching policy not found उत्तर देता है और कैनोनिकलाइज़र से पहले शॉर्ट-सर्किट करता है। एक IdP जिसकी पॉलिसी एक ऐसे एक्सप्रेशन नियम का उपयोग करती है जिसे प्रोब का अनुरोध संतुष्ट नहीं करता, उत्तर देने के बजाय INCONCLUSIVE में जाएगा।
    • INCONCLUSIVE पूर्ण स्वास्थ्य प्रमाणपत्र नहीं है। इसे जानबूझकर एक अलग एक्ज़िट कोड के साथ PATCHED से अलग किया गया है ताकि मौन कभी भी पासिंग परिणाम के लिए गलत न समझा जाए।
    • पहले फैक्टर के पीछे SAML वाली nFactor परिनियोजन INCONCLUSIVE रिपोर्ट करती हैं। जहाँ SAML पॉलिसी सीधे वर्चुअल सर्वर से बाध्य होने के बजाय nextFactor द्वारा पहुँचे गए पॉलिसी लेबल में होती है, वहाँ एक अनचाहा assertion कोई मिलती हुई पॉलिसी नहीं पाता और कैनोनिकलाइज़र से पहले शॉर्ट-सर्किट करता है। एक असुरक्षित बिल्ड पर सत्यापित, जिसने INCONCLUSIVE रिपोर्ट किया। चूँकि डिवाइस-पोस्चर या लॉगिन-स्कीमा पहले फैक्टर के पीछे SAML एक सामान्य पैटर्न है, nFactor गेटवे पर INCONCLUSIVE को "संभवतः पहुँच योग्य, show ns version से पुष्टि करें" के रूप में मानें, न कि एक जिज्ञासा के रूप में।
    • यह शोषण जाँच नहीं है। VULNERABLE निर्णय लापता आकार जाँच की पुष्टि करता है, जो पैच स्थिति है। यह नहीं मापता कि कोई हमलावर आपके बिल्ड पर भ्रष्टाचार को कितनी दूर ले जा सकता है।
    • केवल पहुँच योग्यता। एक परिणाम दर्शाता है कि उपकरण उस नेटवर्क स्थिति को क्या उजागर करता है जहाँ से आप इसे चलाते हैं। उपकरण के सामने एक WAF प्रतिक्रिया को छिपा सकता है।

    उपचार

    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) पर हैं और उन्हें स्थायी रूप से असुरक्षित माना जाना चाहिए और एक समर्थित ब्रांच में स्थानांतरित किया जाना चाहिए।

    दो अतिरिक्त नोट:

    • HA जोड़ी के दोनों नोड्स को पैच करें। एक अपैच्ड सेकेंडरी उसी क्षण पूरी तरह उजागर उपकरण होता है जब वह कार्यभार संभालता है।
    • अपनी इन्वेंट्री को वर्चुअल सर्वर प्रकार से नहीं, बल्कि SAML कॉन्फ़िगरेशन के आधार पर स्कोप करें। विक्रेता सलाह की शब्दावली (Gateway या AAA वर्चुअल सर्वर) ट्रिगर स्थिति से व्यापक है। रनिंग कॉन्फ़िगरेशन में 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 लाइसेंस के अंतर्गत वितरित किया जाता है।

    कानूनी अस्वीकरण

    पूर्व पारस्परिक सहमति के बिना लक्ष्यों पर हमला करने के लिए इस टूल का उपयोग अवैध है। सभी लागू स्थानीय, राज्य और संघीय कानूनों का पालन करना अंतिम उपयोगकर्ता की जिम्मेदारी है। डेवलपर्स कोई दायित्व नहीं मानते हैं और इस प्रोग्राम के कारण होने वाले किसी भी दुरुपयोग या क्षति के लिए जिम्मेदार नहीं हैं।

    यह भी देखें

    • Citrix CTX696604 — NetScaler सुरक्षा बुलेटिन
    • Citrix CTX696939 — उन पैच्ड बिल्ड को प्रतिस्थापित करने वाला बाद का NetScaler बुलेटिन
    • watchTowr Labs — CVE-2026-8452 तकनीकी विश्लेषण
    • NVD — CVE-2026-8452