昨天,国家信息安全漏洞共享平台发布了安全公告编号:CNTA-2022-0009的安全公告,于3月30日收录了Spring框架远程命令执行漏洞(CNVD-2022-23942)。
结合Spring官方公告,可以看到:
漏洞影响范围:
具体的利用需要应用程序作为 WAR 部署在 Tomcat 上运行。如果应用程序被部署为 Spring Boot 可执行 jar,即默认值,则它不易受到漏洞利用。但是,该漏洞的性质更为普遍,可能还有其他方法可以利用它。
Spring给出的漏洞解决方法:
disallowedFields
通过WebDataBinder
以下方式设置@ControllerAdvice
:@ControllerAdvice@Order(Ordered.LOWEST_PRECEDENCE)public class BinderControllerAdvice {
@InitBinder
public void setAllowedFields(WebDataBinder dataBinder) {
String[] denylist = new String[]{"class.*", "Class.*", "*.class.*", "*.Class.*"};
dataBinder.setDisallowedFields(denylist);
}}
disallowedFields
通过自己的@InitBinder
方法在本地设置,这会覆盖全局设置。RequestMappingHandlerAdapter
更新最后。WebDataBinder
为此,Spring Boot 应用程序可以声明一个WebMvcRegistrations
bean (Spring MVC) 或一个WebFluxRegistrations
bean (Spring WebFlux)。例如在 Spring MVC 中(在 WebFlux 中类似):
package car.app;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations;import org.springframework.context.annotation.Bean;import org.springframework.web.bind.ServletRequestDataBinder;import org.springframework.web.context.request.NativeWebRequest;import org.springframework.web.method.annotation.InitBinderDataBinderFactory;import org.springframework.web.method.support.InvocableHandlerMethod;import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;import org.springframework.web.servlet.mvc.method.annotation.ServletRequestDataBinderFactory;@SpringBootApplicationpublic class MyApp {
public static void main(String[] args) {
SpringApplication.run(CarApp.class, args);
}
@Bean
public WebMvcRegistrations mvcRegistrations() {
return new WebMvcRegistrations() {
@Override
public RequestMappingHandlerAdapter getRequestMappingHandlerAdapter() {
return new ExtendedRequestMappingHandlerAdapter();
}
};
}
private static class ExtendedRequestMappingHandlerAdapter extends RequestMappingHandlerAdapter {
@Override
protected InitBinderDataBinderFactory createDataBinderFactory(List<InvocableHandlerMethod> methods) {
return new ServletRequestDataBinderFactory(methods, getWebBindingInitializer()) {
@Override
protected ServletRequestDataBinder createBinderInstance(
Object target, String name, NativeWebRequest request) throws Exception {
ServletRequestDataBinder binder = super.createBinderInstance(target, name, request);
String[] fields = binder.getDisallowedFields();
List<String> fieldList = new ArrayList<>(fields != null ? Arrays.asList(fields) : Collections.emptyList());
fieldList.addAll(Arrays.asList("class.*", "Class.*", "*.class.*", "*.Class.*"));
binder.setDisallowedFields(fieldList.toArray(new String[] {}));
return binder;
}
};
}
}}
对于没有 Spring Boot 的 Spring MVC,应用程序可以从文档的高级配置部分中描述的直接@EnableWebMvc
扩展,然后覆盖该方法。DelegatingWebMvcConfiguration
createRequestMappingHandlerAdapter
CNVD对该漏洞的综合评级为“高危”。
CNVD给出的漏洞处置建议:
目前,Spring官方已发布新版本完成漏洞修复,CNVD建议受漏洞影响的产品(服务)厂商和信息系统运营者尽快进行自查,并及时升级至最新版本:
目前,Spring官方已发布新版本完成漏洞修复,CNVD公告建议受漏洞影响的产品(服务)厂商和信息系统运营者尽快进行自查,并及时升级至最新版本:
https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement
附:参考链接:
https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement
https://github.com/spring-projects/spring-framework/compare/v5.3.17...v5.3.18
信息来源:CNVD官网、Spring官网
原文始发于微信公众号(云知云享):CNVD发布:关于Spring框架存在远程命令执行漏洞的安全公告
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论