当前位置: 首页 > 网络安全 > 网络安全预警信息 > 正文

关于Spring MVC 框架远程代码执行漏洞的预警

日期:2022-03-30阅读:

一、基本情况

Spring 一直被广大开发人员作为 Java 企业级应用程序开发的首选。它为Java EE应用程序的开发提供了全方位的整合框架,在降低企业应用开发复杂性的同时,提高了其可测试性,简化了Java企业级应用的开发周期。

近日,相关监测发现Spring Core 组件中存在远程代码执行漏洞,且可能已被远程攻击者利用。由于Spring框架被广泛应用,该漏洞等级被定为高危。

二、漏洞等级

高危

三、漏洞描述

该漏洞的产生是由于 Spring Core 未对传输的数据进行有效的验证。Spring MVC 框架提供参数绑定功能,允许用请求中的参数绑定控制器方法中参数对象的成员变量。这一机制使得攻击者能够通过构造恶意请求获取 AccessLogValve 对象,继而注入恶意字段值触发 pipeline 机制,从而能够在未授权的情况下远程构造恶意数据,写入任意路径下的文件,最终获取服务器最高权限。

四、影响范围

漏洞影响的产品版本包括:

使用了 3 月 29 日前发布的 Spring MVC 框架,且 jdk 版本 >= 9的应用系统。

五、修复措施

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

官方补丁链接如下:https://github.com/spring-projects/spring-framework/tags

临时方案 1:在应用中全局搜索@InitBinder 注解,看看方法体内是否调用 dataBinder.setDisallowedFields 方法,如果发现此代码片段的引入, 则在原来的黑名单中,添加{"class.*","Class. *","*. class.*", "*.Class.*"}。 (注:如果此代码片段使用较多,需要每个地方都追加)

临时方案 2: 在应用系统的项目包下新建以下全局类,并保证这个类被 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);
    }
}

六、参考链接

https://cloud.tencent.com/developer/article/1967775



我是盾盾