Spring Boot Actuator的Env端点存在本地文件包含(LFI)漏洞CVE-2020-5421

news2024/12/23 18:47:27

文章目录

  • 0.前言
  • 1.参考文档
  • 2.基础介绍
  • 3.漏洞利用原理
  • 3.解决方案
    • 1. 升级Spring Boot版本
    • 2. 限制端点的访问
    • 3. 禁用环境端点
    • 4. 不公开敏感的Actuator端点
    • 5. 开启安全审计

在这里插入图片描述

0.前言

背景: Spring Boot Actuator的Env端点存在本地文件包含(LFI)漏洞CVE-2020-5421。被扫描到需要解决。

Spring Boot Actuator是Spring Boot的一个子项目,主要用于监控和管理Spring Boot应用程序。在开发或测试环境中,开发者通常会开启所有Actuator的端点,包括/env端点,以便于对应用程序进行诊断和调试。但在生产环境中,这种配置可能会导致安全问题。

1.参考文档

  1. Spring Boot官方网站: https://spring.io/projects/spring-boot
  2. Spring Boot GitHub仓库: https://github.com/spring-projects/spring-boot
  3. Spring官方博客: https://spring.io/blog

这个问题被记录在Spring
Boot的GitHub仓库中,具体的漏洞描述和解决办法可以在这个链接中找到:https://github.com/spring-projects/spring-boot/issues/。

另外,Pivotal也在他们的官方博客中发布了一个公告,解释了这个问题的严重性,以及他们如何处理这个问题:https://spring.io/blog/。

注意: 以上链接可能会随着时间推移而更新或改变 如果连接变了可以评论区留言谢谢。

2.基础介绍

CVE-2020-5421就是一个影响Spring Boot Actuator的安全漏洞。这个漏洞主要涉及到环境(Env)端点。这个端点本来是用来获取应用程序运行环境的详细信息的,但由于漏洞的存在,攻击者可以通过特制的请求,让/env端点返回服务器上任意文件的内容,这就是所谓的本地文件包含(LFI)漏洞。

这个LFI漏洞的存在,可能使的应用程序面临严重的安全风险。攻击者可以通过这个漏洞获取到服务器上的任何文件,包括应用程序的配置文件,数据库配置信息,甚至是系统的敏感文件如/etc/passwd。这可能会导致的应用程序的信息泄露,甚至是被完全控制。

3.漏洞利用原理

在Spring Boot Actuator的/env端点,开发者可以获取到应用程序运行环境的详细信息。然而,由于一项设计缺陷,攻击者可以通过发送特制的请求,让/env端点返回服务器上任意文件的内容。这就是所谓的本地文件包含(LFI)漏洞。

具体的利用方法是,攻击者可以发送一个POST请求到/env端点,如POST /actuator/env,然后在请求体中设置name参数为[systemProperties][java.home]value参数为任意文件的路径,如../../../etc/passwd

然后再发送一次GET请求到/env端点,读取这个文件的内容。由于/env端点会返回java.home系统属性的值,而这个值已经被攻击者修改为任意文件的路径,所以,服务器会返回这个文件的内容。

所以,这个漏洞的原理就是,攻击者通过修改系统属性java.home的值,来读取服务器上任意文件的内容。

这种攻击方法需要攻击者能够访问到的Actuator端点。在生产环境中,应该尽量限制Actuator端点的访问权限,或者完全禁用它。

3.解决方案

要解决这个本地文件包含(LFI)漏洞,可以采取以下的解决方案:

1. 升级Spring Boot版本

Pivotal(Spring Boot的开发商)已经在更高版本的Spring Boot中修复了这个漏洞。所以,可以通过升级的Spring Boot版本来解决这个问题。具体来说,应该至少升级到2.3.9.RELEASE、2.4.4或更高版本。官方地址https://spring.io/projects/spring-boot/

2. 限制端点的访问

在生产环境中,应该尽量限制Actuator端点的访问权限。可以通过Spring Security来实现这一点。只有经过身份验证的用户,才能访问Actuator端点。
要使用Spring Security来限制Actuator端点的访问,首先需要在的项目中引入Spring Security的依赖。如果使用的是Maven构建工具,可以在的pom.xml文件中添加如下的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

