Spring框架远程命令执行漏洞(CNVD-2022-23942)

本文介绍了Spring框架的远程命令执行漏洞,该漏洞影响JDK 9及以上版本,引发业界广泛关注。尽管官方已发布修复方案,但在漏洞披露初期,网络上出现了大量钓鱼文件。博主分享了个人见解,认为此漏洞实际影响有限,主要针对自研平台。建议受影响的开发者进行自查并更新到最新版本Spring来修复问题。

前言

3月30日,国家信息安全漏洞共享平台(CNVD)收录了Spring框架远程命令执行漏洞(CNVD-2022-23942)。该漏洞是继Apache Log4j2漏洞之后的又一严重漏洞事件,引起业界高度关注。该漏洞可能已被远程攻击者利用,漏洞威胁等级被定为高危、非常紧急。30日晚上朋友圈里更是像过年了一样,都在等一个poc。当天晚上呢这个漏洞的热度极高,也是出现了各种伪造成poc的钓鱼文件,目前呢官方也未给出修复方案。我先针对这个漏洞给出一点我自己的看法,第二天进行复现后发现呢,这个漏洞跟想象的不大一样,我个人觉得很鸡肋,当天聊起这个漏洞的时候就觉得这个漏洞是属于好用的,但是又没啥大用,不知道你们能不能明白我的意思,相对来说一些自研平台可能受影响会大一点。

漏洞简介

Spring是目前最受欢迎的开源轻量级Java框架,近日,Spring被曝存在RCE 0day漏洞。已经证实由于SerializationUtils#deserialize基于Java的序列化机制,可导致远程代码执行(RCE),使用JDK9及以上版本皆有可能受到影响。

漏洞影响范围

据了解,受漏洞影响的产品版本包括:

  1. JDK 版本号 9 及以上的;
  2. 使用了Spring 框架或衍生框架。建议开发者进行JDK版本号(注:如果版本号小于等于8,则不受漏洞影响)和Spring框架使用情况进行排查。

自查

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

修复方案

目前,Spring官方已发布新版本完成漏洞修复,CNVD建议受漏洞影响的产品(服务)厂商和信息系统运营者尽快进行自查,并及时升级至最新版本:https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement
缓释方案
1.在应用中全局搜索@InitBinder注解,方法体中若调用dataBinder.setDisallowedFields,则在原来的黑名单中添加"class.","Class.", “.class.”, “.Class.”。
【注:如果此代码片段使用较多,需要每个地方都追加。】
2.若未发现,可通过@ControllerAdvice进行全局拦截,通过WebDataBinder中setDisallowedFields方法添加黑名单。参考代码:

importorg.springframework.web.bind.WebDataBinder;
importorg.springframework.web.bind.annotation.ControllerAdvice;
importorg.springframework.web.bind.annotation.InitBinder;

@ControllerAdvice
@Order(Ordered.LOWEST_PRECEDENCE)
public class BinderControllerAdvice {
    @InitBinder
    public voidsetAllowedFields(WebDataBinder dataBinder) {
         String[] denylist = newString[]{"class.*", "Class.*", "*.class.*","*.Class.*"};
        dataBinder.setDisallowedFields(denylist);
    }
}
禅道系统中编号为 CNVD-2022-42853 的 SQL 注入漏洞属于一种高危安全问题,攻击者可以通过构造恶意输入绕过应用程序的输入验证机制,将恶意 SQL 语句注入到后端数据库中执行,从而获取、篡改或删除敏感数据。此类漏洞通常出现在未正确过滤或转义用户输入的模块中,尤其在涉及数据库查询的接口中更为常见。 该漏洞的成因主要与禅道系统的输入验证机制不完善有关。例如,某些模块在处理用户提交的数据时未对特殊字符进行充分过滤,或者在构建 SQL 查询语句时直接拼接用户输入,导致攻击者可以构造恶意输入来操控数据库查询逻辑。由于禅道系统属于后台授权类项目管理软件,攻击者通常需要具备一定的账户权限才能触发该漏洞[^1]。 针对该漏洞,官方提供的修复方案主要包括以下几个方面: 1. **更新至官方修复版本**:禅道官方在发现该漏洞后已发布修复版本,建议用户尽快将系统升级至 16.5 及以上版本,以确保安全补丁生效。 2. **增强输入过滤机制**:对所有用户输入进行严格的合法性校验,尤其是涉及数据库操作的接口,应使用参数化查询(Prepared Statement)或 ORM 框架,避免直接拼接 SQL 语句。 3. **最小权限原则配置数据库账户**:确保应用程序连接数据库时使用权限受限的账户,避免使用具有高权限的数据库用户进行操作,以降低攻击者利用漏洞后的破坏范围。 4. **启用 Web 应用防火墙(WAF)**:部署具备 SQL 注入检测与拦截能力的安全防护设备或服务,对异常请求进行实时阻断。 以下是参数化查询的一个 Python 示例,使用 `pymysql` 库防止 SQL 注入攻击: ```python import pymysql # 连接数据库 connection = pymysql.connect(host='localhost', user='db_user', password='db_password', database='禅道数据库') try: with connection.cursor() as cursor: # 使用参数化查询防止 SQL 注入 user_input = "恶意输入'; DROP TABLE users; --" sql = "SELECT * FROM users WHERE username = %s" cursor.execute(sql, (user_input,)) result = cursor.fetchall() print(result) finally: connection.close() ``` 该代码通过将用户输入作为参数传递给 SQL 查询,而不是直接拼接字符串,从而有效防止 SQL 注入攻击。 在 HW 攻防演练中,此类漏洞常被红队用于突破企业边界防护,因此企业应高度重视历史漏洞的修复与资产梳理工作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ba1s1r

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

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

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

打赏作者

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

抵扣说明:

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

余额充值