作者:且聽安全
原文鏈接: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 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1895/
暫無評論