【问题标题】:Struts 2 S2-016 Vulenerability Mitigation Till UpgradeStruts 2 S2-016 漏洞缓解直到升级
【发布时间】:2013-08-01 03:38:23
【问题描述】:

最近 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。

【问题讨论】:

  • 你的 jBoss 前面有一些服务器,也许是 apache?限制对其中某些 uri-s 的访问怎么样。
  • 您的意思是负载均衡器或具有 URL 限制功能的防火墙?
  • 那个或反向代理,如 Apache。

标签: java security struts2 dmi


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 不幸的是,我们在至少 40% 的 ajax 调用中使用 DMI...不过我将探索覆盖选项....
    • 将您自己的动作映射器暴露给 struts 容器,Apache 网站上的 docs 完美地描述了如何做到这一点。
    • @Thihara:创建自定义 DefaultActionMapper 也需要测试,不是吗?
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-16
      • 1970-01-01
      • 2022-01-17
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 2022-01-19
      相关资源
      最近更新 更多