星巡研究院
CVE-2022-22965critical

Spring4Shell(Spring Framework 数据绑定)

Spring Framework 5.3.0-5.3.17 等版本在 JDK 9+ 下,攻击者可通过数据绑定访问类加载器相关属性,进而写入可执行页面。

# CVE-2022-22965 · Spring4Shell ## 基本信息 - 编号:CVE-2022-22965 - 组件:Spring Framework 5.3.0 至 5.3.17、5.2.0 至 5.2.19 - 触发条件:JDK 9 及以上 + Spring MVC / WebFlux + 参数绑定到非基础类型 - 严重度:critical ## 问题成因 Spring 的数据绑定会按请求参数名去访问对象属性。在 JDK 9+ 上,参数名可以被完整获取,攻击者据此构造嵌套参数名,访问到类加载器相关的访问日志属性,把请求内容写成一个 JSP 文件,之后访问该文件即执行。 ## 为什么难防 - 触发依赖运行时 JDK 版本与模块组合,不是升一个包就完事 - 入口看起来完全是正常的表单参数,WAF 难以做语义判断 ## 修复与缓解 1. 升级 Spring Framework 到 5.3.18 / 5.2.20 及以上 2. 同时升级依赖 Spring 的中间件到官方建议版本 3. 在 WAF 上临时拦截含有类加载器特征串的参数名 4. 部署后检查 Web 目录下是否出现非预期的新文件 ## 常见坑 - 只升了 spring-core,漏了 spring-beans / spring-webmvc - 只看版本号,没确认实际运行在 JDK 9+ 上 - 修补后没有排查是否已被写入过页面文件 ## 怎么验证 在测试环境用数据绑定访问一个不存在的嵌套属性,确认返回参数绑定错误而非类加载器信息。
#spring#java#rce