CVE-2022-1388 F5 BIG-IP iControl REST 處理進(jìn)程分析與認(rèn)證繞過漏洞復(fù)現(xiàn)
F5 BIG-IP是美國(guó)F5公司的一款集成了網(wǎng)絡(luò)流量管理、應(yīng)用程序安全管理、負(fù)載均衡等功能的應(yīng)用交付平臺(tái)。2022年5月4日,F(xiàn)5官方發(fā)布安全通告,修復(fù)了一個(gè)存在于BIG-IP iControl REST中的身份驗(yàn)證繞過漏洞。漏洞編號(hào):CVE-2022-1388,影響版本如下:

下載v15.x系列:

首次運(yùn)行需要修改密碼:

為了更加方便理解漏洞原理,下面首先簡(jiǎn)要分析下 F5 BIG-IP iControl 相關(guān)進(jìn)程。
查看 443 端口對(duì)應(yīng) Apache 服務(wù):


查看 Apache 版本:

漏洞存在于 iControl REST 接口,查看 API 接口文檔和`httpd.conf`配置可知,通過`/mgmt/***`轉(zhuǎn)發(fā)至`localhost:8100`端口:

尋找對(duì)應(yīng)的進(jìn)程如下:

可見是通過 Jetty 容器啟動(dòng)的 Java 進(jìn)程,啟動(dòng)主類為`com.f5.rest.workers.RestWorkerHost`,主要 Jar 包位于`/usr/share/java/rest/`。查看進(jìn)程樹,定位`/proc/8597/cwd`,找到啟動(dòng)程序:

添加調(diào)試配置:

重啟服務(wù)就可以打開遠(yuǎn)程調(diào)試:

為了能夠遠(yuǎn)程訪問,還需要關(guān)閉防火墻,可以通過`tmsh`進(jìn)行配置:


首先回顧一下去年爆出的 CVE-2021-22986 F5 BIG-IP iControl REST 認(rèn)證繞過漏洞。F5 BIG-IP iControl REST API接口首先通過 Apache 進(jìn)行認(rèn)證(模塊`mod_pam_auth.so`),當(dāng)請(qǐng)求中存在`X-F5-Auth-Token`頭時(shí)(不檢查是否為空),將轉(zhuǎn)發(fā)給后端的 Jetty來(lái)檢查`X-F5-Auth-Token`的值是否合法(`EvaluatePermissions#evaluatePermission`),從而完成第二次認(rèn)證,但是 Jetty 判斷`X-F5-Auth-Token`為空時(shí),將直接“認(rèn)為” Apache已經(jīng)完成認(rèn)證從而不會(huì)檢查提供的信息是否合法,從而實(shí)現(xiàn)了認(rèn)證繞過:

先利用 CVE-2021-22986 的 POC 進(jìn)行測(cè)試:


也就是說 CVE-2021-22986 打完補(bǔ)丁后,Apache 會(huì)檢查`X-F5-Auth-Token`是否為空。只有當(dāng)存在`X-F5-Auth-Token`頭并且不為空時(shí),才會(huì)交給后端的 Jetty 進(jìn)行認(rèn)證。
接下來(lái)我們看下官方提供的 CVE-2022-1388 臨時(shí)修復(fù)方式:

從修復(fù)方式來(lái)看,主要是對(duì) HTTP 頭中的 connection 進(jìn)行了修復(fù)。HTTP 有一種 hop-by-hop 濫用漏洞,可以參考:

如果請(qǐng)求中帶有 HTTP 頭`Connection: close, X-Foo, X-Bar`,Apache 會(huì)在請(qǐng)求轉(zhuǎn)發(fā)到代理前,將`X-Foo`和`X-Bar`逐一刪除。那么我們很容易聯(lián)想到可以構(gòu)造特殊請(qǐng)求,通過 Apache 的檢查,同時(shí)由于 ?hop-by-hop 濫用漏洞導(dǎo)致轉(zhuǎn)發(fā)進(jìn)入 Jetty 前已經(jīng)刪除了`X-F5-Auth-Token`頭:

順利進(jìn)入了 Jetty 解析,同時(shí)又不存在`X-F5-Auth-Token`頭,從而實(shí)現(xiàn)了認(rèn)證繞過。后面的邏輯處理與 CVE-2021-22986 是一樣的,結(jié)合 F5 BIG-IP iControl REST 自帶接口,很容易實(shí)現(xiàn) RCE 。
由于傳播、利用此文檔提供的信息而造成任何直接或間接的后果及損害,均由使用本人負(fù)責(zé),且聽安全團(tuán)隊(duì)及文章作者不為此承擔(dān)任何責(zé)任。
