Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-19490-check — اكتشاف تجاوز مصادقة SAML في Citrix NetScaler CVE-2026-19490 بأمان | Kitploit
أدوات/GitHubGitHub/bishopfox/cve-2026-19490-check
أدوات دفاعيةماسحات الثغرات الأمنيةماسحات الثغرات الأمنية للويبتحليل الثغرات الأمنيةجمع المعلوماتأمن الويبأمن الشبكاتاختبار الاختراقالمصادقة
GitHubbishopfox/cve-2026-19490-check

CVE-2026-19490-check

اكتشاف تجاوز مصادقة SAML في Citrix NetScaler CVE-2026-19490 بأمان

226منذ 20 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
عرض المستودع
مشاركة

تجاوز مصادقة سياق nFactor في Citrix NetScaler SAML — نص برمجي لكشف الثغرة

فحص آمن وغير مُصادَق للثغرة CVE-2026-19490، وهي تجاوز المصادقة قبل المصادقة في مسار مزوّد خدمة SAML في Citrix NetScaler ADC / NetScaler Gateway (CTX696939، نُشر في 2026-08-19). CWE-288، CVSS v4.0 9.3 (AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:L). أبلغ عنه Samarth Vashisht من فريق اختبار الاختراق في JPMorgan Chase.

يقوم الجهاز بفك ترميز base64 للمعامل RelayState في استجابة SAML، وعندما يبدأ النص العادي بـ ctx=، يمرّر الباقي إلى مُفكِّك تسلسل سياق nFactor. على إصدار غير مُرقَّع، يؤدي فشل فك التسلسل إلى نشر طول RelayState المُفكَّك كرمز التصرف الداخلي للطلب بدلاً من خطأ، لذا يختار المهاجم غير المُصادَق الفرع الداخلي الذي يتخذه الجهاز بعد ذلك بمجرد اختياره لطول RelayState. بعض الفروع تُنشئ جلسة Gateway حقيقية؛ وأخرى تُعطّل محرك الحزم وتُعيد تشغيل الجهاز. هذا النص البرمجي لا يفعل أياً من ذلك — فهو يرسل الطول الواحد المُتحقَّق منه الذي لا يُنشئ جلسة ويترك محرك الحزم وشأنه، ويجيب على سؤال واحد لكل هدف: هل هذا الجهاز مُعرَّض للثغرة؟ أي نتيجة غير VULNERABLE هي ليست بحد ذاتها شهادة سلامة.

الاستخدام

# single target
./cve_2026_19490_check.py https://gateway.example.com

# a specific Gateway or AAA virtual server
./cve_2026_19490_check.py https://gateway.example.com:9443

# several targets; the scheme defaults to https://
./cve_2026_19490_check.py gw-a.example.com gw-b.example.com:9443

# scan a list, one target per line ('#' comments allowed), compact output
./cve_2026_19490_check.py -f targets.txt --brief

# machine-readable output for pipelines
./cve_2026_19490_check.py -f targets.txt --json > results.json

Python 3.8+، المكتبة القياسية فقط — لا حزم خارجية.

وجّه الأداة إلى خادم Gateway أو AAA الافتراضي، وليس إلى واجهة الإدارة. التعرّض يكون لكل خادم افتراضي، لذا يحتاج الجهاز الذي يضم عدة VIPs إلى اختبار كل واحد منها. يحمل الفحص غلافاً أمنياً صارماً — طول RelayState واحد مُتحقَّق منه، دون مسح — وهو ما يوضحه هل من الآمن تشغيله؟.

الخيارات

