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