漏洞名称:CVE-2020-5902: F5 BIG-IP TMUI 远程代码执行漏洞
威胁等级:高危
影响范围:BIG-IP 11.x,12.x,13.x,14.x,15.x
漏洞类型:代码执行
利用难度:简单
漏洞分析
1 相关组件介绍
F5 BIG-IP是由美国F5 Networks公司发行的一系列应用交付平台,具有负载均衡,流量管理,应用程序管理等多种功能。能够提供构建灵活的应用交付网络架构所需的基础组件,同时推动企业云架构实现,用户能够全方位监控自己的应用交付环境。2 漏洞分析
流量管理用户界面(TMUI)存在远程代码执行漏洞。该漏洞允许未授权的攻击者或授权用户通过BIG-IP的管理端口和/或自身IP执行任意系统命令,增删文件,停止服务,或执行任意java代码。 攻击者利用该漏洞将导致系统受到全面威胁,BIG-IP设备也存在此漏洞。BIG-IP服务器使用Java中的Servlet接口完成中间件和业务逻辑之间的交互。Tomcat解析URL的函数request.getPathInfo()根据中间件的解析获取pathInfo属性值并直接返回,表现为返回一个URL路径,但这个路径是传递到Servlet的路径,是最后一个/到截断符号之前的全部内容,即不考虑所有上级目录,仅关注直接访问的文件,且可以被分号截断。这个路径被函数 Mappings.getRequestByURL()实例化为一个URLMappings句柄。
1. 基于xml文件进行初始化
位于com.f5.controller.ControlServlet.class是所用到的servlet类,该类重写了init,doGet,fail,doPost等一系列函数。init方法中第104行调用 F5WebController.initMappings(this.getServletConfig()); 该函数位于第51行调用F5WebController.class中的initMappings方法。ControlServlet.class部分关键代码图
F5WebController.class部分关键代码图
initMappings函数初始化了一个Mappings对象,从Mappings.class的构造函数可以分析出其访问了两个用于初始化的xml文件:requestmappings.xml和responsemappings.xml。2. 接收传入的url,将其实例化
继续分析F5WebController.class,其中processWebRequest函数(第60行)接收并处理URL。3. 获取当前用户身份
位于F5WebController.class下第103行的User.getUser获取当前用户身份,该函数基于Role.class相关代码对于登录行为的处理,将用户区分为多个角色,角色各有不同的权限等级。4. 比较当前用户是否具有访问URL的权限
权限通过函数requestHandler.getAllowedLevels()的返回值加以判断,判断所用的URL即为第二阶段解析得到的URL,函数返回当前路径所允许的用户角色范围。接着调用User.haveAccessToAtLeastOneTargetLevel方法,判断当前角色权限ID是否在允许访问的角色范围内。/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd
在解析URL时,第一次解析会关注前半段,到login.jsp,这些是合法的,传给request.getPathInfo()判定当前用户是否具有访问这个url的权限。接下来Tomcat进行第二次解析,这时Tomcat会将..理解为向上回溯路径,而分号会被忽略,从而login.jsp和..被抵消,可以构造出带有路径穿越的url。
而权限管制的request.getPathInfo()代码中,分号会被视为截断,也即仅仅考虑前面jsp的路径,并使用这部分路径返回对应的权限对应关系,而login.jsp,welcome.jsp,index.jsp等文件都是可以在未授权情况下访问的,因此将其写入url可以绕过权限的检测实现非授权访问。但是在执行的时候,则会按照后面的fileRead.jsp执行,这实现了非授权的读取文件,其他攻击操作都是基于这一原理的。
3 漏洞复现
深信服千里目实验室在POC公开的第一时间进行了验证,证实目前互联网中公开的POC具备漏洞利用能力。 对于目前已公开该漏洞的绕过方式,千里目安全实验室对多种绕过方式进行了测试,深信服下一代防火墙可轻松防御这些绕过。绕过测试示例一:
绕过测试示例二:
绕过测试示例三:
绕过测试示例四:
影响范围
受影响版本
BIG-IP 15.1.0-15.1.0.3
BIG-IP 15.0.0
BIG-IP 14.1.0-14.1.2.5
BIG-IP 13.1.0-13.1.3.3
BIG-IP 12.1.0-12.1.5.1
BIG-IP 11.6.1-11.6.5.1
不受影响版本
BIG-IP 16.0.0
BIG-IP 15.1.0.4
BIG-IP 14.1.2.6
BIG-IP 13.1.3.4
BIG-IP 12.1.5.2
BIG-IP 11.6.5.2
BIG-IP <11.6.1
解决方案
1 修复建议
升级BIG-IP到已修复的最新版本即可修复该漏洞,各版本对应的修复版本为:
15.1.0&15.0.0 -- 升级到15.1.0.4
14.1.0-14.1.2 -- 升级到14.1.2.6
13.1.0-13.1.3 -- 升级到13.1.3.4
12.1.0-12.1.5 -- 升级到12.1.5.2
11.6.1-11.6.5 -- 升级到11.6.5.2
访问该链接获取最新版相关组件:
https://downloads.f5.com/esd/productlines.jsp
2 深信服解决方案
【深信服安全云眼】
在漏洞爆发之初,已完成检测更新,对所有用户网站探测,保障用户安全。不清楚自身业务是否存在漏洞的用户,可注册信服云眼账号,获取30天免费安全体验。注册地址:http://saas.sangfor.com.cn【深信服云镜】
在漏洞爆发第一时间即完成检测能力的发布,部署云端版云镜的用户只需选择紧急漏洞检测,即可轻松、快速检测此高危风险。部署离线版云镜的用户需要下载离线更新包来获取该漏洞的检测能力。【深信服下一代防火墙】
可轻松防御此漏洞, 建议部署深信服下一代防火墙的用户更新至最新的安全防护规则,可轻松抵御此高危风险。【深信服云盾】
已第一时间从云端自动更新防护规则,云盾用户无需操作,即可轻松、快速防御此高危风险。【深信服安全感知平台】
可检测利用该漏洞的攻击,实时告警,并可联动【深信服下一代防火墙等产品】实现对攻击者ip的封堵。3 临时修补方案
官方提供以下方式,在不影响系统情况下避免攻击:
3.1所有网络接口
1.输入以下内容登录TMOS Shell
tmsh
2.输入以下内容修改httpd属性
edit /sys httpd all-properties
3.找到include节,添加以下内容:
include '<LocationMatch ";">Redirect 404 /LocationMatch><LocationMatch "hsqldb">Redirect 404 /LocationMatch>'
4.输入以下内容写入并保存对配置文件的修改
Esc:wq!
5.当系统提示保存修改时,输入y。
6.输入以下内容保存配置
save /sys config
7.输入以下内容重启httpd服务
restart sys service httpd
8.输入以下命令退出tmsh
quit
9.输入以下命令并比较回显是否和配置信息中的LocationMatch片段相同,这一步是为了确保将修补方案加入到配置文件中,命令为:
grep -C1 'Redirect 404' /etc/httpd/conf/httpd.conf
输出内容应当与下列相同:
";">Redirect 404 /LocationMatch>
10. 如果有高可用性(HA)配置,可以按照https://support.f5.com/csp/article/K14856所述执行ConfigSync。
以上步骤可以使用脚本完成,如以下curl所示
# Patch the httpd configuration curl -ku admin:[password] https://[IP Address]/mgmt/tm/sys/httpd -H content-type:application/json -X PATCH -d '{"include":"\n \n Redirect 404 /\n \n "}' | jq . # Save the system config curl -ku admin:[password] https://[IP Address]/mgmt/tm/sys/config -H "Content-Type: application/json" -X POST -d '{"command":"save"}' | jq .
3.2 自身ip
禁用自我IP阻止BIG-IP系统访问TMUI,对于每个自我IP可将系统中的端口锁定(Port Lockdown)设置为Allow None。如果必须打开一些端口,则应当使用Allow Custom,注意不允许访问TMUI,默认情况下TMUI监听443端口,但从BIG-IP 13.0.0版本起, Single-NIC BIG-IP VE这些组件使用TCP端口8443,另外也可以设置custom端口。3.3管理界面
为减轻受影响的F5产品的漏洞,应当只允许管理人员通过安全网络访问F5产品。
3.4 受攻击的迹象
以下方式可以用于检查主机是否已被攻击: 14.1.0之前的版本 :在14.1.0之前的版本中,使用默认配置,可以按以下方式检查/ var / log / audit和/ var / log / ltm目录:grep -i '%tmui' /var/log/audit grep -i '%tmui' /var/log/ltm
类似如下的日志记录是设备受攻击的迹象。
audit.1:Jul 6 15:33:38 [REDACTED] notice tmsh[27903]: 01420002:5: AUDIT - Cannot load user credentials for user "%tmui" Current session has been terminated.ltm.1:Jul 6 15:33:38 [REDACTED] notice tmsh[27903]: 01420003:5: Cannot load user credentials for user "%tmui" Current session has been terminated.
14.1.0及其后的版本:可通过在终端(bash)中输入以下命令来检查journalctl的输出,从而证明漏洞被利用:
journalctl / bin / logger | grep -F';'
在受攻击的设备上,命令输出可能类似以下示例(该示例删除了一些元素,通常,完整的URL以及发送请求的IP地址将可见):
Jul 06 12:59:01 hostname logger[29929]: [ssl_acc] nnn.nnn.nnn.nnn - - [06/Jul/2020:12:59:01 +0000] "/[REDACTED]/..;/[REDACTED]" 200 252
这些日志仅由未经验证的攻击创建,经过身份验证的访问不会留下此记录。
其他对设备的危害包括文件,配置和进程的修改。
时间轴
2020/7/1
F5发布安全更新
2020/7/3
深信服千里目安全实验室发布漏洞安全通告
2020/7/5
漏洞poc公开
2020/7/6
深信服千里目实验室发布漏洞安全通告更新,发布深信服解决方案
2020/7/8
深信服千里目实验室发布漏洞安全通告更新,补充漏洞原理分析,绕过分析与修补方案更新