本帖最后由 瑞星工程师 于 2017-3-7 16:27 编辑
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(JakartaMultipart 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删除命令,可对服务器造成的是永久性破坏。
|