漏洞介紹
Java 是目前 Web 開發中最主流的編程語言,而 Tomcat 是當前最流行的 Java 中間件服務器之一,從初版發佈到現在已經有二十多年曆史,在世界範圍內廣泛使用。
2020年2月20日,國家信息安全漏洞共享平臺(CNVD)發佈了Apache Tomcat 文件包含漏洞(CNVD-2020-10487 / CVE-2020-1938)。該漏洞的危害等級:高。目前廠商已發佈新版本完成漏洞的修復。
漏洞簡介
CVE-2020-1938 漏洞是由長亭科技安全研究員發現的存在於 Tomcat 中的安全漏洞。Tomcat 服務器作一個免費的開放源代碼的Web 應用服務器,其安裝後會默認開啓ajp連接器,方便與其他web服務器通過ajp協議進行交互。
但由於 Tomcat AJP 協議設計上存在缺陷,攻擊者通過 Tomcat AJP Connector 可以讀取或包含 Tomcat 上所有 webapp 目錄下的任意文件,例如可以讀取 webapp 配置文件或源代碼。此外在目標應用有文件上傳功能的情況下,配合文件包含的利用還可以達到遠程代碼執行的危害。
該漏洞詳細的原理分析可參見:【WEB安全】Tomcat-Ajp協議漏洞分析。
受影響版本
- Apache Tomcat 6
- Apache Tomcat 7 < 7.0.100
- Apache Tomcat 8 < 8.5.51
- Apache Tomcat 9 < 9.0.31
不受影響版本
- Apache Tomcat = 7.0.100
- Apache Tomcat = 8.5.51
- Apache Tomcat = 9.0.31
因爲本次漏洞影響範圍比較大,所以這個漏洞在發佈的初期,各大SRC漏洞平臺上都刷瘋了。在滲透測試過程中,如果發現目標網站的 Tomcat 版本號在受影響的版本範圍內,可對其進行漏洞的驗證測試。
漏洞復現
看網上好多博主復現該漏洞的方式是:虛擬機直接下載 Tomcat 存在漏洞的版本(如Tomcat-8.5.32)的 Docker 鏡像,直接運行後便可執行 POC 腳本進行攻擊,但我在復現的時候發現運行容器啓動 Tomcat 服務後,8009
端口並未如博主們所述的那樣處於開放狀態(具體原因不詳,知情大佬請留言賜教……),無法成功進行攻擊。
但我發現在最新下載的 Vulhub 漏洞環境中發現已經集成了該漏洞(只是 Vulhub 官網的復現文檔尚未同步),故下文基於 Vulhub 漏洞環境進行漏洞復現。
實驗環境:
主機 | 作用 | IP地址 |
---|---|---|
Ubuntu 虛擬機 | 基於 Vulhub 漏洞環境搭建 Tomcat-9.0.30 靶場 | 172.31.1.135 |
Kali Liunx 虛擬機 | 使用 Nmap、POC腳本對靶機實施探測、攻擊 | 172.31.3.198 |
1、在 Ubuntu 虛擬機對應的漏洞環境路徑下開啓終端,執行如下命令運行靶場環境:
2、可以看到 Vulub 爲我們自動搭建並啓動了基於 Tomcat-9.0.30
的靶場環境:
3、局域網內的 Kali 虛擬機可成功進行訪問:
4、使用 Nmap 對靶機進行端口掃描,查看8009端口是否處於開放狀態:
5、在 Kali 中從 Github 克隆 POC 腳本 到本地:
6、嘗試讀取靶機上 Tomcat 服務器的
/usr/local/tomcat/webapps/ROOT/WEB-INF
文件:
7、返回 Ubuntu 虛擬機,進入 Docker 容器,查看相應的文件是否與 Kali 攻擊機獲取到的一致:
至此,我們已成功復現 CVE-2020-1938 漏洞,利用文件包含漏洞進階獲得 RCE 的攻擊方式可參考文章:CVE-2020-1938 幽靈貓漏洞RCE 。
修復方案
- 臨時禁用AJP協議8009端口,在
conf/server.xml
配置文件中註釋掉<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />
; - 配置ajp配置中的secretRequired跟secret屬性來限制認證;
- 官方下載最新版下載地址:
https://tomcat.apache.org/download-70.cgi
https://tomcat.apache.org/download-80.cgi
https://tomcat.apache.org/download-90.cgi
或Github下載:https://github.com/apache/tomcat/releases。