瑞星发布紧急安全警报:Struts 2再爆高危远程漏洞

2017-03-07   

2017年3月7日,瑞星安全研究院对外发布紧急安全警报,Apache Struts 2被曝存在高危远程命令执行漏洞,漏洞编号为S2-045,CVE编号CVE-2017-5638。

2017年3月7日,瑞星安全研究院对外发布紧急安全警报,Apache Struts 2被曝存在高危远程命令执行漏洞,漏洞编号为S2-045,CVE编号CVE-2017-5638。据介绍,本次爆出的漏洞触发点主要存在使用基于Jakarta插件的文件上传功能,经过瑞星安全专家验证,该漏洞可直接执行系统命令,一旦被黑客执行恶意破坏命令,可能对服务器造成的是永久性破坏。瑞星提醒广大网站运维人员,及时验证漏洞情况,及时采取有效防范措施,以免遭受严重影响。

Struts是Apache基金会Jakarta项目组的一个开源项目,它采用MVC 模式,帮助java开发者利用J2EE开发 Web 应用。目前,Struts广泛应用于大型互联网企业、政府、金融机构等网站建设,并作为网站开发的底层模板使用。因此,瑞星安全专家再次提醒广大网站管理员,尽快将Struts 2升级到安全版本。

早在2013年,瑞星就率先公布Struts 2的高危漏洞,并提供应急响应安全服务。针对此次的S2-045,广大网站管理员可以尽快升级,如有问题可以随时与瑞星公司进行联系,获取帮助。针对该漏洞目前造成的影响,瑞星会持续跟进,并及时向社会公布结果。

漏洞详情

漏洞编号:S2-045

CVE编号:CVE-2017-5638

漏洞类型:远程代码执行

漏洞级别:高危

漏洞风险:黑客通过利用漏洞可以实现远程命令执行。

影响版本:struts2.3.5– struts2.3.31 , struts2.5–struts2.5.10。

漏洞描述:攻击者可在上传文件时通过修改HTTP请求头中的Content-Type值来触发该漏洞,进而执行系统命令

漏洞分析

漏洞存在的文件

\core\src\main\java\org\apache\struts2\dispatcher\multipart\MultiPartRequestWrapper.java

\core\src\main\java\org\apache\struts2\dispatcher\multipart\JakartaMultiPartRequest.java

\core\src\main\java\org\apache\struts2\dispatcher\multipart\JakartaStreamMultiPartRequest.java

修复方法

if (LocalizedTextUtil.findText(this.getClass(), errorKey, defaultLocale, null, new Object[0]) == null) { return LocalizedTextUtil.findText(this.getClass(), "struts.messages.error.uploading", defaultLocale, null, new Object[] { e.getMessage() }); } else { return LocalizedTextUtil.findText(this.getClass(), errorKey, defaultLocale, null, args); }

漏洞利用条件

1. 基于Jakarta(Jakarta Multipart parser)插件的文件上传功能

2. 恶意攻击者构造Content-Type的值

修复建议

1. 修复Jakarta文件上传插件或者是存在漏洞的Struts 2版本请升级至Struts2安全版本

2. 通过Servlet过滤器验证Content-Type值

3. 添加waf规则进行拦截恶意攻击

参考文档

https://cwiki.apache.org/confluence/display/WW/S2-045

https://github.com/apache/struts

瑞星验证结果

瑞星针对部分授权用户,通过使用struts默认扩展*.action进行搜索,从搜索结果中随机选出url进行漏洞验证。从案例返回的结果信息中可以看出通过该漏洞可直接执行系统命令,从命令执行反馈的结果可以看出很多的网站都是基于root(linux系统最高权限用户)权限运行,一旦执行恶意破坏命令如:rm删除命令,可对服务器造成的是永久性破坏。


[责任编辑:瑞瑞]