关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回

【安全通告】Spring Framework 远程代码执行漏洞风险通告(CVE-2022-22965)

发布时间:2022-04-01 18:08:12
尊敬的凌梦云用户,您好!
凌梦云安全运营中心监测到, Spring Framework 框架被曝出远程代码执行漏洞,漏洞编号CVE-2022-22965,该漏洞可导致远程写入、执行任意代码等危害。目前已监测到该漏洞存在在野利用,漏洞细节已经被公开传播。
为避免您的业务受影响,凌梦云安全建议您及时开展安全自查,如在受影响范围,请您及时进行更新修复,避免被外部攻击者入侵。
漏洞详情
Spring框架(Framework)是一个开源的轻量级J2EE应用程序开发框架,提供了IOC、AOP及MVC等功能,解决了程序人员在开发中遇到的常见问题,提高了应用程序开发便捷度和软件系统构建效率。
由于Spring框架历史漏洞修复代码存在缺陷,在 JDK 9 及以上版本环境下,远程攻击者可借助Tomcat中间件构造数据包修改日志文件,从而可在任意路径下写入Webshell等恶意文件,最终可导致执行任意代码控制服务器等危害。

据官方说明,目前已被泄漏的漏洞利用主要影响在 JDK 9+ 上运行的 Spring MVC 和 Spring WebFlux 应用程序。漏洞的成功利用需要应用程序作为 WAR 部署在 Tomcat 上运行。(如果应用程序按默认方式部署为 Spring Boot 可执行 jar,则不受到影响,但是不排除其他利用方法)

目前已知触发该漏洞需要满足以下条件:
1.使用 JDK9 及以上版本
2.Apache Tomcat 作为 Servlet 容器
3.打包为 WAR
4.使用 spring-webmvc 或 spring-webflux 的依赖
风险等级
高风险
漏洞风险
攻击者利用该漏洞可导致任意写入文件并远程执行任意代码,漏洞利用难度较低
影响版本
Spring Framework 5.3.X < 5.3.18
Spring Framework 5.2.X < 5.2.20

并且使用了JDK版本 >= 9

排查办法
同时满足以下条件,则受该漏洞影响:

一、检查使用的JDK 版本号:
在业务系统的运行服务器上,执行“java -version”命令查看运行的 JDK 版本(比如显示 java version "17.0.2" 这样的字段,jdk 版本即为 17;java version "1.8.0_91",jdk 版本为 8),如果JDK版本号 < 9,则不受漏洞影响。JDK版本号 >= 9,则在影响范围内.

二、判断是否使用 Spring 相关框架,如未使用则不受影响:
业务系统项目无论以 war 包形式部署运行或以 jar 包的形式独立运行,判断方法类似,可按照如下步骤进行判断:

1) 解压 war/jar 包:将 war/jar 文件的后缀修改成.zip,解压 zip 文件
2) 在解压缩目录下搜索是否存在 spring-beans-*.jar 格式的 jar 文件(如 spring-beans-5.3.11.jar),如存在则说明业务系统使用了 spring 框架进行开发。
3) 如果 spring-beans-*.jar 文件不存在,则在解压缩目录下搜索 CachedIntrospectionResuLts.class 文件是否存在,如存在则说明业务系统使用了 Spring 框架开发。
安全版本
Spring Framework = 5.3.18
Spring Framework = 5.2.20
及基于Spring Framework 5.3.18 的 Spring Boot 2.6.6 、Spring Boot 2.5.12
修复建议
由于漏洞可能存在其他利用方式,可能会扩大影响程度,优先建议升级 Spring Framework 到安全版本

临时方案1:使用 WAF 等防护设备进行拦截或检查


临时方案2:临时修补措施(同时使用,或选择任意一个均可缓解该漏洞):

方法1:
在应用中全局搜索@InitBinder 注解,看看方法体内是否调用 dataBinder.setDisallowedFields 方法,如果发现此代码片段的引入, 则在原来的黑名单中,添加{"class.*","Class. *","*. class.*", "*.Class.*"}。 (注:如果此代码片段使用较多,则需要每个地方都追加)

方法2:
在应用系统的项目包下新建以下全局类,并保证这个类被 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(Ordered.LOWEST_PRECEDENCE)
public class BinderControllerAdvice {

@InitBinder
public void setAllowedFields(WebDataBinder dataBinder) {
String[] denylist = new String[]{"class.*", "Class.*", "*.class.*", "*.Class.*"};
dataBinder.setDisallowedFields(denylist);
}

}

建议参考官方缓解措施:https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement#vulnerability
【备注】:建议您在升级前做好数据备份工作,避免出现意外
漏洞参考

https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement
https://tanzu.vmware.com/security/cve-2022-22965



/template/Home/DawnSP0723/PC/Static

立即注册优维数据账号,免费体验多款产品

立即注册