Spring Boot存在路径遍历漏洞CVE-2021-22118的问题解析

 更新时间:2023年09月01日 15:02:40   作者:冰点.  
CVE-2021-22118 是一个在 Spring Boot 中发现的漏洞,该漏洞关系到 Spring Boot 的开发者工具(Devtools)中的远程更新(Remote Update)功能,这篇文章主要介绍了Spring Boot存在路径遍历漏洞CVE-2021-22118,需要的朋友可以参考下

在这里插入图片描述

0.前言

背景:Spring Boot存在路径遍历漏洞。CVE-2021-22118:

在这里插入图片描述

官方 issue也有对此的记录,感兴趣可以看下

https://github.com/spring-projects/spring-boot/issues/26627

https://github.com/spring-projects/spring-boot/issues/27543

CVE-2021-22118 是一个在 Spring Boot 中发现的漏洞。该漏洞关系到 Spring Boot 的开发者工具(Devtools)中的远程更新(Remote Update)功能。在某些情况下,攻击者可能会利用这个功能进行目录遍历攻击,从而访问到系统中的敏感文件。

需要注意的是,这个漏洞只会影响到使用了 Spring Boot Devtools 的基于文件系统的应用,而且应用还必须满足以下两个条件之一:

  • 远程更新功能被开启(spring.devtools.restart.enabled = true)。
  • 应用使用了默认的 HTTP 更新 URL(spring.devtools.restart.remote-secret)。

如果你的应用满足以上条件,建议尽快进行修复。修复这个漏洞的方法有以下几种:

  • 将 Spring Boot 升级到 2.3.10.RELEASE 或更高版本。
  • 将 Spring Boot 升级到 2.4.5 或更高版本。
  • 将 Spring Boot 升级到 2.5.0 或更高版本。

关于这个漏洞的详细信息,可以参考 Spring 官方的安全通告。
请注意,对于已经在生产环境中运行的应用,修改CORS配置可能会影响到正常的功能。因此,在实施这个修复之前,应该先进行充分的测试。

1.参考文档

CVE 官方网站 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22118

2.基础介绍

CVE-2021-22118是在Spring Boot中发现的一个严重的路径遍历漏洞。这个漏洞使攻击者能够以应用程序的身份访问计算机的敏感文件和数据。

1. 影响的版本

