Struts 2 S2-016 Vulenerability Mitigation升级
最近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,如果有人认为这是相关的。
问题与DefaultActionMapper
及其处理特殊参数的方式有关。 可以扩展handleSpecialParameters
以覆盖handleSpecialParameters
方法。 但是,如果关闭DMI,这些特殊参数将不再起作用。 使用常量配置
如果您的应用程序服务器前面有一些Web服务器,则可以通过URL限制访问。 在Apache中,您可以使用mod_rewrite
模块。 将RewriteCond
指令QUERY_STRING
变量设置为某个查询模式并重定向到dev / null。
根据其他评论,如果您在Tomcat之前使用Apache,则可以使用此Apache配置片段来阻止请求到达Tomcat:
RewriteEngine On RewriteCond %{QUERY_STRING} java.lang.ProcessBuilder RewriteRule (.*) - [F]