作者:且听安全
原文链接:https://mp.weixin.qq.com/s/DR0RGE0lhBjBIF3TbDLhMw

漏洞信息

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-FooX-Bar逐一删除。那么我们很容易联想到可以构造特殊请求,通过 Apache 的检查,同时由于 hop-by-hop 滥用漏洞导致转发进入 Jetty 前已经删除了X-F5-Auth-Token头:

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


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1895/