CVE-2022-1388 F5 BIG-IP iControl REST 處理進程分析與認證繞過漏洞復現
漏洞信息
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 。
由于傳播、利用此文檔提供的信息而造成任何直接或間接的后果及損害,均由使用本人負責,且聽安全團隊及文章作者不為此承擔任何責任。