掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流
近期有朋友在后臺反饋 Tomcat 的漏洞,

成都做網(wǎng)站、網(wǎng)站建設的開發(fā),更需要了解用戶,從用戶角度來建設網(wǎng)站,獲得較好的用戶體驗。創(chuàng)新互聯(lián)公司多年互聯(lián)網(wǎng)經(jīng)驗,見的多,溝通容易、能幫助客戶提出的運營建議。作為成都一家網(wǎng)絡公司,打造的就是網(wǎng)站建設產(chǎn)品直銷的概念。選擇創(chuàng)新互聯(lián)公司,不只是建站,我們把建站作為產(chǎn)品,不斷的更新、完善,讓每位來訪用戶感受到浩方產(chǎn)品的價值服務。
到 Tomcat 的mail-list里查看郵件,果然郵件組里官方已經(jīng)發(fā)布公告。
我們本次分析兩個 CVE 中的一個漏洞,該漏洞比官方公告影響范圍還要廣,除了 Windows 平臺之外,其他平臺也以另外的一種利用形式受到影響,具體執(zhí)行任意代碼的風險,故在此描述,各位朋友查看自己的應用,如果有影響請盡快修復。
免責聲明
本文僅做技術分析及漏洞提醒,任何基于此從事的行為與本文無關。
漏洞描述
9月19日晚, Apache Tomcat 官方公告稱 所有 Windows 平臺上 開啟了 HTTP PUT 方法支持的, 都有遠程代碼執(zhí)行的風險。漏洞代碼: CVE-2017-12615
官方描述如下:
詳細說明:
我們很久之前的文章介紹過, Tomcat 里包含了兩個默認的 Servlet, 用于處理特定的請求,一個是 DefaultServlet,一個是 JspServlet。這兩個 Servlet 都是在 Tomcat 默認的 web.xml 里被包含進來,與自定義的web.xml 進行 merge,所以每個應用都會有這兩個 Servlet。
由于每個 Servlet 都可以設置一些初始化參數(shù)(init-param) ,所以在默認的web.xml 里包含一些常用的,例如是否允許文件列表,是否debug,fileEncoding, sendFile的大小 等等。 這其中就可以設置是否允許HTTP PUT 方法。
參數(shù)配置項:readOnly, 主要用于對于HTTP 的 PUT / DELETE 方法是否進行拒絕。
readOnly false
readOnly 默認是true, 也就是默認并沒有啟用PUT、DELETE這些方法。 如果有些朋友的容器由于應用依賴,開啟了readOnly ,一定要注意!!!
我們來看,在 DefaultServlet 的 PUT處理邏輯中,會先判斷readOnly
對于 DefaultServlet 的mapping 配置如下:
此時,如果請求URL 類似這樣:
請求方法: PUT
- 請求方法: PUT
- path: http://xxx/context/abc.jsp/
- data: 使用raw格式 <%out.println("Hello World");%>
使用Postman可以輕松構(gòu)造一個(使用方法可以參考:Web開發(fā)神器之PostMan,接口測試再也不愁了)
PUT 的內(nèi)容實際在處理時,會提取,并進行寫操作
- if(this.resources.write(path, (InputStream)resourceInputStream, true)) {
- if(resource.exists()) {
- resp.setStatus(204);
- } else {
- resp.setStatus(201);
- }
- } else {
- resp.sendError(409);
- }
這里的路徑,雖然是abc.jsp/ ,但在實際處理時,會進行處理,由于文件名規(guī)范的限制,***的一個/ 會被處理,所以就創(chuàng)建出了一個名為abc.jsp的文件,文件內(nèi)容就是我們傳來的raw 里的內(nèi)容。而這里的內(nèi)容是可以隨意寫的。
當PUT請求返回后,再次請求 abc.jsp, 此時 raw里隨意寫的內(nèi)容就會被執(zhí)行,也就是我們前面所說的任意代碼執(zhí)行的風險。
Apache Tomcat 官方描述的在 Windows 平臺中的漏洞,也是和命名問題,如果請求時url里是以abc.jsp%20這樣的 PUT 請求,到達 DefaultServlet 處理時,創(chuàng)建文件依然會把%20這個空格過濾掉,風險同上。
解決方案:
處理這個問題需要把 readOnly 設置為 true,或者保持初始值,不在web.xml中增加配置。
【本文為專欄作者“侯樹成”的原創(chuàng)稿件,轉(zhuǎn)載請通過作者微信公眾號『Tomcat那些事兒』獲取授權(quán)】

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流