6

最近 Struts 修补了一个漏洞,允许攻击者执行远程代码。显然,不修补这就像给黑帽们一个红地毯般的欢迎。

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 版本和插件。

这将需要一些重构来升级 Struts 2 库,然后需要对这些库进行测试等。

因此,我的问题是是否有人有任何想法阻止此漏洞被执行?这将只有在我们能够升级之前。

我想知道是否可以在针对 OGNL 进行评估之前编写一个拦截器来清理 URL,如果可以,它会缓解这个问题吗?

我的另一个想法是以某种方式使用 Java 安全管理器来停止任意进程调用,这可能吗?它会临时修补这个洞吗?

如果有人认为这是相关的,正在使用的服务器是 jBoss。

4

3 回答 3

2

如果您的应用程序服务器前面有一些 Web 服务器,您可以通过 url 限制访问。在 Apache 中有mod_rewrite可以使用的模块。将RewriteCond指令QUERY_STRING变量设置为某些查询模式并重定向到 dev/null。

于 2013-08-01T08:33:59.953 回答
1

问题与DefaultActionMapper它如何处理特殊参数有关。此类可以扩展为覆盖handleSpecialParameters方法。但是,如果您关闭DMI ,这些特殊参数将不再起作用。使用常量配置

<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
于 2013-08-01T08:50:55.927 回答
0

根据其他评论,如果您在 Tomcat 前使用 Apache,则可以使用此 Apache 配置片段来防止请求到达 Tomcat:

RewriteEngine On
RewriteCond %{QUERY_STRING} java.lang.ProcessBuilder
RewriteRule (.*) - [F]
于 2014-01-07T13:46:36.360 回答