Struts2再爆遠程代碼執行漏洞

摘要 

Apache官方的struts2產品,最近出了一個遠程代碼執行漏洞,編號“S2-013”,目前是0DAY,官方沒有修補方案出現。
http://struts.apache.org/development/2.x/docs/security-bulletins.html — (公告) 

官方安全公告給出了編號和簡要介紹

“A vulnerability, present in the includeParams attribute of the URL and Anchor Tag, allows remote command execution”

但是並沒有說原理,也沒有發佈任何補丁。 

分析 

事實上,這次struts2官方一共發了兩個漏洞,還有個叫s2-012,但是這個漏洞,看題目,應該是我之前在《Xcon2012 攻擊JAVA WEB》時的已經爆出來了,所以本文只說另一個。
struts2官方的開發傻乎乎的,比如這個漏洞,要麼官方就不要發出來,既然發出來了,就應該發補丁,但是官方僅僅發了這段話,對於詳細內容,普通用戶不開放訪問。

從這段話可以大致總結一下幾點:

1、未修補的遠程代碼執行漏洞
2、includeParams參數在URLTAG中出現了問題。

僅根據這兩點,熟悉struts2運行機制和之前漏洞原理的人,都可以輕易分析出具體利用POC。

漏洞觸發:

由於官方沒有發補丁,所以最新版本的struts2還是有漏洞的,可以下載最新:Apache Struts 2.3.14 GA的示例應用。

經過簡單測試,就看到了想要的結果。 

根據官方給的信息,問題出在a標籤,所以寫個jsp頁面,內容如下:

<s:a includeParams="all">Click here.</s:a>

這個是struts2標籤庫的a標籤,該標籤會在頁面上顯示當前URL,當includeParams=all時,就會顯示具體參數內容。 
唯一需要解的迷,就是如何讓參數內容作爲OGNL表示試執行,但是這個迷未免太好猜了,我隨手測試就出結果。
訪問url:

http://localhost:8080/blank/error.jsp?aaa=${struts2的常用POC,你懂得}

就可以直接彈計算器,POC代碼大家都有的,我只截個圖:

幾乎沒有什麼分析過程,就拿到了POC,最終爲了研究修補方案,只好被迫研究了漏洞原理。

漏洞原理:

Struts2標籤庫中的url標籤和a標籤的includeParams這個屬性,代表顯示請求訪問參數的含義,一旦它的值被賦予ALL或者GET或者POST,就會顯示具體請求參數內容。按照正常的需求,把參數urlEncode一下也就夠了, 問題在於,struts竟然多做了一步,這丫把參數做了OGNL解析!

代碼:

     package org.apache.struts2.views.uti.DefaultUrlHelper這個class的parseQueryString方法。
           public Map<String, Object> parseQueryString(String queryString, boolean forceValueArray) {
        Map<String, Object> queryParams = new LinkedHashMap<String, Object>();
        if (queryString != null) {
            ......
                    if (paramName != null) {
                        paramName = translateAndDecode(paramName);
                        String translatedParamValue = translateAndDecode(paramValue);
              ......
       translateAndDecode會調用
           private String translateVariable(String input) {
        ValueStack valueStack = ServletActionContext.getContext().getValueStack();
        return TextParseUtil.translateVariables(input, valueStack);
           }

最終TextParseUtil.translateVariables會直接調用OGNL解析執行。


漏洞修補:

等官方吧,我反正不急的。或者有好人轉發時,請順便寫上方案。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章