Apache Struts 2 远程代码执行漏洞
Apache Struts 2 是一个基于 MVC 设计模式的 Web 应用框架。其官方在 8 月 13 号发出安全通告,声明对其存在的一个远程代码执行漏洞进行修复:
https://cwiki.apache.org/confluence/display/WW/S2-059
该漏洞编号为 S2-059,CVE 编号为 CVE-2019-0230,由来自 Apple 安全研究团队的 Matthias Kaiser 报告。
漏洞描述
Apache Struts 2 会对某些标签属性(比如 id)的属性值进行二次表达式解析,因此在某些场景下将可能导致远程代码执行。
此问题仅适用于当在 Struts 标签属性内强制进行 OGNL 表达式解析时的情况,比如如下写法:
<s:url var="url" namespace="/employee" action="list"/><s:a
id="%{skillName}" href="%{url}">List available Employees</s:a>
如果攻击者能够在请求中控制 skillName
属性值且应用未对其进行检查校验,则攻击者可以直接传入一个 OGNL 表达式,那么最终当标签渲染的时候,skillName
的表达式就会因为二次解析而被执行。
影响范围
-
Struts 2.0.0 - Struts 2.5.20
解决方案
根据官方公告,最好的解决方法是对每一个标签属性的传入值进行安全校验,并且不应该在除了 value 以外的其他属性值中使用 %{...} 或 ${...} 进行表达式解析。
也可以将 Struts 升级到 2.5.22 版本对此漏洞进行缓解。
产品支持
雷池内置语法引擎默认支持检测 OGNL 表达式注入攻击,请确保雷池相关配置项开启。
参考资料
-
https://cwiki.apache.org/confluence/display/WW/S2-059
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论