补丁发布!Spring Framework 远程代码执行漏洞
0x01事件概述
360漏洞云近日监测到Spring框架中存在一个严重的远程代码执行漏洞,该漏洞影响Jdk 9.0以上版本的Spring框架及其衍生框架,包括但不限于Spring Cloud、Spring Boot等。此漏洞利用方式简单,危害严重,Spring官方已针对此漏洞发布新版本,建议用户尽快升级版本或采取其他防护措施,避免受到该漏洞的攻击。
漏洞细节 漏洞POC 漏洞EXP 在野利用 公开 公开 公开 存在 |
0x02漏洞描述
Spring框架(Framework)是一个开源的轻量级J2EE应用程序开发框架,提供了IOC、AOP及MVC等功能,解决了程序人员在开发中遇到的常见问题,提高了应用程序开发便捷度和软件系统构建效率。
Spring框架或其衍生框存在一个严重的远程代码执行漏洞,由于Spring框架存在处理流程缺陷,攻击者可在远程条件下,实现对目标主机的后门文件写入和配置修改,继而通过后门文件访问获得目标主机权限。使用Spring框架或衍生框架构建网站等应用,且同时使用JDK版本在9及以上版本的,易受此漏洞攻击影响。
经 360 漏洞云安全专家研判,Spring是当今使用最为广泛的 J2EE 框架Spring 及其衍生框架的全球部署数量超千万,排名靠前的国家为中国和美国。受漏洞影响的是 Spring Framework,任何引用Spring Framework的框架均受此漏洞影响。包括但不限于 Spring Boot、Spring Cloud、Spring Data、Spring Security等。这些框架的用户涵盖了政府、银行、医院、学校、电商等众多部门和行业。由于此漏洞利用方式简单,受漏洞影响的服务发布广泛,漏洞影响极其严重。
Spring Framework 远程代码执行漏洞 漏洞编号 CVE-2022-22965 漏洞类型 远程代码执行 漏洞等级 严重(10.0) 公开状态 已公开 在野利用 存在 漏洞描述 Spring Framework存在远程代码执行漏洞,在 JDK 9 及以上版本环境下,远程攻击者可利用该漏洞写入恶意代码导致远程代码执行漏洞。引用Spring框架的Spring衍生框架均受此漏洞影响。 |
0x03影响版本
- Spring Framework 5.3.X < 5.3.18
- Spring Framework 5.2.X < 5.2.2
且所在运行环境为JDK9及以上版本
0x04排查方法
- JDK 版本号排查
在业务系统的运行服务器上,执行“java -version”命令查看运 行的 JDK 版本,如果版本号小于等于 8,则不受漏洞影响。
- Spring 框架使用情况排查
1. 如果业务系统项目以 war 包形式部署,按照如下步骤进行判断。
- 解压 war 包:将 war 文件的后缀修改成.zip ,解压 zip 文件
- 在解压缩目录下搜索是否存在 spring-beans-.jar 格式的 jar 文 件(例如 spring-beans-5.3.16.jar),如存在则说明业务系统使用了 spring 框架进行开发。
- 如果 spring-beans-.jar 文件不存在,则在解压缩目录下搜索CachedIntrospectionResuLts.class 文件是否存在,如存在则说明业 务系统使用了 Spring 框架开发。
2. 如果业务系统项目以 jar 包形式直接独立运行,按照如下步骤进行 判断。
- 解压 jar 包:将 jar 文件的后缀修改成.zip,解压 zip 文件。
- 在解压缩目录下搜索是否存在 spring-beans-.jar 格式的 jar 文件 (例如 spring-beans-5.3.16.jar),如存在则说明业务系统使用了 spring 框架进行开发。
- 如果 spring-beans-.jar 文件不存在,则在解压缩目录下搜索 CachedIntrospectionResuLts.class 文件是否存在,如存在则说明业 务系统使用了 spring 框架进行开发。
0x05漏洞复现
2022年3月30日,360漏洞云安全专家已第一时间复现上述漏洞,演示如下:
CVE-2021-22965
完整POC代码已在360漏洞云情报平台(https://loudongyun.360.cn/)发布,360漏洞云情报平台用户可通过平台下载进行安全自检。
0x06修复建议
官方修复建议
目前,Spring官方已经在5.2.20,5.3.18版本修复上述漏洞,用户请及时升级到安全版本。
https://github.com/spring-projects/spring-framework/tags
临时修复建议
- 使用WAF缓解
用户请根据实际部署业务的流量情况,在WAF或其他网络防护设备上实现对"classLoader.","class.module.*","class.","Class.",".class.",".Class.", 等字符串的规则过滤,请注意其中流量特征 "class.module.*" 对大小写不敏感。用户注意在部署规则后,对业务允许情况进行测试,避免产生额外影响。
- 其他临时缓解措施
全局搜索 @InitBinder注解,判断方法体内是否有dataBinder.setDisallowedFields方法,如果有使用则在原来的黑名单中添加:{"class.","Class.",".class.",".Class."} (注:如果此代码片段使用较多,需要每个地方都追加)
在应用系统的项目包下新建以下全局类,并保证这个类被Spring 加载到(推荐在Controller 所在的包中添加)。完成类添加后,需对项目进行重新编译打包和功能验证测试。并重新发布项目。
import org.springframework.core.annotation.Order;import org.springframework.web.bind.WebDataBinder;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.InitBinder;@ControllerAdvice@Order(10000)public class GlobalControllerAdvice{ @InitBinder public void setAllowedFields(webdataBinder dataBinder){ String[]abd=new string[]{"class.","Class.",".class.",".Class."}; dataBinder.setDisallowedFields(abd); }}
与此同时,请做好资产自查以及预防工作,以免遭受黑客攻击。
