一、漏洞基础概述
Spring4Shell 属于 Spring Framework 高危远程代码执行漏洞,该漏洞由 Spring 参数绑定机制、Tomcat 容器解析特性共同触发,在 Spring MVC、Spring Boot 广泛使用的 Java Web 项目中危害极大。漏洞核心危害:攻击者无需前置权限,仅通过构造特殊请求参数,即可在目标服务器写入恶意 JSP 后门文件,最终实现远程命令执行、服务器接管,是近两年红队渗透、批量挖矿、勒索入侵最常用的高危漏洞。
该漏洞不依赖复杂漏洞利用工具,普通脚本即可快速构造攻击载荷,批量扫描互联网上未加固的 Spring 站点,漏洞覆盖面广,Java 后端项目、企业管理后台、各类 SaaS 系统极易中招。
二、漏洞底层原理
- Spring 参数绑定机制
Spring 会自动将 HTTP 请求参数映射绑定至实体类属性,当开发者使用Class、Resource等类型接收前端参数时,可操控容器内部资源加载路径。 - Tomcat 路径解析缺陷
Tomcat 允许以jsp为后缀的文件进行脚本解析执行,结合 Spring 的资源写入能力,攻击者可定向在 Web 可访问目录写入 JSP 后门文件。 - 联动触发逻辑
攻击者传入恶意路径参数,Spring 自动解析并调用文件写入方法,将构造的 JSP 一句话木马写入站点静态目录;访问写入的 JSP 文件时,Tomcat 正常解析执行脚本,攻击者即可获得服务器执行权限。 - 漏洞触发必备条件:
① 项目使用 Spring Framework 5.3.x、6.0.x 等受影响版本;
② 后端存在可接收外部参数的对象绑定接口;
③ 部署容器为 Tomcat,站点目录具备文件写入权限;
④ 未开启 Spring 严格参数绑定限制。
三、主流实战利用方式
方式 1:GET 参数直接写入 JSP 后门
构造带路径与恶意脚本的 URL 参数,利用 Spring 自动绑定,将后门写入站点根目录,适用于无前端校验的公开接口,攻击门槛最低,是批量扫描最常用手段。
方式 2:POST 表单载荷注入
针对禁止 GET 传参的接口,在 POST 请求体中携带恶意路径参数,绕过简单的 URL 关键字拦截,适配绝大多数后台管理系统。
方式 3:上传接口联动利用
结合文件上传漏洞,利用 Spring4Shell 修改上传路径,将普通文件改写为 JSP 脚本,绕过后缀白名单校验,常用于后台深层渗透。
方式 4:内存马注入高级利用
写入临时内存 JSP,无需落地文件,无落地痕迹,常规杀毒软件、日志排查难以发现,多用于长期潜伏内网渗透。
四、漏洞落地危害分级
- 低危:仅写入静态文件,无法执行脚本,仅可篡改网页内容;
- 中危:成功写入 JSP 后门,执行系统命令,读取数据库配置、网站源码;
- 高危:获取服务器管理员权限,植入木马、挖矿程序、勒索病毒;
- 极危:横向渗透内网,批量控制集群服务器,窃取企业核心业务数据。
五、分层完整防御方案
第一层:版本升级根治(最优方案)
升级 Spring Framework 至官方修复版本:5.3.37 及以上、6.0.21 及以上,Spring Boot 同步升级对应适配新版本,从底层关闭漏洞触发入口。
第二层:配置限制参数绑定
- 全局关闭危险类参数绑定,禁止外部参数绑定
Resource、Class、URL等敏感对象; - 在全局拦截器、全局异常处理器中,过滤路径关键字:../、/WEB-INF、jsp、classpath 等危险字符;
- 使用
@InitBinder注解,限制绑定字段范围,白名单限定允许接收的参数名,杜绝任意属性绑定。
第三层:容器与权限加固
- 严格控制站点目录权限,Web 运行账号仅保留只读权限,关闭网站根目录、WEB-INF 目录写入权限;
- 更换 Jetty、Undertow 等非 Tomcat 容器,规避 Tomcat 脚本解析特性;
- 限制 JSP 文件生成,业务不需要 JSP 解析则直接在容器配置中禁用 jsp 解析器。
第四层:网关与 WAF 防护
- 在 Nginx、API 网关配置规则,拦截包含路径穿越、jsp 路径、classpath 的异常请求;
- WAF 添加 Spring4Shell 特征库,拦截典型攻击载荷,阻断批量扫描攻击;
- 定期拦截陌生高频扫描 IP,抵御黑产自动化探测。
第五层:日常运维巡检
- 每周排查服务器新增陌生 jsp 文件、临时脚本文件;
- 定期扫描项目依赖,排查 Spring 高危版本,使用 Maven 依赖检查工具剔除风险依赖包;
- 业务上线前安全测试,重点检测对象参数绑定接口,杜绝危险接收方式。
六、常见防御误区
误区 1:仅依靠 WAF 防护,不升级框架版本。WAF 仅能拦截已知载荷,新型变形载荷可轻松绕过,无法根治漏洞。
误区 2:只过滤 URL 参数,忽略 POST、JSON 请求体。多数高级攻击均采用 JSON 传参,只拦截 URL 会出现大量漏防。
误区 3:降低 Tomcat 版本,不管控写入权限。只要目录可写入、Spring 版本高危,依旧可以更换脚本格式完成攻击。
误区 4:认为内网隔离绝对安全。内网存在横向扫描、供应链入侵,内网系统同样需要升级加固。
七、漏洞快速检测方法
- 版本排查:查看项目 pom.xml,核对 Spring Framework 版本是否处于漏洞受影响区间;
- 黑盒测试:构造带../、jsp 后缀的参数请求接口,观察服务器是否生成陌生脚本文件;
- 日志排查:检索 Web 日志,筛查异常路径写入、资源加载请求;
- 自动化扫描:使用 Xray、AWVS、Nessus 等工具一键扫描站点 Spring4Shell 风险。
八、总结
Spring4Shell 依托 Java 生态广泛传播,是近年 Java 安全最核心的高危漏洞之一。防御核心逻辑:优先升级框架版本,其次收紧参数绑定规则,搭配权限管控、网关拦截多层防护。对于开发人员,尽量少使用泛化对象接收前端参数,固定参数白名单;对于运维人员,定期排查第三方依赖漏洞,严控目录写入权限;对于安全人员,将 Spring4Shell 纳入常规渗透必测项,提前排查整改,避免被定向勒索攻击利用。