F5 BIG-IP 远程代码执行漏洞分析(CVE-2020-5902)

摘要: 本次漏洞位于F5 BIG-IP产品,流量管理用户页面(TMUI)存在认证绕过漏洞(CVE-2020-5902),导致可以未授权访问TMUI模块所有功能(包括未公开功能),漏洞影响范围包括执行任意系统命令、任意文件读取、任意文件写入、开启/禁用服务等。

近日监测到F5 BIG-IP 远程代码执行漏洞的公开,360灵腾安全实验室判断漏洞等级为高,利用难度低,威胁程度高,影响面高。建议使用用户及时安装最新补丁,以免遭受黑客攻击。

 0x00 漏洞概述

本次漏洞位于F5 BIG-IP产品,流量管理用户页面(TMUI)存在认证绕过漏洞(CVE-2020-5902),导致可以未授权访问TMUI模块所有功能(包括未公开功能),漏洞影响范围包括执行任意系统命令、任意文件读取、任意文件写入、开启/禁用服务等。

0x01 认证绕过漏洞

TMUI站点位于/usr/local/www/tmui/目录,运行环境为Tomcat。

首先分析Web配置文件 /WEB-INF/web.xml,发现配置了servlet load-on-startup 属性,web站点在启动时会优先实例化 com.f5.controller.ControlServlet 并调用init()方法。

-w643

分析依赖 /WEB-INF/lib/tmui.jar,找到 com.f5.controller.ControlServlet的init方法。
init()方法在最后调用 F5WebController.initMappings(getServletConfig()) 初始化Mapping。

-w837

跟踪 com.f5.F5WebController.initMappings() 方法,方法紧接着调用了 com.f5.controller.Mappings() 。

该方法分别读取了Mapping文件 /WEB-INF/xml/requestmappings.xml/WEB-INF/xml/responsemappings.xml 初始化。

-w779

Web请求Mapping配置文件 /WEB-INF/xml/requestmappings.xml,请求路由对应Handler。

-w1334

Web响应Mapping配置文件 /WEB-INF/xml/responsemappings.xml,请求路由对应Handler。

-w1111

继续分析 com.f5.controller.ControlServlet,该servlet类重写了doGet方法、doPost方法,所有请求都会经过该方法进行处理。

154行调用 com.f5.controller.F5WebController 实例化,199行调用 processWebRequest() 方法处理Web请求。

-w978

跟踪 processWebRequest() 方法,61行调用 Mappings.getRequestByURL() 方法获取当前路由的requestMapping配置,71行对当前路由对应的Handler进行实例化,即requestHandler。

-w1075

其中 Mappings.getRequestByURL(this.request.getPathInfo()) 为此漏洞原因所在。该方法根据 request.getPathInfo() 的Servlet路径返回相对应的Handler类名。

-w515

继续往下看,122行调用 User.getUser() 获取当前用户身份,125行调用前面实例化的Handler的 getAllowedLevels() 方法,该方法返回当前路由允许访问的角色权限ID。

接着调用 User.haveAccessToAtLeastOneTargetLevel() 方法,判断当前角色权限ID是否在允许访问的角色范围内。

-w1167

User.haveAccessToAtLeastOneTargetLevel() 方法

-w750

附上角色身份及ID对照表。

-w431

以上就是servlet主要的权限验证逻辑,根据请求路由Handler判断当前用户是否拥有权限访问该路由,通过权限验证后根据/WEB-INF/web.xml 的路由调用对应的类。

已知TMUI登录页面 /tmui/login.jsp 可以通过未授权进行访问,以漏洞POC /tmui/login.jsp/..;/tmui/util/getTabSet.jsp为例,当请求漏洞点时Tomcat与Servlet的URL分别如下:

  • Tomcat:

/tmui/tmui/util/getTabSet.jsp
  • Servlet request.getPathInfo():

/tmui/login.jsp

此次漏洞的本质是因为Tomcat解析的URL与request.getPathInfo()存在差异,导致绕过权限验证逻辑,未授权访问所有路由,包括执行tmsh命令、文件读取、文件写入等敏感函数。

-w797

除了 /tmui/login.jsp 无需登录以外,以下两个路由也无需登录即可利用:

/tmui/tmui/login/index.jsp -> /tmui/tmui/login/index.jsp/..;/..;/..;/tmui/util/getTabSet.jsp
/tmui/tmui/login/welcome.jsp -> /tmui/tmui/login/welcome.jsp/..;/..;/..;/tmui/util/getTabSet.jsp

0x02 漏洞演示

目前网上已经公开多个利用方法,包括root权限命令执行方法可导致获取F5设备root权限。漏洞危害演示如下:

  • 普通tmsh命令执行

-w1306

  • tmsh执行bash命令(root权限)

-w1310

  • 任意文件读取

-w1303

 

0x03 影响版本

  • 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

 0x04 临时修复方案

1) 执行以下命令登录到TMOS Shell(tmsh):

tmsh

2) 执行以下命令编辑httpd组件配置文件

edit /sys httpd all-properties

3) 添加include代码

include '
<LocationMatch ".*\.\.;.*">
Redirect 404 /
</LocationMatch>
'

4) 输入以下命令保存到配置文件

按下 ESC 并依次输入:wq

5) 执行以下命令保存系统配置

save /sys config

6) 执行以下命令重启httpd服务

restart sys service httpd

注意:经过身份验证的用户将仍然能够利用RCE漏洞,请确保所有账号未使用弱口令。

0x05 参考链接

https://support.f5.com/csp/article/K52145254
https://i.blackhat.com/us-18/Wed-August-8/us-18-Orange-Tsai-Breaking-Parser-Logic-Take-Your-Path-Normalization-Off-And-Pop-0days-Out-2.pdf
https://xz.aliyun.com/t/7544

原文地址:https://www.anquanke.com/post/id/209932

上一篇:内网渗透之应用层隧道技术(下...
下一篇:D-Link DIR878路...