然后,需要创建一个配置类,该类扩展了WebSecurityConfigurerAdapter,并覆盖了configure(HttpSecurity http)方法,如下:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests()
                .anyRequest().authenticated()
                .and().httpBasic();
    }

}

在这个配置中,首先使用requestMatcher(EndpointRequest.toAnyEndpoint())来指定这个安全配置只应用于Actuator端点的请求。然后,使用authorizeRequests().anyRequest().authenticated()来要求所有的请求都必须经过身份验证。最后,使用httpBasic()来启用HTTP基本认证。

然后,需要在的application.propertiesapplication.yml中设置一个用户名和密码,这个用户名和密码将用于身份验证。例如:

spring.security.user.name=admin
spring.security.user.password=secret

这样,只有知道用户名和密码的人,才能访问的Actuator端点。

3. 禁用环境端点

如果不需要环境端点,也可以选择禁用它。可以在的application.propertiesapplication.yml中设置management.endpoint.env.enabled=false来禁用环境端点。

4. 不公开敏感的Actuator端点

默认情况下,Spring Boot 只会暴露少数几个不敏感的Actuator端点,比如“health”和“info”。应该确保这个设置没有被修改,避免公开其他可能带来安全隐患的端点。

5. 开启安全审计

如果公司的devops 平台做的好的话,可以在发布扫描环节扫描这些。或者通过开启安全审计,可以记录谁访问了哪些端点,何时访问的,访问了哪些数据。这对于检测和防止潜在的攻击非常有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/938247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件工程(二十) 系统运行与软件维护

1、系统转换计划 1.1、遗留系统的演化策略 时至今日,你想去开发一个系统,想完全不涉及到已有的系统,基本是不可能的事情。但是对于已有系统我们有一个策略。 比如我们是淘汰掉已有系统,还是继承已有系统,或者集成已有系统,或者改造遗留的系统呢,都是不同的策略。 技术…

雪花假设:训练deep GNN 新思路

本文由中科大数据智能实验室联合阿卜杜拉国王科技大学&#xff08;KSUST&#xff09;、同济大学、新加坡国立大学、深圳科技大学、香港科技大学等多家院校联合提出了一种全新的训练深度GNN的策略—雪花假设&#xff0c;旨在帮助未来训练深度GNN并克服其中可能出现的over-smooth…

让敌人分兵,就能创造局部优势

让敌人分兵&#xff0c;就能创造局部优势 【安志强趣讲《孙子兵法》第22讲】 【原文】 故备前则后寡&#xff0c;备后则前寡&#xff0c;备左则右寡&#xff0c;备右则左寡&#xff0c;无所不备&#xff0c;则无所不寡。寡者&#xff0c;备人者也&#xff1b;众者&#xff0c;使…

软件工程(十八) 行为型设计模式(四)

1、状态模式 简要说明 允许一个对象在其内部改变时改变它的行为 速记关键字 状态变成类 类图如下 状态模式主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。比如订单从待付款到待收货的咋黄台发生变化,执行的逻辑是不一样的。 所以我们将状态抽象为一…

软件工程(十七) 行为型设计模式(三)

1、观察者模式 简要说明 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新 速记关键字 联动,广播消息 类图如下 基于上面的类图,我们来实现一个监听器。类图中的Subject对应我们的被观察对象接口(IObservable),…

软件工程(十六) 行为型设计模式(二)

1、迭代器模式 简要说明 提供一种方法来顺序访问一个聚合对象中的各个元素,而不是暴露该对象的内部状态 速记关键字 数据集,迭代,循环 类图如下 其实迭代器模式在我们的不同语言中,均对其实现了,就是我们的各种集合,List,Set等都是迭代器模式的实现。 就是把一个集…

09 mysql fetchSize 所影响的服务器和客户端的交互

前言 这是一个 之前使用 spark 的时候 记一次 spark 读取大数据表 OOM OutOfMemoryError: GC overhead limit exceeded 因为一个 OOM 的问题, 当时使用了 fetchSize 的参数 应用服务 hang 住, 导致服务 503 Service Unavailable 在这个问题的地方, 出现了一个查询 32w 的数据…

