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

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值来触发该漏洞,进而执行系统命令

漏洞分析


漏洞存在的文件
1. \core\src\main\java\org\apache\struts2\dispatcher\multipart\MultiPartRequestWrapper.java
2. \core\src\main\java\org\apache\struts2\dispatcher\multipart\JakartaMultiPartRequest.java
3. \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删除命令,可对服务器造成的是永久性破坏。






最后编辑麦青儿 最后编辑于 2017-03-07 17:32:34