摘要: 本次漏洞位于F5 BIG-IP产品,流量管理用户页面(TMUI)存在认证绕过漏洞(CVE-2020-5902),导致可以未授权访问TMUI模块所有功能(包括未公开功能),漏洞影响范围包括执行任意系统命令、任意文件读取、任意文件写入、开启/禁用服务等。
近日监测到F5 BIG-IP 远程代码执行漏洞的公开,360灵腾安全实验室判断漏洞等级为高,利用难度低,威胁程度高,影响面高。建议使用用户及时安装最新补丁,以免遭受黑客攻击。
0x00 漏洞概述
本次漏洞位于F5 BIG-IP产品,流量管理用户页面(TMUI)存在认证绕过漏洞(CVE-2020-5902),导致可以未授权访问TMUI模块所有功能(包括未公开功能),漏洞影响范围包括执行任意系统命令、任意文件读取、任意文件写入、开启/禁用服务等。
TMUI站点位于/usr/local/www/tmui/
目录,运行环境为Tomcat。
首先分析Web配置文件 /WEB-INF/web.xml
,发现配置了servlet load-on-startup
属性,web站点在启动时会优先实例化 com.f5.controller.ControlServlet
并调用init()方法。
分析依赖 /WEB-INF/lib/tmui.jar
,找到 com.f5.controller.ControlServlet
的init方法。
init()方法在最后调用 F5WebController.initMappings(getServletConfig())
初始化Mapping。
跟踪 com.f5.F5WebController.initMappings()
方法,方法紧接着调用了 com.f5.controller.Mappings()
。
该方法分别读取了Mapping文件 /WEB-INF/xml/requestmappings.xml
、/WEB-INF/xml/responsemappings.xml
初始化。
Web请求Mapping配置文件 /WEB-INF/xml/requestmappings.xml
,请求路由对应Handler。
Web响应Mapping配置文件 /WEB-INF/xml/responsemappings.xml
,请求路由对应Handler。
继续分析 com.f5.controller.ControlServlet
,该servlet类重写了doGet方法、doPost方法,所有请求都会经过该方法进行处理。
154行调用 com.f5.controller.F5WebController
实例化,199行调用 processWebRequest()
方法处理Web请求。
跟踪 processWebRequest()
方法,61行调用 Mappings.getRequestByURL()
方法获取当前路由的requestMapping配置,71行对当前路由对应的Handler进行实例化,即requestHandler。
其中 Mappings.getRequestByURL(this.request.getPathInfo())
为此漏洞原因所在。该方法根据 request.getPathInfo()
的Servlet路径返回相对应的Handler类名。
继续往下看,122行调用 User.getUser()
获取当前用户身份,125行调用前面实例化的Handler的 getAllowedLevels()
方法,该方法返回当前路由允许访问的角色权限ID。
接着调用 User.haveAccessToAtLeastOneTargetLevel()
方法,判断当前角色权限ID是否在允许访问的角色范围内。
User.haveAccessToAtLeastOneTargetLevel()
方法
附上角色身份及ID对照表。
以上就是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命令、文件读取、文件写入等敏感函数。
除了 /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
目前网上已经公开多个利用方法,包括root权限命令执行方法可导致获取F5设备root权限。漏洞危害演示如下:
普通tmsh命令执行
tmsh执行bash命令(root权限)
任意文件读取
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漏洞,请确保所有账号未使用弱口令。
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