struts2漏洞监测_CVE20190233: S2060 拒绝服务漏洞分析
更多全球網絡安全資訊盡在邑安全
0x01 漏洞簡述
2020年8月11日,360CERT監測發現Apache官方發布了S2-060的風險通告,該漏洞編號為CVE-2019-0233,漏洞等級:中危。漏洞評分:6.8。
當使用getter對文件上傳執行一個暴露文件的操作時,攻擊者可能會構造特定請求,從而將上傳文件的工作目錄設置為只讀。因此,對該文件的后續操作將失敗并出現錯誤。還可以將Servlet容器的temp目錄設置為只讀,這樣后續的上載操作就會失敗,對業務造成影響。
對此,360CERT建議廣大用戶及時將?Struts2?升級到最新版。與此同時,請做好資產自查以及預防工作,以免遭受黑客攻擊。
0x02 風險等級
360CERT對該漏洞的評定結果如下
| 威脅等級 | 中危 |
| 影響面 | 一般 |
| 360CERT評分 | 6.8分 |
0x03 影響版本
Apache Struts2:2.0.0-2.5.20
0x04 漏洞詳情
從ParametersInterceptor攔截器開始看,該攔截器對請求的參數進行處理,前面的過程是ActionInvocation對攔截器進行回調處理。
從ActionContext獲取請求中的請求參數,?
此時有四個參數(具體Action構造見參考鏈接):
1. [文件名參數] - 這是用戶已上傳的實際文件。在Action中被設置為“upload”2. [文件名參數]ContentType - 這是上傳的文件的內容類型。在Action中被設置為“uploadContentType”
3. [文件名參數]FileName - 這是上傳的文件的名稱。在Action中被設置為“uploadFileName”
4. [文件名參數].parentFile.writable - 構造的利用poc
這里要注意原始上傳的文件類型是一個File類型。然后會調用setParameters方法:?
參數校驗
然后對所有Parameters的key進行檢測,調用isAcceptableParameter方法。?由于自定義Action不是ParameterNameAware的實現類,于是,parameterNameAware為null,?先調用acceptableName方法。?依次調用isWithinLengthLimit,isExcluded,isAccepted。
isWithinLengthLimit判斷最大長度默認為100。
isExcluded進行表達式正則的檢測,是否包含_memberAccess等字符。?
可以發現,我們的payload沒有包含特殊字符。
繼續跟到DefaultExcludedPatternsChecker#isExcluded,初始化了正則表達式的黑名單。?
最后調用isAccepted,跟到DefaultExcludedPatternsChecker#isAccepted。?
對一些不可見字符做處理。
三個函數調用完之后,就將其put到acceptableParameters?Map里。
繼續往下走,會根據原有的valueStack,創建一個新的valueStack,叫做newStack,之后把前面的幾個對key檢測的正則表達式加到這個新的valueStack里面,?
ognl表達式執行
接著,調用OgnlValueStack.setParameter,這里會執行setValue操作,而執行的過程中就會造成ognl表達式的執行,這里會將root作為參數傳入,而root里保存著Action信息。
payload是一個ognl表達式,由于訪問的是ValueStack的root里的屬性,所有不需要加#就能進行訪問,而這里的upload是我們自定義上傳Action里的File類型。
首先target值是一開始傳入的root里的上傳Action,然后會調用target對應的setter和getter方法。
然后獲取返回的upload,類型為File,此時target被賦值為File,經過AST語法解析,getParentFile的調用棧為:
中間會根據傳入的payload調用getGetMethod,獲取File對象對應的getter,也就是getParentFile。在調用method之前,會進行黑名單的檢測,具體是在com.opensymphony.xwork2.ognl.SecurityMemberAccess#isAccessible方法里進行黑名單檢測,黑名單來自struts-?然后getParentFile的返回值被return,?
依然替換作為target,值還是File,繼續調用setter。?
setWriteable的調用棧為:
執行結果:?接著,后續的上傳都會失效。
版本修復
升級到Struts 2.5.22版本,默認情況下將java.io和java.nio中的類加入黑名單。?
總結
該漏洞總體來說,危害不是很大,但是能夠造成服務器功能失效,對于業務來說,還是具有一定的影響力,該漏洞主要是通過Action的getter方法,獲取到上傳的File類型的filename,再通過ognl執行流,去配合執行File的getter/setter,最終造成文件無法后續上傳,由于我們的ognl表達式不涉及黑名單也不涉及特殊字符,所以不受沙箱的影響。
轉自安全客
歡迎收藏并分享朋友圈,讓五邑人網絡更安全歡迎掃描關注我們,及時了解最新安全動態、學習最潮流的安全姿勢!推薦文章
1
新永恒之藍?微軟SMBv3高危漏洞(CVE-2020-0796)分析復現
2
重大漏洞預警:ubuntu最新版本存在本地提權漏洞(已有EXP)
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的struts2漏洞监测_CVE20190233: S2060 拒绝服务漏洞分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网站运营手册_新媒体代运营模式价格
- 下一篇: 该线程或进程自上一个步骤以来已更改_多线