Spring - SpEL是否容易受到攻击?

时间:2012-04-25 03:39:55

标签: spring security spring-el

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

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

有人可以对此有所了解吗?

2 个答案:

答案 0 :(得分:27)

Aspect Security的发现于2013年1月发现,但SpringSource发布的修复程序在2011年首次发现时提供。 Aspect Security的Dan Amodio向SpringSource通报了远程代码执行的可能性。

SpringSource使用Aspect Security的发现更新了我们的安全报告12-06-2012 - 但原始通报中列出的修复/缓解仍然适用: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)

答案 1 :(得分:3)

查看您所链接的文章可能引用的Aspect Security / Minded Security evaluation of SpELgoogle 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()方法。因此,我们现在拥有客户端提交的代码并在服务器上运行。