作者:且听安全
原文链接: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-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 。
本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1895/