Spring 框架漏洞

一、简述

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/passwdapplication.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.Classjava.net.URL等危险类反序列化
    • 使用安全序列化库(如 Kryo、Protobuf)替代 Java 原生序列化

五、配置 / 权限类漏洞

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 安全加固(必做)

  • 仅暴露healthinfometrics等非敏感端点
  • 启用 Spring Security,配置ACTUATOR角色访问
  • 生产环境禁用 envheapdumptracemappings

4. 反序列化防护

  • 禁用 Java 原生序列化,优先使用 JSON/Protobuf
  • Jackson:启用@JsonIgnoreProperties(ignoreUnknown = true);限制@Type使用
  • 消息队列:不反序列化未知类;校验消息来源

5. 敏感信息保护

  • 配置加密:Jasypt + 环境变量注入密钥
  • 日志脱敏:禁止打印密码、Token、身份证等
  • 内存安全:避免在 Heap 中存储敏感数据;用完即销毁

6. 安全依赖管理

  • 使用OWASP Dependency-Check扫描依赖漏洞
  • 定期更新pom.xml/build.gradle,移除过期 / 废弃组件
  • 禁止引入commons-collectionscommons-beanutils等高危库

七、漏洞检测与应急响应

1. 检测工具

  • 静态代码扫描:SonarQube、Semgrep(规则匹配 Spring 漏洞)
  • 动态扫描:OWASP ZAP、Burp Suite(检测 SpEL、路径遍历)
  • 专用工具:SpringBootVul-GUI(内置 Spring Boot 漏洞 POC)

2. 应急流程

  1. 收到漏洞通告 → 确认影响版本业务范围
  2. 紧急修复:升级框架 → 重启服务 → 验证修复
  3. 流量清洗:WAF 拦截恶意请求(如class.module.classLoader
  4. 日志审计:排查是否被利用,清理后门

八、总结

Spring 框架漏洞以RCE、SpEL 注入、路径遍历、未授权访问 为核心,版本升级 + 输入校验 + 最小权限 + 敏感信息加密是最有效的防护组合。

生产环境务必:

  • 保持框架与依赖最新稳定版
  • 严格限制 Actuator 等敏感端点
  • 对所有外部输入做深度校验
相关推荐
lly2024062 小时前
ionic 下拉刷新:实现与优化指南
开发语言
键盘鼓手苏苏2 小时前
Flutter for OpenHarmony:cider 自动化版本管理与变更日志生成器(发布流程标准化的瑞士军刀) 深度解析与鸿蒙适配指南
运维·开发语言·flutter·华为·rust·自动化·harmonyos
二十雨辰2 小时前
[python]-闭包和装饰器
python
IT 行者2 小时前
ZeroClaw:Rust 驱动的下一代 AI Agent 基础设施
开发语言·人工智能·rust
IT 行者2 小时前
AI Agent 平台横评:ZeroClaw vs OpenClaw vs Nanobot
开发语言·人工智能·rust
BigNiu2 小时前
rust里mut 和遮蔽之间的区别
开发语言·rust
许同2 小时前
JS-WPS 自动化办公(5)多Sheet整合
开发语言·前端·javascript
wjs20242 小时前
SVG 在线编辑器:设计自由,创意无限
开发语言
Zachery Pole2 小时前
JAVA_08_封装、继承和多态
java·开发语言