首页/安全/漏洞与攻击面速查/Spring4Shell(CVE-2022-22965)处置要点
漏洞基础与评分46 条

Spring4Shell(CVE-2022-22965)处置要点

Spring Framework 在特定部署条件(JDK 9+、以 WAR 部署在 Tomcat 等场景)下存在数据绑定可控导致远程代码执行的风险;修复版本为 5.3.18 与 5.2.20(对应 Spring Boot 2.6.6 / 2.5.12)。

漏洞与攻击面速查安全更新于 2026-10-13

Spring4Shell 是什么

CVE-2022-22965(业内称 Spring4Shell)是 Spring Framework 在特定部署条件下的数据绑定问题:当应用以特定方式打包部署、且接口把用户输入绑定到对象属性时,攻击者可以通过构造参数访问到类加载器相关的属性,进而写入文件并最终执行代码。它的特殊性在于「条件依赖」——并非所有使用 Spring 的应用都受影响,与 JDK 版本、打包方式(WAR 部署在 Servlet 容器中等)密切相关,因此处置时要先判断自身部署形态,再决定升级优先级。

基本信息

CVE 编号CVE-2022-22965
影响范围Spring Framework <5.3.18、<5.2.20(需满足特定条件)
修复升级到 5.3.18 / 5.2.20 或更高
缓解数据绑定拒绝 class 相关敏感字段
排查列出所有 Spring 应用的框架版本与部署形态
前后条件与 JDK 版本和打包部署方式相关,需按实际环境判断

处置步骤

  • 清点所有使用 Spring Framework 的应用与其版本
  • 判断部署形态与 JDK 版本,确认是否落在受影响条件内
  • 升级到修复版本,使用 BOM 统一管理依赖版本
  • 无法立即升级时先应用官方建议的绑定限制缓解措施
  • 验证:确认运行进程加载的框架版本已更新,并回归关键接口
  • 记录:把版本、部署形态与验证结论挂回编号,便于审计

版本检查

版本检查
grep -R "spring-webmvc\|spring-core" pom.xml build.gradle
grep -R "spring.version" -n . | head
# 运行进程侧核对:确认实际加载的 JAR 版本
# 使用 Spring Boot 时注意 BOM 版本:spring-boot-dependencies 决定实际引入版本

官方缓解(参数绑定限制)

官方缓解(参数绑定限制)
@ControllerAdvice
public class BindingControllerAdvice {
    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.setDisallowedFields("class.*", "Class.*", "*.class.*", "*.Class.*");
    }
}
// 该措施是临时缓解,升级框架版本仍是根治手段
// 部署后回归接口参数绑定功能,确认正常字段未受影响

处置方式对照

方式适用情况局限
升级框架所有可升级场景需回归测试与发布窗口
绑定限制缓解无法立即升级临时手段,按需跟踪到升级完成
出站与 WAF 规则争取时间的补充规则覆盖有限,不能作为长期方案
仅部分部署形态受影响;即便如此也建议升级,后续版本还包含其他加固。

易错点

  • 只升 spring-core 不升 webmvc 等一系列组件:用 BOM(spring-boot-dependencies)统一版本更稳妥
  • 不看部署形态直接全量应急:会造成不必要的发布风险,应先判断受影响条件
  • 只做绑定限制不升级:缓解措施在后续依赖调整后可能失效,需跟踪到根治
  • 升级后不回归接口:参数绑定行为变化可能影响正常业务功能
  • 忽略依赖树中的传递版本:直接依赖升级了,传递依赖可能仍指向旧版本
  • 忘记运行进程核对:构建产物更新了但部署未生效的情况需要单独检查

数据来源与参考

  • Spring 官方安全公告(spring.io/security)
  • NVD CVE-2022-22965 记录
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