Spring RCE 漏洞

本文提供了一套针对Spring框架漏洞的排查与修复方案,包括JDK版本排查、Spring框架使用情况排查、综合判断方法以及两种修复建议。适用于网络安全人员进行系统安全检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

​本文由Scynull编译,校对,转载请注明。

免责申明

    归零安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。
    本文所提供的工具仅用于学习,禁止用于其他,请在24小时内删除工具文件!!!

JDK版本号排查

1.JDK版本排查

在业务系统的运行服务器上,执行“java -version”命令查看运行的JDK版本,如果版本号小于等于8,则不受漏洞影响

2.Spring框架使用情况排查

第一种

如果业务系统项目以war包形式部署,按照如下步骤进行判断。
解压war包:将war文件的后缀修改成.zip ,解压zip文件

在解压缩目录下搜索是否存在 spring-beans-.jar 格式的jar文件(例如spring-beans-5.3.16.jar),如存在则说明业务系统使用了spring框架进行开发。

如果spring-beans-.jar 文件不存在,则在解压缩目录下搜索CachedIntrospectionResuLts.class 文件是否存在,如存在则说明业务系统使用了Spring框架开发。

第二种

如果业务系统项目以jar包形式直接独立运行,按照如下步骤进行判断。
解压jar包:将jar文件的后缀修改成.zip,解压zip文件。

在解压缩目录下搜索是否存在spring-beans-.jar 格式的jar文件(例如spring-beans-5.3.16.jar),如存在则说明业务系统使用了spring框架进行开发。

如果spring-beans-.jar 文件不存在,则在解压缩目录下搜索CachedIntrospectionResuLts.class 文件是否存在,如存在则说明业务系统使用了spring框架进行开发。

3.综合判断

在完成以上两个步骤排查后,同时满足以下两个条件可确定受此漏洞影响:
JDK版本号在9及以上的;

使用了spring框架或衍生框架。

4.修复建议

目前,spring官方无官方补丁,建议采用以下二个临时方案进行防护,并及时关注官方补丁发布情况,按官方补丁修复漏洞。

1.WAF防护

在WAF等网络防护设备上,根据实际部署业务的流量情况,实现对“class.”“Class.”“.class.”“.Class.”等字符串的规则过滤,并在部暑过滤规则后,对业务运行情况进行测试,避免产生额外影响。

2.临时修复措施

需同时按以下两个步骤进行漏涧的临时修复:
在应用中全局搜索@InitBinder注解,看看方法体内是否调用dataBinder.setDisallowedFields方法,如果发现此代码片段的引入,则在原来的黑名单中,添加{“class.”,“Class. “,”. class.”, “.Class.”}。

(注:如果此代码片段使用较多,需要每个地方都追加)

在应用系统的项目包下新建以下全局类,并保证这个类被Spring 加载到(推荐在Controller 所在的包中添加).完成类添加后,需对项目进行重新编译打包和功能验证测试。并重新发布项目。

import org.springframework.core.annotation.Order;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
@ControllerAdvice
@Order(10000)
public class GlobalControllerAdvice{
@InitBinder
public void setAllowedFields(webdataBinder dataBinder){
String[]abd=new string[]{"class.","Class.",".class.",".Class."};
dataBinder.setDisallowedFields(abd);
}
}

后续更新可以关注我的公众号,刚刚做公众号,大佬勿喷!

公众号

### 关于Spring Boot RCE漏洞的详细信息 Spring框架中的远程代码执行(RCE)漏洞允许攻击者通过网络发送特制请求,在目标服务器上执行任意命令或代码。这种类型的漏洞极其危险,因为它可以给予攻击者完全控制系统的能力[^2]。 #### 漏洞影响范围 此特定版本的RCE漏洞主要影响使用了某些配置下的Spring应用程序。特别是当应用暴露了HTTP接口,并且这些接口能够接收并处理不受信任的数据输入时,就可能存在安全隐患。例如,如果程序中有地方会将用户提交的内容直接用于Java对象反序列化操作,则可能成为攻击面之一[^3]。 #### 漏洞成因分析 该漏洞源于Spring框架内部对于外部数据解析过程中存在的逻辑缺陷。具体来说,在处理一些特殊形式的参数传递时未能充分验证其安全性,从而让恶意构造的数据有机会绕过正常的安全机制,最终触发底层JVM环境下的不安全行为——即实现了所谓的“远程代码执行”。 ```java // 不安全的代码片段可能导致RCE风险 @RequestMapping("/unsafeEndpoint") public ResponseEntity<String> unsafeMethod(@RequestParam String userInput){ // 假设这里存在未经严格校验便使用的userInput变量... } ``` 为了防止此类问题的发生,应当遵循最小权限原则设计API接口;同时加强对所有来自客户端的数据进行严格的过滤与转义处理,避免任何潜在可利用之处被暴露出来。 ### 修复方案及防护建议 针对已知的Spring Shell(也称为Spring4Shell)这一具体的CVE编号尚未正式发布的高危RCE漏洞,官方已经采取行动发布了更新来修补它: - **立即升级依赖库**:确保所使用的Spring Framework及其关联组件均为最新稳定版。根据官方公告,受影响的应用应该尽快迁移到不低于`5.3.18` 或 `5.2.20` 版本之上。 - **移除不必要的功能模块**:审查当前项目结构,去除那些不再需要或者很少用到的功能特性,尤其是涉及到动态加载类、脚本解释器等功能的部分,因为它们往往是引发这类漏洞的关键因素。 - **加强输入验证**:无论何时都应保持警惕对待任何形式的外部输入源,实施全面而细致的数据清洗策略,包括但不限于字符串截断、字符替换以及正则表达式的运用等手段,以此降低遭受注入式攻击的风险水平。 - **启用WAF/Web防火墙保护**:部署Web Application Firewall (WAF), 可以为网站提供额外一层防御屏障,阻止非法流量到达后端服务之前就被拦截下来,有效缓解未知威胁带来的冲击力。 - **定期开展渗透测试活动**:建立持续性的安全审计流程,邀请专业的第三方团队模拟黑客入侵场景对企业信息系统进行全面体检,及时发现隐藏较深的技术短板加以改进优化。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五木徒羚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值