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

Aha*_*a M 8 security spring spring-el

我遇到了一篇有漏洞的文章开源库.

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

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

Pie*_*rey 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)


kro*_*ock 3

查看SpEL 的Aspect Security/Minded Security评估(google 文档链接),您链接到的文章可能指的是该文章(针对 SpEL 的具体情况)。

它们描述了某些 Spring JSP 标签如何双重计算 EL 表达式。在这些情况下,用户可以以 SpEL 的形式向服务器提交数据,例如作为带有值的请求参数${bean.val}(URL 编码)

http://...?exp=$%7Bbean.val%7D
Run Code Online (Sandbox Code Playgroud)

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

<spring:message message="${param.exp}" />
Run Code Online (Sandbox Code Playgroud)

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

  • 请参阅下面投票率更高的答案,这是实际的答案 (2认同)