2013-08-01 36 views
6

最近,struts修補了一個漏洞,允許攻擊者執行遠程代碼。顯然,不打補丁,這是想給黑帽子與花車紅地毯歡迎: -/Struts 2 S2-016虛擬化緩解直到升級

http://struts.apache.org/release/2.3.x/docs/s2-016.html

基本上它允許攻擊命令執行這樣的:

正統劇動作:http://host/struts2-showcase/employee/save.action?redirect:%25{3*4} 剝削行動: http://host/struts2-showcase/employee/save.action?redirect:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}

雖然我知道升級應儘快完成,但儘快我們的代碼庫會使用舊的struts版本和插件,這意味着一段時間。

,這將需要一些重構升級撐杆2個庫,那麼那些需要進行測試等

我的問題是爲此是否有人有任何想法,以阻止執行此漏洞?這隻會在我們能夠升級之前。

我想知道在對OGNL進行評估之前是否可以編寫一個攔截器來清理URL,如果可以,它會緩解這個問題嗎?

我的其他想法是以某種方式使用Java安全管理器來阻止任意進程調用,這可能嗎?它會暫時修補這個洞嗎?

正在使用的服務器是jBoss,如果有人認爲這是相關的。

+0

你有一些服務器在你的jBoss之前,Apache可能?如何限制訪問某些uri-s。 –

+0

你的意思是負載平衡器或具有URL限制功能的防火牆的東西? – Thihara

+0

那還是一個反向代理,就像Apache一樣。 –

回答

1

該問題與DefaultActionMapper有關,以及它如何處理特殊參數。該類可以擴展爲覆蓋handleSpecialParameters方法。但是,如果關閉DMI,這些特殊參數將不再起作用。使用常量配置

<constant name="struts.enable.DynamicMethodInvocation" value="false"/> 
+0

不幸的是,我們在至少40%的ajax調用中使用了DMI ......我將探索重寫選項,儘管...... – Thihara

+1

將您自己的動作映射器暴露給struts容器,[docs](http: Apache網站上的//struts.apache.org/release/2.3.x/docs/actionmapper.html#ActionMapper-CustomActionMapper)完全描述瞭如何做到這一點。 –

+0

@Thihara:創建自定義'DefaultActionMapper'需要測試,不是嗎? –

2

如果您的應用程序服務器前面有一些Web服務器,則可以通過url限制訪問。在Apache中有mod_rewrite模塊,您可以使用。設置RewriteCond指令QUERY_STRING變量爲某些查詢模式並重定向到dev/null。

0

按照其他評論,如果你是在Tomcat中的前使用Apache,你可以使用這個Apache的配置片段,以防止請求到達的Tomcat:

RewriteEngine On 
RewriteCond %{QUERY_STRING} java.lang.ProcessBuilder 
RewriteRule (.*) - [F]