这个漏洞影响了Spring Boot 2.3.02.3.72.4.0至`2.4.3以及2.5.0版本。

2. 漏洞利用原理:

漏洞源于Spring Boot在处理用户输入的URL时,未能正确处理“…/”这种可能引起路径遍历的模式。在Spring Boot应用程序配置了Spring MVC并使用了默认的资源处理时,攻击者可以通过精心构造的URL,访问到应用程序类路径上的文件。这就使得攻击者有可能通过这个漏洞访问和下载敏感文件,或者执行非法操作。

官方的修复方式是发布了新的版本,即Spring Boot 2.3.8、2.4.42.5.1。在这些版本中,官方对路径遍历的处理进行了改进。

具体来说,Spring Boot在处理用户请求的URL时,加强了对“…/”这种可能引起路径遍历的模式的处理。当应用程序检测到请求的URL包含这种模式时,会进行更严格的校验,以防止攻击者利用这种模式来访问应用程序类路径之外的文件或目录。

为了修复这个问题,受影响的用户应尽快将其Spring Boot版本升级到官方发布的新版本。实际上,这也是对待任何软件漏洞的通用策略:一旦发现有漏洞存在,就应该尽快升级到最新的、已修复该漏洞的版本。

3.解决方案

3.1. 方案1

Spring在其2.3.82.4.42.5.1版本中修复了这个漏洞。对于受到影响的用户,推荐尽快升级到这些版本。同时,作为临时措施,可以限制用户能访问的URL,或者在服务器端增加对用户提交的URL进行更严格的校验。

3.2. 方案2

临时解决方案
在Nginx中,你可以使用location指令和rewrite指令来拦截和阻止包含"…/"的请求,以下是一个基本的示例配置:

server {
    listen 80;
    server_name your_domain.com;
    location / {
        if ($request_uri ~* "\.\.\/") {
            return 403;
        }
        proxy_pass http://your_upstream;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

这个配置会监听80端口,并将请求代理到http://your_upstream,如果请求的URI中包含"…/“,Nginx会返回403状态码,即"禁止访问”。

这只是防止路径遍历攻击的一种方法,并不能完全保证安全。因此,升级到没有这个漏洞的Spring
Boot版本,仍然是最安全的解决方案。此外,你还应该定期更新Nginx版本,以应用最新的安全修复。

3.3. 方案3

在Spring Boot中你可以通过定制一个拦截器来防止路径遍历攻击。拦截器可以在处理请求前对请求的URL进行检查,如果URL包含非法字符(如"…/“或”./"),则可以拒绝该请求。== 这种可能会误拦截,大家使用的时候注意充分测试和考虑各种渠道==
一个简单示例可供参考

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class PathTraversalInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String uri = request.getRequestURI();
        if (uri.contains("../") || uri.contains("./")) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
            return false;
        }
        return true;
    }
}

需要在一个配置类中将这个拦截器注册到Spring的拦截器链中:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
    private final PathTraversalInterceptor pathTraversalInterceptor;
    public WebConfig(PathTraversalInterceptor pathTraversalInterceptor) {
        this.pathTraversalInterceptor = pathTraversalInterceptor;
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(pathTraversalInterceptor);
    }
}

这样,Spring将会在处理每个请求前,先执行PathTraversalInterceptorpreHandle方法来检查请求的URL。

这种方法 也只能作为临时的解决方案,它不能替代升级SpringBoot到没有该漏洞的版本。因为攻击者可能会使用编码绕过你的检查,而升级Spring Boot可以彻底修复该漏洞。

到此这篇关于Spring Boot存在路径遍历漏洞CVE-2021-22118的文章就介绍到这了,更多相关Spring Boot漏洞内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springmvc整合ssm配置的详细代码

    springmvc整合ssm配置的详细代码

    今天通过实例代码给大家介绍了springmvc整合ssm配置的详细方法,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • Java for循环常见优化方法案例详解

    Java for循环常见优化方法案例详解

    这篇文章主要介绍了Java for循环常见优化方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 用IDEA如何打开文件夹

    用IDEA如何打开文件夹

    这篇文章主要介绍了用IDEA如何打开文件夹问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 多模字符串匹配算法原理及Java实现代码

    多模字符串匹配算法原理及Java实现代码

    这篇文章主要介绍了多模字符串匹配算法原理及Java实现代码,涉及算法背景,原理,构建过程简单介绍几Java代码实现等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java中用POI实现将数据导出到Excel

    Java中用POI实现将数据导出到Excel

    这篇文章主要介绍了Java中用POI实现将数据导出到Excel,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • java项目中常用指标UV PV QPS TPS含义以及统计方法

    java项目中常用指标UV PV QPS TPS含义以及统计方法

    文章介绍了现代Web应用中性能监控和分析的重要性,涵盖了UV、PV、QPS、TPS等关键指标的统计方法,并提供了示例代码,同时,文章还讨论了性能优化和瓶颈分析的策略,以及使用Grafana等可视化工具进行监控与告警的重要性
    2025-01-01
  • 入门到精通Java SSO单点登录原理详解

    入门到精通Java SSO单点登录原理详解

    这篇文章主要介绍了入门到精通Java SSO单点登录原理详解,本文主要对SSO单点登录与CAS、OAuth2.0两种授权协议的关系和原理进行详细说明
    2022-09-09
  • Spring Cloud Gateway 2.x跨域时出现重复Origin的BUG问题

    Spring Cloud Gateway 2.x跨域时出现重复Origin的BUG问题

    这篇文章主要介绍了Spring Cloud Gateway 2.x跨域时出现重复Origin的BUG问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Spring使用@Filter注解创建自定义过滤器

    Spring使用@Filter注解创建自定义过滤器

    Spring 中鲜为人知但非常有用的注解之一是 @Filter,它支持自定义过滤器,下面我们就来深入研究一下如何使用 Spring 的 @Filter 注解来创建自定义过滤器吧
    2023-11-11
  • Java设计模式常用的七大原则总结

    Java设计模式常用的七大原则总结

    今天给大家总结了Java设计模式的七大原则,主要有单一职责原则,接口隔离原则,依赖倒转原则,里氏替换原则等,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06

最新评论