CVE-2022-1388 F5 BIG-IP iControl REST 处理进程分析与认证绕过漏洞复现

白帽子社区

共 1500字,需浏览 3分钟

 ·

2022-05-14 07:56


漏洞信息


F5 BIG-IP是美国F5公司的一款集成了网络流量管理、应用程序安全管理、负载均衡等功能的应用交付平台。2022年5月4日,F5官方发布安全通告,修复了一个存在于BIG-IP iControl REST中的身份验证绕过漏洞。漏洞编号:CVE-2022-1388,影响版本如下:


环境搭建


下载v15.x系列:



首次运行需要修改密码:



进程分析


为了更加方便理解漏洞原理,下面首先简要分析下 F5 BIG-IP iControl 相关进程。


查看 443 端口对应 Apache 服务:




查看 Apache 版本:



漏洞存在于 iControl REST 接口,查看 API 接口文档和`httpd.conf`配置可知,通过`/mgmt/***`转发至`localhost:8100`端口:



寻找对应的进程如下:



可见是通过 Jetty 容器启动的 Java 进程,启动主类为`com.f5.rest.workers.RestWorkerHost`,主要 Jar 包位于`/usr/share/java/rest/`。查看进程树,定位`/proc/8597/cwd`,找到启动程序:



添加调试配置:



重启服务就可以打开远程调试:



为了能够远程访问,还需要关闭防火墙,可以通过`tmsh`进行配置:




漏洞分析


首先回顾一下去年爆出的 CVE-2021-22986 F5 BIG-IP iControl REST 认证绕过漏洞。F5 BIG-IP iControl REST API接口首先通过 Apache 进行认证(模块`mod_pam_auth.so`),当请求中存在`X-F5-Auth-Token`头时(不检查是否为空),将转发给后端的 Jetty来检查`X-F5-Auth-Token`的值是否合法(`EvaluatePermissions#evaluatePermission`),从而完成第二次认证,但是 Jetty 判断`X-F5-Auth-Token`为空时,将直接“认为” Apache已经完成认证从而不会检查提供的信息是否合法,从而实现了认证绕过:



先利用 CVE-2021-22986 的 POC 进行测试:




也就是说 CVE-2021-22986 打完补丁后,Apache 会检查`X-F5-Auth-Token`是否为空。只有当存在`X-F5-Auth-Token`头并且不为空时,才会交给后端的 Jetty 进行认证。


接下来我们看下官方提供的 CVE-2022-1388 临时修复方式:




从修复方式来看,主要是对 HTTP 头中的 connection 进行了修复。HTTP 有一种 hop-by-hop 滥用漏洞,可以参考:



如果请求中带有 HTTP 头`Connection: close, X-Foo, X-Bar`,Apache 会在请求转发到代理前,将`X-Foo`和`X-Bar`逐一删除。那么我们很容易联想到可以构造特殊请求,通过 Apache 的检查,同时由于  hop-by-hop 滥用漏洞导致转发进入 Jetty 前已经删除了`X-F5-Auth-Token`头:



顺利进入了 Jetty 解析,同时又不存在`X-F5-Auth-Token`头,从而实现了认证绕过。后面的逻辑处理与 CVE-2021-22986 是一样的,结合 F5 BIG-IP iControl REST 自带接口,很容易实现 RCE 。



由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。



浏览 46
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报