نظرة عامة على الثغرة
CVE-2026-88779 هي ثغرة Memory Overflow (تجاوز سعة الذاكرة المؤقتة) من نوع CWE-119 (القيود غير الصحيحة على العمليات داخل حدود المخزن المؤقت للذاكرة)، تؤثر على أجهزة Citrix NetScaler ADC و NetScaler Gateway التي تم تكوينها للعمل مع SAML Authentication (إما كـ SAML Service Provider أو SAML Identity Provider) .
تم إضافة هذه الثغرة إلى قائمة CISA KEV (Known Exploited Vulnerabilities) في 4 أكتوبر 2026، مما يؤكد استغلالها الفعلي في هجمات حقيقية .
التفاصيل التقنية
آلية الثغرة
تقع الثغرة في nsaaad daemon (خدمة المصادقة والترخيص والتدقيق)، وتحديداً في XML parser الذي يعالج بيانات SAML الواردة. المشكلة أن parser لا يتحقق من طول البيانات قبل نسخها إلى buffers محدودة الحجم، مما يسمح بكتابة بيانات خارج حدود المخزن المؤقت .
المتطلبات الأساسية للاستغلال
لتكون الجهاز عرضة للاستغلال، يجب أن يكون مُكوَّناً كـ:
SAML Service Provider (SP): يظهر في التكوين
add authentication samlActionSAML Identity Provider (IdP): يظهر في التكوين
add authentication samlIdPProfile
التأثير
Denial of Service (DoS): انهيار خدمة
nsaaadوإعادة تشغيل الجهازفي بيئات High Availability (HA): حدوث cascading failover loop — الجهاز النشط ينهار، يتولى الجهاز الاحتياطي، يُستهدف هو الآخر، وهكذا في حلقة لا نهائية
CVSS v4.0 Score: 8.7 (High)
ملاحظة مهمة: على الرغم من أن Citrix تصنف الثغرة كـ DoS، إلا أن باحثين لاحظوا shell commands في حقل
usernameأثناء محاولات الاستغلال، مما قد يشير إلى إمكانية Remote Code Execution (RCE) — لكن هذا لم يُؤكَّد رسمياً بعد .
الإصدارات المتأثرة والإصلاحات
المنتجالإصدارات المتأثرةالإصدار المُصلَّحNetScaler ADC & Gateway 14.1قبل 14.1-73.4114.1-73.41 أو أحدثNetScaler ADC & Gateway 13.1قبل 13.1-64.2813.1-64.28 أو أحدثNetScaler ADC 14.1-FIPSقبل 14.1-73.41 FIPS14.1-73.41 FIPS أو أحدثNetScaler ADC 13.1-FIPS & NDcPPقبل 13.1-37.28213.1-37.282 أو أحدث
تحذير حاسم: إذا قمت بتحديث أجهزتك سابقاً لمعالجة الثغرات CVE-2026-88771 حتى CVE-2026-88778، فأنت لا تزال معرضاً للخطر — يجب التحديث مرة أخرى إلى الإصدارات المذكورة أعلاه .
مؤشرات الاختراق (IoCs)
عنوان IP ضار:
213.209.159.55— يُستخدم لتنزيل payloadأوامر مشبوهة: shell commands في حقل
usernameأثناء مصادقة SAMLسلوك الجهاز: انهيارات متكررة في
nsaaad، إعادة تشغيل غير متوقعة، وصول Pitboss إلى حد إعادة التشغيلملفات مشبوهة:
/v(script تم تنزيله)
سكربت الفحص
bash
#!/bin/bash
# CVE-2026-88779 Exposure Checker
# للاستخدام التعليمي والدفاعي فقط
# يعمل على NetScaler ADC/Gateway أو مع نسخة من ns.conf
set -euo pipefail
# ========== الإعدادات ==========
NS_CONF_PATH="${1:-/nsconfig/ns.conf}"
EXPORTED_CONF="${2:-}"
CHECK_IOC="${3:-false}"
# الإصدارات المُصلَّحة
FIXED_14_1="14.1-73.41"
FIXED_13_1="13.1-64.28"
FIXED_FIPS_14_1="14.1-73.41 FIPS"
FIXED_FIPS_13_1="13.1-37.282"
# ========== الألوان ==========
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# ========== دوال مساعدة ==========
log_info() { echo -e "${GREEN}[INFO]${NC} $*"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
log_error() { echo -e "${RED}[ERROR]${NC} $*"; }
# ========== تحديد مصدر التكوين ==========
get_config() {
if [ -n "$EXPORTED_CONF" ] && [ -f "$EXPORTED_CONF" ]; then
echo "$EXPORTED_CONF"
elif [ -f "$NS_CONF_PATH" ]; then
echo "$NS_CONF_PATH"
elif [ -f "/nsconfig/ns.conf" ]; then
echo "/nsconfig/ns.conf"
else
log_error "لم يتم العثور على ملف ns.conf"
exit 1
fi
}
# ========== استخراج الإصدار ==========
get_version() {
local config_file="$1"
local version=""
# محاولة استخراج من رأس الملف
version=$(grep -m1 -E "^#NS_VERSION|^# VERSION|^# Version" "$config_file" 2>/dev/null | \
sed -E 's/^#\s*(NS_VERSION|VERSION|Version)\s*[=:]\s*//' | tr -d ' \r\n' || true)
# إذا لم ينجح، البحث عن أي سطر يحتوي على إصدار
if [ -z "$version" ]; then
version=$(grep -m1 -oE "[0-9]+\.[0-9]+-[0-9]+\.[0-9]+" "$config_file" 2>/dev/null || true)
fi
echo "$version"
}
# ========== فحص شرط SAML ==========
check_saml_precondition() {
local config_file="$1"
local saml_sp=false
local saml_idp=false
if grep -qE "^\s*add\s+authentication\s+samlAction\b" "$config_file" 2>/dev/null; then
saml_sp=true
fi
if grep -qE "^\s*add\s+authentication\s+samlIdPProfile\b" "$config_file" 2>/dev/null; then
saml_idp=true
fi
if $saml_sp || $saml_idp; then
echo "PRESENT"
[ "$saml_sp" = true ] && echo " - SAML Service Provider (samlAction) detected" >&2
[ "$saml_idp" = true ] && echo " - SAML Identity Provider (samlIdPProfile) detected" >&2
else
echo "ABSENT"
fi
}
# ========== مقارنة الإصدارات ==========
version_lt() {
# مقارنة إصدارات بأسلوب: 1 إذا $1 < $2
[ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" = "$1" ] && [ "$1" != "$2" ]
}
check_vulnerable_version() {
local current_ver="$1"
local major_minor=""
# استخراج السلسلة الرئيسية (14.1 أو 13.1)
major_minor=$(echo "$current_ver" | grep -oE "^[0-9]+\.[0-9]+" || true)
case "$major_minor" in
14.1)
if echo "$current_ver" | grep -qi "fips"; then
if version_lt "${current_ver// /}" "${FIXED_FIPS_14_1// /}"; then
return 0 # vulnerable
fi
else
if version_lt "$current_ver" "$FIXED_14_1"; then
return 0 # vulnerable
fi
fi
;;
13.1)
if echo "$current_ver" | grep -qiE "fips|ndcpp"; then
if version_lt "$current_ver" "$FIXED_FIPS_13_1"; then
return 0 # vulnerable
fi
else
if version_lt "$current_ver" "$FIXED_13_1"; then
return 0 # vulnerable
fi
fi
;;
*)
# إصدار غير معروف - نعتبره غير قابل للتحديد
return 2
;;
esac
return 1 # not vulnerable
}
# ========== فحص IoC (اختياري، على الجهاز فقط) ==========
check_iocs() {
log_warn "بدء فحص مؤشرات الاختراق (يتطلب صلاحيات root)..."
# فحص ملفات مشبوهة
if [ -f "/v" ]; then
log_error "تم العثور على ملف مشبوه: /v"
fi
# فحص عمليات مشبوهة
if ps aux 2>/dev/null | grep -qE "nobody|www-data" | grep -qv grep; then
log_warn "عمليات مشبوهة تحت مستخدم nobody"
fi
# فحص crontab
if crontab -l 2>/dev/null | grep -qvE "^#|^$"; then
log_warn "إدخالات crontab غير متوقعة"
fi
# فحص سجلات HTTP لوجود b64decode أو shell commands
if [ -d "/var/log" ]; then
if zgrep -qE "b64decode|eval|base64" /var/log/ns.log* 2>/dev/null; then
log_error "أنماط مشبوهة في السجلات (b64decode/eval)"
fi
fi
log_info "اكتمل فحص IoC (النتائج تحتاج مراجعة بشرية)"
}
# ========== التنفيذ الرئيسي ==========
main() {
echo "=========================================="
echo " CVE-2026-88779 Exposure Checker"
echo " Citrix NetScaler SAML Memory Overflow"
echo "=========================================="
echo ""
local config_file
config_file=$(get_config)
log_info "ملف التكوين: $config_file"
# 1. استخراج الإصدار
local version
version=$(get_version "$config_file")
if [ -z "$version" ]; then
log_error "تعذر تحديد إصدار NetScaler من ملف التكوين"
exit 1
fi
log_info "الإصدار المكتشف: $version"
# 2. فحص شرط SAML
local saml_status
saml_status=$(check_saml_precondition "$config_file")
if [ "$saml_status" = "PRESENT" ]; then
log_warn "تم اكتشاف تكوين SAML - الشرط الأساسي للثغرة متحقق"
else
log_info "لم يتم اكتشاف تكوين SAML"
fi
# 3. فحص الإصدار
local vuln_status=1
if check_vulnerable_version "$version"; then
vuln_status=0
else
local ret=$?
if [ "$ret" -eq 2 ]; then
vuln_status=2
fi
fi
echo ""
echo "=========================================="
echo " النتيجة"
echo "=========================================="
if [ "$saml_status" = "PRESENT" ]; then
if [ "$vuln_status" -eq 0 ]; then
log_error "الجهاز عرضة للخطر (VULNERABLE)"
echo ""
echo " السبب:"
echo " - إصدار قديم غير مُصلَّح"
echo " - تكوين SAML نشط"
echo ""
echo " الإجراء المطلوب:"
echo " - الترقية إلى: 14.1-73.41 أو 13.1-64.28"
echo " - أو أحدث FIPS/NDcPP المطابق"
echo ""
echo " حتى الترقية:"
echo " - فعّل Global Deny List في NetScaler Console"
echo " - احجب IP: 213.209.159.55"
echo " - راقب سجلات nsaaad و Pitboss"
exit 2
elif [ "$vuln_status" -eq 1 ]; then
log_info "الجهاز غير معرض للخطر (PATCHED)"
echo " الإصدار الحالي مُصلَّح لهذه الثغرة."
exit 0
else
log_warn "حالة غير معروفة (UNKNOWN VERSION)"
echo " تحقق يدوياً من الإصدار مقابل الإصدارات المُصلَّحة."
exit 3
fi
else
log_info "الجهاز غير معرض (SAML غير مُكوَّن)"
echo " الشرط الأساسي (SAML SP/IdP) غير متحقق."
exit 0
fi
}
# ========== نقطة الدخول ==========
# الاستخدام:
# ./check_cve_2026_88779.sh [مسار ns.conf]
# ./check_cve_2026_88779.sh /path/to/exported_ns.conf /path/to/exported_ns.conf true
if [ "${BASH_SOURCE[0]}" = "$0" ]; then
main "$@"
fiطريقة الاستخدام
bash
# على جهاز NetScaler نفسه (مع صلاحيات nsroot)
chmod +x check_cve_2026_88779.sh
./check_cve_2026_88779.sh
# باستخدام نسخة مصدّرة من ns.conf
./check_cve_2026_88779.sh /path/to/ns.conf /path/to/ns.conf
# مع فحص IoC (على الجهاز فقط)
./check_cve_2026_88779.sh /nsconfig/ns.conf "" trueملاحظات مهمة حول السكربت
نتيجة الفحص: إذا كان الجهاز VULNERABLE، قم بالترقية فوراً إلى الإصدار المُصلَّح، حتى لو كنت قد رقّيت سابقاً لثغرات أخرى.
فحص IoC: يتطلب صلاحيات root ويعمل على الجهاز نفسه؛ النتائج تحتاج مراجعة بشرية.
إذا كان SAML غير مُكوَّن: الجهاز غير عرضة لهذه الثغرة تحديداً، لكن قد يكون عرضة لثغرات أخرى.
توصيات إضافية للدفاع
التصحيح الفوري: الترقية إلى الإصدارات المذكورة أعلاه حتى لو قمت بالترقية سابقاً لثغرات CTX697096 .
Global Deny List: تفعيل التوقيعات (v24+) في NetScaler Console لمنع عناوين IP الضارة .
مراقبة السجلات: راقب انهيارات
nsaaad، وأحداث إعادة تشغيل Pitboss، والطلبات المتكررة على نقاط نهاية SAML.حجب IP: احجب
213.209.159.55على الأجهزة المحيطة بآجهزة NetScaler.التحقق من السلامة: بعد الترقية، تحقق من عدم وجود ملفات مشبوهة (مثل
/v) أو عمليات غير معتادة.
الردود والمناقشات التقنية 0
كن أول من يشارك رأيه أو استفساره التقني حول هذا الموضوع
إضافة رد أو استفسار تقني
يجب تسجيل الدخول لإضافة ردود ومشاركة الأكواد في هذا الموضوع.