剛國鏈傳來一個訊息,是有關 Struts 2 的一個重大漏洞,這個漏洞的嚴重性能讓有心人藉由傳遞 URL 的參數來亂搞整台 Server 。

相關文章請參考以下的連結:


簡單來說,這個漏洞主要是透過 OGNL 的語法以及 Struts2/XWork 的 ParametersInterceptor 在將 URL 所含的參數放入 action 的過程中所動的手腳。

一般而言,ParametersInterceptor 會使用 ValueStack.setValue() 方法來將傳入的參數設定到 Action 物件內,而為了避免 Server 端的物件被人篡改,也已經限制傳遞的參數名中出現『#』這個字元,不過測試的結果發現,使用 # 的 java unicode 字串「\u0023」,竟然能夠繞過這個限制,進而修改一些限制 java method 執行的參數值之後,再在最後加上真正要用來破壞的 java 程式碼,如此整台 Server 就曝露在攻擊之下。

至於攻擊字串的寫法,因為在上面的文章連結中都能找得到,再加上我對 OGNL 與 XWORK 不是那麼熟,因此此處就不貼出來了,等之後比較了解這串攻擊字串每一行的意義之後,再加上我還記得這件事的話,再來回頭補上。只是這裏要提醒一下,以上文章內的攻擊語法中的 Java Code:「java.lang.Runtime.getRuntime().exit(1);」若改成「java.lang.Runtime.getRuntime().exec("dos/unix 指令");」破壞力就滿可怕的。

(2010-08-23 補充) 這篇Struts2 與 Webwork 遠程命令執行漏洞分析文章有非常詳細的講解,可以給大家參考參考。

總之,這裏先提出解決的方法,在咕狗大神的幫助下有找到以下幾種解決方式。

  1. .升級到 2.2.1 版 (未測試)
    Struts 2.2.1 版的文件裏已經註明說解決這個問題,但是這篇文章的作者提到在使用還未 release 的 2.2 版時,雖然這個問題已經被解決,但卻也連在頁面的 Tag 上使用「#」語法也被擋掉,但畢竟作者測的是未 release 版本,所以這個解決方法是否會有這個後遺症還得測看看才行。
     
  2. .到 Struts 配置檔內修改 ParameterInterceptor 的設定 (已測試 ok)
    ParameterInterceptor 本身有提供過濾傳入參數名的方法,我們只要將「.*\\u0023.*」這個正則表示式加入即可。
          
        </interceptor-ref name="params">  
            </param name="excludeParams">dojo\..*, .*\\u0023.*<//param>  
        </interceptor-ref>
    

    其中上述的正則表示式指的是內含有「\u0023」的字串。
     
  3. .直接去修改 xwork jar 檔中的 OgnlContextState 類別 (未測試)
    打開 com.opensymphony.xwork2.util.OgnlContextState 類別的原始檔,找出 setDenyMethodExecution 方法

        public static void setDenyMethodExecution(Map context, boolean denyMethodExecution) {
            // 永遠不允許通過 OGNL 來訪問方法。
            setBooleanValue(XWorkMethodAccessor.DENY_METHOD_EXECUTION, context, false); 
        }
    

    也就是在第 3 行固定傳入 false。

    只是這種解法是侵入式的解法較為麻煩,再加上固定傳入 false 是否會造成其他問題也不清楚,所以本鳥不是很推薦用這個方式。
     
  4. .在前端解決
    也就是在 Web Server (如:Apache) 發現傳入的參數帶在 \u0023 時即導向錯誤頁,不再向後轉發到 AP Server。


參考資料:
  .http://www.javaeye.com/topic/720209
  .http://www.zoomhoo.com/thread-908-1-1.html
  .http://www.javaeye.com/topic/713659
  .http://hi.baidu.com/lizhijiemvpmvp/blog/item/0a4bbb8bebe52c1fc9fc7a3a.html
  .http://neeao.com/archives/59/

arrow
arrow
    全站熱搜

    大笨鳥 發表在 痞客邦 留言(0) 人氣()