一、简述
Spring 框架(含 Spring Boot)是 Java 生态最主流的 Web 开发框架,其安全漏洞以远程代码执行(RCE)、SpEL 注入、路径遍历、未授权访问、反序列化为主,高危漏洞常被大规模利用(如 Log4j 级别的 Spring4Shell)。
二、高危核心漏洞(RCE / 注入类)
1. Spring4Shell(CVE-2022-22965)
- 威胁等级 :严重(CVSS 9.8)
- 影响:Spring Framework 5.3.0--5.3.17、5.2.0--5.2.19;JDK 9+;Spring MVC/WebFlux
- 原理 :通过构造恶意请求参数,触发ClassLoader 加载恶意类,实现远程代码执行(RCE)
- 修复 :升级至 5.3.18+ / 5.2.20+ ;或添加
@ControllerAdvice全局参数绑定过滤
2. SpEL 表达式注入(CVE-2018-1273 等)
- 威胁等级 :严重
- 影响:Spring Data Commons、Spring Data REST 旧版
- 原理 :未过滤的用户输入被直接解析为SpEL 表达式,执行任意代码
- 修复 :升级组件;使用
SimpleEvaluationContext替代StandardEvaluationContext;严格白名单过滤
3. SnakeYaml 反序列化 RCE(Spring Cloud)
- 威胁等级 :严重
- 影响:Spring Cloud Config、Spring Boot 旧版(依赖 SnakeYaml)
- 原理 :恶意 YAML 配置被反序列化,触发JNDI 注入 / 类加载
- 修复 :升级 SnakeYaml 至 2.0+;禁用
ALLOW_DUPLICATE_KEYS;禁止解析外部 YAML
4. JNDI 注入(CVE-2021-21234 等)
- 威胁等级 :严重
- 影响:Spring Boot 旧版、Spring Integration 等
- 原理 :通过
java:comp/env/、ldap://等协议,加载远程恶意类 - 修复 :升级框架;禁用 JNDI lookup ;限制
java.net.URLClassLoader
三、路径遍历 / 信息泄露
1. Spring Framework 路径遍历(CVE-2024-xxxx)
- 威胁等级 :高
- 影响:5.3.0--5.3.40、6.0.0--6.0.24、6.1.0--6.1.13(WebMvc.fn / WebFlux.fn)
- 原理 :
../绕过路径校验,读取服务器任意文件(如/etc/passwd、application.properties) - 修复 :升级至 5.3.41+ / 6.0.25+ / 6.1.14+
2. Spring Boot Actuator 未授权访问
-
威胁等级 :高
-
影响 :默认配置暴露
/env、/heapdump、/mappings等敏感端点 -
危害 :泄露数据库密码、JVM 内存、API 路由,常被作为 RCE 跳板
-
修复 :
bash# 仅暴露必要端点 management: endpoints: web: exposure: include: health,info,metrics endpoint: health: show-details: when-authorized security: enabled: true配合 Spring Security 做角色鉴权
3. HeapDump 敏感信息泄露
- 威胁等级 :高
- 影响 :Actuator
/heapdump未授权访问 - 危害 :内存转储中提取数据库连接串、API 密钥、会话 Token
- 修复 :禁用
heapdump端点;或严格鉴权 + IP 白名单
四、反序列化漏洞(Spring 生态常见)
1. 通用反序列化风险
- 影响:Spring MVC、Spring Security、Spring Session 等
- 原理 :未校验的序列化数据(如
java.io.Serializable、JSON/XML)被反序列化,触发恶意代码 - 高危场景 :
- Redis Session 反序列化
- RabbitMQ/Kafka 消息反序列化
- 自定义
HttpMessageConverter
- 修复 :
- 升级 Jackson 至 2.12+,启用
DefaultTyping白名单 - 禁用
java.lang.Class、java.net.URL等危险类反序列化 - 使用安全序列化库(如 Kryo、Protobuf)替代 Java 原生序列化
- 升级 Jackson 至 2.12+,启用
五、配置 / 权限类漏洞
1. 敏感配置明文泄露
- 危害 :
application.properties/bootstrap.yml中数据库密码、API 密钥、JWT 密钥硬编码或未加密 - 修复 :
- 使用Jasypt加密配置(Spring Boot 推荐)
- 接入 Nacos/Apollo 配置中心,加密存储敏感项
- 禁止将配置文件提交到 Git(添加
.gitignore)
2. CORS 配置不当
-
危害 :
allowedOrigins: *或未校验 Origin,导致跨域请求伪造(CSRF)、敏感数据泄露 -
修复 :
java@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("https://your-domain.com") // 明确白名单 .allowedMethods("GET", "POST") .allowCredentials(true) .maxAge(3600); } }
3. CSRF 未启用
- 危害 :Spring Security 默认仅对非 GET 请求启用 CSRF,自定义接口易被伪造
- 修复:全局启用 CSRF,或对敏感接口(转账、修改密码)强制校验 Token
六、Spring 框架漏洞修复与加固最佳实践
1. 版本升级(最有效)
- 核心框架:Spring Framework 5.3.41+ / 6.0.25+ / 6.1.14+
- Spring Boot:2.7.18+ / 3.0.13+ / 3.1.10+ / 3.2.4+
- 第三方依赖:Jackson、SnakeYaml、Logback 等同步升级
2. 输入校验与过滤(第一道防线)
- 所有用户输入 :参数、路径、请求体、Header 做白名单校验
- SpEL:禁用动态解析;使用
SimpleEvaluationContext - 文件上传:校验后缀、MIME、文件大小;存储到非 Web 目录
- 路径访问:绝对禁止 使用
../、./等相对路径
3. Actuator 安全加固(必做)
- 仅暴露
health、info、metrics等非敏感端点 - 启用 Spring Security,配置
ACTUATOR角色访问 - 生产环境禁用
env、heapdump、trace、mappings
4. 反序列化防护
- 禁用 Java 原生序列化,优先使用 JSON/Protobuf
- Jackson:启用
@JsonIgnoreProperties(ignoreUnknown = true);限制@Type使用 - 消息队列:不反序列化未知类;校验消息来源
5. 敏感信息保护
- 配置加密:Jasypt + 环境变量注入密钥
- 日志脱敏:禁止打印密码、Token、身份证等
- 内存安全:避免在 Heap 中存储敏感数据;用完即销毁
6. 安全依赖管理
- 使用OWASP Dependency-Check扫描依赖漏洞
- 定期更新
pom.xml/build.gradle,移除过期 / 废弃组件 - 禁止引入
commons-collections、commons-beanutils等高危库
七、漏洞检测与应急响应
1. 检测工具
- 静态代码扫描:SonarQube、Semgrep(规则匹配 Spring 漏洞)
- 动态扫描:OWASP ZAP、Burp Suite(检测 SpEL、路径遍历)
- 专用工具:SpringBootVul-GUI(内置 Spring Boot 漏洞 POC)
2. 应急流程
- 收到漏洞通告 → 确认影响版本 与业务范围
- 紧急修复:升级框架 → 重启服务 → 验证修复
- 流量清洗:WAF 拦截恶意请求(如
class.module.classLoader) - 日志审计:排查是否被利用,清理后门
八、总结
Spring 框架漏洞以RCE、SpEL 注入、路径遍历、未授权访问 为核心,版本升级 + 输入校验 + 最小权限 + 敏感信息加密是最有效的防护组合。
生产环境务必:
- 保持框架与依赖最新稳定版
- 严格限制 Actuator 等敏感端点
- 对所有外部输入做深度校验