Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Struts 2 S2-016漏洞缓解措施,直至升级_Java_Security_Struts2_Dmi - Fatal编程技术网

Java Struts 2 S2-016漏洞缓解措施,直至升级

Java Struts 2 S2-016漏洞缓解措施,直至升级,java,security,struts2,dmi,Java,Security,Struts2,Dmi,最近Struts修补了一个漏洞,允许攻击者执行远程代码。显然,不修补这一点就像是用一辆马车在红地毯上欢迎黑帽子一样 基本上,它允许如下方式执行攻击命令: 合法行动: http://host/struts2-showcase/employee/save.action?redirect:%25{3*4} 行动: http://host/struts2-showcase/employee/save.action?redirect:%25{(new+java.lang.ProcessBuilder(n

最近Struts修补了一个漏洞,允许攻击者执行远程代码。显然,不修补这一点就像是用一辆马车在红地毯上欢迎黑帽子一样

基本上,它允许如下方式执行攻击命令:

合法行动:

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是相关的,那么所使用的服务器就是jBoss。

如果你的应用服务器前面有一些web服务器,你可以通过url限制访问。在Apache中有一个可以使用的模块。将
RewriteCond
指令
QUERY\u STRING
变量设置为某个查询模式并重定向到dev/null。

问题与
DefaultActionMapper
以及它如何处理特殊参数有关。此类可以扩展为重写
handleSpecialParameters
方法。但是,如果禁用这些特殊参数,这些参数将不再工作。使用常量配置

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

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

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

你的jBoss前面有服务器吗,也许是apache?限制对其中某些uri-s的访问如何?你指的是负载平衡器或具有URL限制功能的防火墙?或者是像Apache这样的反向代理。不幸的是,我们在至少40%的ajax调用中使用DMI。。。不过,我将探讨覆盖选项……将您自己的操作映射器公开到struts容器中,Apache站点上的操作映射器完美地描述了如何做到这一点。@Thihara:创建自定义
DefaultActionMapper
也需要测试,不是吗?