العلمالوصف
TARGETهدف واحد أو أكثر بصيغة [https://]HOST[:PORT]؛ المخطط الافتراضي هو https://
-f, --targets-file FILEقراءة الأهداف من ملف (واحد في كل سطر؛ تعليقات #)
--timeout SECSالمهلة لكل طلب (الافتراضي: 15)
--workers Nالأهداف المتزامنة (الافتراضي: 16)؛ يبقى الإخراج بترتيب الإدخال
-b, --briefسطر واحد مُحاذى لكل هدف — مثالي لفحص العديد من المضيفين
--jsonإخراج JSON مُهيكل، بما في ذلك كل طلب يُرسَل لكل هدف
--no-colorتعطيل الإخراج الملوّن (يحترم أيضاً NO_COLOR وغير TTY)

أمثلة

جهاز مُعرَّض للثغرة (الإخراج الافتراضي المكوّن من سطرين). تظهر العلامة [!] وVULNERABLE باللون الأحمر على TTY:

$ ./cve_2026_19490_check.py https://gateway.example.com:9443
[!] https://gateway.example.com:9443: VULNERABLE  [internal-error-43524]
      HTTP 500 / 43524: the decoded RelayState length was propagated as the internal error, so the CTX696939 fix is absent

جهاز مُرقَّع:

$ ./cve_2026_19490_check.py https://vpn.example.com
[+] https://vpn.example.com: PATCHED  [fixed-error-returned]
      HTTP 200 "Malformed Assertion": the fixed error was returned on the path this probe reached, so the CTX696939 fix is present (>= 13.1-63.21 / 14.1-73.32)

تفعيل حارس الإيجابيات الكاذبة. أعاد كلٌّ من الفحص و الضابط بنفس الطول إشارة عدم الترقيع، لذا لا تعتمد الاستجابة على ما أُرسل وتُسحَب الإجابة التي تبدو حاسمة:

$ ./cve_2026_19490_check.py https://sp-strict.example.com
[?] https://sp-strict.example.com: INCONCLUSIVE  [flat-response]
      the probe and the same-length control both answered HTTP 500 / 43524, so the reply does not depend on what was sent and the fix was never exercised; unknown, not patched

مسح مجموعة أصول (--brief). صفّا gateway.example.com هما الخادمان الافتراضيان SP وIdP-only على الجهاز نفسه — كلاهما يجيب، وهو ما لا تستطيعه أداة فحص الشروط المسبقة للإعداد:

$ ./cve_2026_19490_check.py -f targets.txt --brief; echo "exit: $?"
VULNERABLE    https://gateway.example.com:9443         internal-error-43524
VULNERABLE    https://gateway.example.com:9444         internal-error-43524
PATCHED       https://vpn.example.com                  fixed-error-returned
INCONCLUSIVE  https://sp-strict.example.com            flat-response
UNAFFECTED    https://lb.example.com                   no-saml-endpoint
ERROR         https://www.example.com                  not-identified
exit: 1

إخراج قابل للقراءة آلياً (--json). يُضمَّن كل طلب، لذا يمكن إعادة استنتاج النتيجة من الأدلة بدلاً من الوثوق بها. يُسجَّل الضابط من خلال علاقته بالفحص لا كحكم خاص به، لأن ضابطاً يبدو كإصدار مُرقَّع هو النتيجة المتوقعة على كل إصدار:

$ ./cve_2026_19490_check.py https://gateway.example.com:9443 --json
[
  {
    "target": "https://gateway.example.com:9443",
    "verdict": "VULNERABLE",
    "reason": "internal-error-43524",
    "detail": "HTTP 500 / 43524: the decoded RelayState length was propagated as the internal error, so the CTX696939 fix is absent",
    "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)"
    ],
    "attempts": [
      {
        "kind": "probe",
        "path": "/cgi/samlauth",
        "status": 500,
        "state": "unpatched",
        "detail": "HTTP 500 / 43524: the decoded RelayState length was propagated as the internal error"
      },
      {
        "kind": "control",
        "path": "/cgi/samlauth",
        "status": 200,
        "state": "differs-from-probe",
        "detail": "same-length control: HTTP 200 \"Malformed Assertion\": the fixed error was returned"
      }
    ]
  }
]

هل من الآمن تشغيله؟

نعم. صُمِّم للاستخدام في الإنتاج والتقييم:

  • طول واحد ثابت، دون مسح أبداً. يُفكَّك RelayState الخاص بالفحص إلى 20 بايت بالضبط ولا يرسل النص البرمجي أي طول آخر تحت أي علم. على جهاز غير مُرقَّع، الطول المُفكَّك هو مُحدِّد الفرع، وتشمل الفروع فروعاً تُنشئ جلسة وأخرى تُسبِّب SIGSEGV لمحرك الحزم — ما يُعيد تشغيل NetScaler بالكامل ويُسقط حركة المرور لنحو 45 ثانية. عشرون بايتاً يقع على فرع خطأ داخلي نظيف لا يُنشئ جلسة، ويرفض مُنشئ الحمولة إنشاء أي طول آخر، لذا لا يمكن لتعديل في مكان آخر أن يوسّع الفحص بصمت.
  • مُتحقَّق منه بالقياس. شُغِّل فحص العشرين بايت 10 مرات متتالية ضد إصدار 13.1-63.18 غير مُرقَّع دون توليد أي cores ودون إعادة تشغيل محرك الحزم. وقد شُغِّل الفحص نفسه منذ ذلك الحين ضد فرعي الصيانة، على جانبي الإصلاح، وضد الخوادم الافتراضية لمزوّد الخدمة وIdP-only على حد سواء، دون إعادة تشغيل محرك الحزم على أي منها.
  • لا مصادقة، ولا مواد اعتماد، ولا تغيير في الحالة. لا يُقدَّم أي assertion أو توقيع أو طابع زمني أو جلسة أو شهادة عميل في أي مكان في هذا الفحص. يجب أن يكون المعامل SAMLResponse موجوداً للوصول إلى فرع RelayState، لكن محتواه غير ذي صلة، لذا فهو أربعة بايتات من بيانات عشوائية. لا يُصدر الفرع أي cookie ولا يكتب أي إعداد.
  • حارس الإيجابيات الكاذبة. لا يُبلَّغ عن VULNERABLE أبداً بناءً على استجابة واحدة — انظر الضابط.

إذا عدّلت الفحص، فلا تُغيِّر طول RelayState المُفكَّك ولا تمسح الأطوال. عشرون بايتاً أمر جوهري، والأقصر ليس أكثر أماناً. الأطوال الأخرى غير مُختبرة في أفضل الأحوال وانقطاع للجهاز في أسوأها.

بصمة الطلبات والسجلات

ثلاثة طلبات HTTP لكل هدف، ورابع فقط عندما يُعيد الجهاز إشارة عدم الترقيع:

#الطلبالغرض
1GET /logon/LogonPoint/tmindex.htmlتعريف NetScaler (رموز Content-Security-Policy)
2GET /vpn/js/rdx/core/rdx.jsتعريف NetScaler
3POST /cgi/samlauthالفحص
4POST /cgi/samlauthالضابط، يُرسَل فقط بعد إشارة عدم الترقيع
تنزيل الأداة