【问题标题】:Is Spring - SpEL vulnerable?Spring - SpEL 是否易受攻击?
【发布时间】:2012-04-25 03:39:55
【问题描述】:

我偶然发现了一篇文章Open source library with vulnerabilities

这篇文章指出 “Spring 表达式语言 (SpEL) 可以通过 HTTP 参数提交被利用,这将允许攻击者获取敏感的系统数据、应用程序和用户 cookie。”

请问有人能详细说明一下吗?

【问题讨论】:

    标签: spring security spring-el


    【解决方案1】:

    Aspect Security 的发现是在 2013 年 1 月发现的,但 SpringSource 发布的修复是在 2011 年首次发现时提供的。 Aspect Security 的 Dan Amdio 告知 SpringSource 远程代码执行的可能性。

    SpringSource 在 2012 年 12 月 6 日更新了我们的安全报告,其中包含 Aspect Security 的发现 - 但原始公告中列出的修复/缓解措施仍然适用:http://support.springsource.com/security/cve-2011-2730

    此漏洞仅影响 Spring Framework 版本:

    • 3.0.0 到 3.0.5 -- 升级到 3.0.6 可以解决问题。 • 2.5.0 到 2.5.6.SEC02(社区版本)——在此处升级到 2.5.6.SEC03 可以解决问题。 • 2.5.0 到 2.5.7.SR01(订阅客户)- 在此处升级到 2.5.7.SR02 可以解决问题。

    此问题已在未来的所有版本中得到修复 - SpringFramework 的当前版本为 3.2,于 2012 年 12 月发布。

    谢谢,

    -Pieter (SpringSource)

    【讨论】:

      【解决方案2】:

      查看您链接到的文章可能引用的此 Aspect Security/Minded Security evaluation of SpEL (google docs link)(针对 SpEL 的特定情况)。

      它们描述了某些 spring JSP 标记如何对 EL 表达式进行双重评估。在这些情况下,用户可能会以 SpEL 的形式向服务器提交数据,例如作为请求参数,值为${bean.val}(URL 编码)

      http://...?exp=$%7Bbean.val%7D
      

      在 JSP 页面中,表达式 ${param.exp} 将被解析为文本 ${bean.val},它本身是安全的。但是,如果该表达式位于 spring JSTL 标记的属性中,则可以再次评估该解析值,例如在spring:message 标签中:

      <spring:message message="${param.exp}" />
      

      将导致值${bean.val} 传递给spring:message 标记,该标记将评估bean.getVal() 方法。因此,我们现在有了客户端提交并在服务器上运行的代码。

      【讨论】:

      • 请看下面投票率更高的答案,这是实际答案
      • @blackdrag 谢谢,我已经读过了。这篇文章和 Pieter 都对原始问题“有人可以对此提供更多说明吗?”提供了两个不同的答案。这个答案(现在差不多一年了)希望能提供一些关于漏洞实际上是什么的细节,而 Pieter 的答案描述了 SpringSources 处理它的历史以及解决这个问题的 Spring 版本。 IMO 他们都以不同的方式“阐明”,都是“实际”的答案。
      • 我同意,他们都阐明了这个问题。只是它自 2012 年之前就已修复。最有价值的信息,即该报告在被要求时已经过时,丢失了。这就是为什么我不再认为答案是“实际的”。
      猜你喜欢
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 2016-04-04
      • 2016-04-29
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多