Apache Struts 2 2.3.32以及2 2.3.x版本及Apache Struts2.5.10.1之前的的
Jakarta Multipart解析器上传文件功能存在高危漏洞,该漏洞根源是网站程序代码
里没有正确处理上传的文件。导致黑客可以通过POST构造HTTP请求头中的Content-
Type数值,来执行远程恶意代码,S2-046与S2-045漏洞利用的是同样的上传功能变量
,基本上可以通杀两个版本。
影响Apache Struts2的最新远程执行恶意代码漏洞(RCE)。SINE安全工程师对此进
行了详细的安全审计,通过对POST请求中的Content-Type头,来跟大家介绍Struts2
漏洞攻击的细节。Apache Struts2漏洞分析和了解代码错误导致的危害性。
在实战模拟情况下,我们对其中一个客户的网站进行网站安全检测,检测时发现
Struts2漏洞,在对网站渗透测试的时候,除了利用已知的攻击向量漏洞之外,还可
以通过POST数据到Content-类型头,Sine安全公司是一家专注于:服务器安全、网站安
全、网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务提供商。
全、网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务提供商。
使用JakartaStreamMultipartRequest,这个代码的意思是需要将Struts2应用程序配置
为使用不是默认的Jakarta功能。检查Struts2配置文件中的以下配置:
<constant name =“struts.multipart.parser”value =“jakarta-stream”/>
由Content-Length头指定的上传文件的大小大于Struts2的最大允许大小(2GB)
文件名包含一个OGNL有效引擎。
关于OGNL引擎
OGNL(Object Graph Navigation Language)即对象图形导航语言,是一个开源的表
达式引擎。使用OGNL,你可以通过某种表达式语法,存取Java对象树中的任意属性、调
用Java对象树的方法、同时能够自动实现必要的类型转化。如果我们把表达式看做是一
个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与Java对象之间沟通的桥
梁。我们可以轻松解决在数据流转过程中所遇到的各种问题。
达式引擎。使用OGNL,你可以通过某种表达式语法,存取Java对象树中的任意属性、调
用Java对象树的方法、同时能够自动实现必要的类型转化。如果我们把表达式看做是一
个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与Java对象之间沟通的桥
梁。我们可以轻松解决在数据流转过程中所遇到的各种问题。
Struts2 利用的是OGNL引擎,OGNL引擎在Struts2中是很牛B的,使用的范围也比较
广,所以在使用过程中,也发现了诸多的网站安全问题。黑客可以通过构造恶意参数的
数据带入OGNL表达式中去,就可以被OGNL解析并执行恶意的代码,而OGNL引擎也可
以用来获取和设置当前的Java对象的属性,也可以对服务器系统windows Linux对象进
行修改,所以只要绕过Struts2的一些安全策略,黑客甚至可以执行系统命令进行系统攻
击。Sine安全公司是一家专注于:服务器安全、网站安全、网站安全检测、网站漏洞修
复,渗透测试,安全服务于一体的网络安全服务提供商。
广,所以在使用过程中,也发现了诸多的网站安全问题。黑客可以通过构造恶意参数的
数据带入OGNL表达式中去,就可以被OGNL解析并执行恶意的代码,而OGNL引擎也可
以用来获取和设置当前的Java对象的属性,也可以对服务器系统windows Linux对象进
行修改,所以只要绕过Struts2的一些安全策略,黑客甚至可以执行系统命令进行系统攻
击。Sine安全公司是一家专注于:服务器安全、网站安全、网站安全检测、网站漏洞修
复,渗透测试,安全服务于一体的网络安全服务提供商。
Struts 漏洞修复建议
严格的过滤 Content-Type 、filename里的内容,禁止ognl引擎表达式相关字段。
使用Jakarta的插件的用户,请立刻更新Apache Struts 2.3.32或2.5.10.1版本。