【javaweb】学习日记Day6 - Mysql 数据库 DDL DML

之前学习过的SQL语句笔记总结戳这里→【数据库原理与应用 - 第六章】T-SQL 在SQL Server的使用_Roye_ack的博客-CSDN博客 目录 一、概述 1、如何安装及配置路径Mysql&#xff1f; 2、SQL分类 二、DDL 数据定义 1、数据库操作 2、IDEA内置数据库使用 &#xff08;1&…

特征工程 – Feature Engineering

特征工程是机器学习工作流程中重要的组成部分&#xff0c;他是将原始数据「翻译」成模型可理解的形式。 特征工程的重要性 基于大量数据的简单模型优于基于少量数据的复杂模型。 更多的数据优于聪明的算法&#xff0c;而好的数据优于多的数据。 所以&#xff0c;如何基于给定数…

CSS中如何实现背景图片的平铺和定位?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 平铺背景图片⭐ 背景图片定位⭐ 同时设置平铺和定位⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是…

AcWing 2058. 笨拙的手指(每日一题)

大家好 我是寸铁 如果你觉得这篇题解对你有用&#xff0c;可以动动手点个赞或关注&#xff0c;谢谢~ 题目描述 输入的第一串字母&#xff0c;存在一位错误。 输入的第二串字母&#xff0c;存在一位错误。 答案保证唯一解 我们需要去枚举每一位&#xff0c;找到二进制和三进制…

pytest笔记: pytest单元测试框架

第一步&#xff1a;安装 和查看版本 pycharm settings 查看 第二步&#xff1a; 编写test_example.py def inc(x):return x1 def test_answer():assert inc(4) 5 第三步&#xff1a;在当前路径下执行pytest 命令 PS E:\data\web测试\Selenium3自动化测试实战——基于Pyth…

web浏览器使用FileSystem的API进行本地文件的存储

作者&#xff1a;程序员CKeen 博客&#xff1a;http://ckeen.cn 长期坚持做有价值的事&#xff01;积累沉淀&#xff0c;持续成长&#xff0c;升维思考&#xff01;希望把编码作为长期兴趣爱好&#x1f604; 目录 1. 背景2. Web端本地File操作的API3. File and Directory Entri…

战略形成是权力妥协的过程,江湖,政治是常态

战略权力派&#xff1a;战略形成是各种权力妥协的过程【安志强趣讲270期】 趣讲大白话&#xff1a;有人的地方就有政治 **************************** 有人的地方就有江湖 有组织的地方就有政治 公司的战略是各种人的权力博弈的产物 围观权力&#xff1a;就是组织内部 宏观权力…

点可云进销存开源系统V6.0.1 ERP系统进销存源码仓库管理

介绍 点可云进销存系统&#xff0c;基于thinkphplayui开发。 功能包含&#xff1a;采购、销售、零售、多仓库管理、财务管理等功能 和超详细的报表功能&#xff08;采购报表、销售报表、零售报表、仓库报表、资金报表等&#xff09; 软件架构 thinkphplayui 功能概览 购货 -购…

【深度学习】实验03 特征处理

文章目录 特征处理标准化归一化正则化 特征处理 标准化 # 导入标准化库 from sklearn.preprocessing import StandardScalerfrom matplotlib import gridspec import numpy as np import matplotlib.pyplot as plt import warnings warnings.filterwarnings("ignore&quo…

利用阿里云服务器公网IP+FRP搭建内网穿透

1 必要条件&#xff1a; 一台公网IP服务器&#xff0c;这里采用阿里云ECS服务器。 此处将IP定义为:serverA-IP 2 服务器下载代码&#xff1a; # mkdir /data # cd /data # git clone https://github.com/fatedier/frp.git # cd frp3 编译代码 编译需要时间 # make go fmt .…

【Redis从头学-13】Redis哨兵模式解析以及搭建指南

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Re…

第4节——react 中如何编写样式

一、内联样式 内联样式就是在JSX元素中&#xff0c;直接定义行内的样式。与普通的HTML内联样式唯一的区别就是&#xff0c;JSX中的内联样式是一个对象&#xff0c;而不是一个字符串。 import React from reactexport default class LearnStyle extends React.Component {rend…