记一次网关项目Actuator未授权访问漏洞的修复方案

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

前言

公司项目在做等保测评的时候发现网关项目存在Actuator未授权访问漏洞,在 Actuator 启用的情况下,如果没有做好相关权限控制,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息,从而导致信息泄露甚至服务器被接管的事件发生。默认配置会出现接口未授权访问,部分接口会泄露网站流量信息和内存信息等,使用Jolokia库特性甚至可以远程执行任意代码,获取服务器权限。

漏洞效果

直接通过访问接口 http://服务器ip:程序端口/actuator/env,就返回了服务器的一些重要信息。
在这里插入图片描述

漏洞解决

1. 网上解决方案

网上解决方案大概就两种:
① 直接为了等保测评将Actuator监控直接关掉,等测评通过后再打开。

management:
  endpoints:
    enabled: false

这个就完全是为了应付等保测评了,方案不可取
②引入security

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

开启Security,配置访问权限

spring:
  security:
    user:
      username: security账号
      password: security密码

management:
  security:
    enabled: true

再次访问 http://服务器ip:程序端口/actuator/env
在这里插入图片描述
发现需要登录了,这个方案在一般的项目都是可取的,也能起到权限拦截的作用,但是由于我们这个是网关项目,项目内的接口都是对外暴露的,项目内有自己的一套安全认证机制,包括权限认证,接口转发,统一响应等等,如果引入security,项目启动之后,外部访问项目接口都会最先走security的认证机制,就不会走网关项目认证机制,直接返404或其他错误,所以这种方案对于网关项目是不可取的。

2. 我的解决方案

由于security的安全方案不可取,干脆我自己弄一个权限认证机制,对于访问路径是以/actuator开头的,统统需要账号密码进行权限认证:



import cn.hutool.core.collection.CollectionUtil;
import com.sztech.gateway.plugin.api.result.GatewayResultWarp;
import com.sztech.gateway.plugin.api.util.WebFluxResultUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
import reactor.core.publisher.Mono;
import sun.misc.BASE64Decoder;

import java.util.List;

/**
 * 用于处理Actuator未授权访问漏洞的过滤器
 *
 * @author wenchao
 */
@Component
@Slf4j
public class ActuatorFilter implements WebFilter {

    @Value("${com.sztech.prometheus.username}")
    public String userName;

    @Value("${com.sztech.prometheus.password}")
    public String password;

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        log.info("into ActuatorFilter ...");
        ServerHttpRequest request = exchange.getRequest();
        String url = request.getPath().toString();
        log.info("url:  {}", url);
        //只拦截actuator相关的接口 如果项目接口有前缀需自行添加进行判断
        if (url.startsWith("/actuator")){
            List<String> authList = request.getHeaders().get("Authorization");
            if (CollectionUtil.isEmpty(authList)){
                Object error = GatewayResultWarp.error("401", "未授权", null);
                return WebFluxResultUtils.result(exchange, error);
            }
            String auth = authList.get(0);
            if (StringUtils.isBlank(auth)){
                Object error = GatewayResultWarp.error("401", "未授权", null);
                return WebFluxResultUtils.result(exchange, error);
            }
            auth = getFromBASE64(auth.substring(6));
            log.info("auth: {}", auth);
            try {
                String[] authArray = auth.split(":");
                if (authArray[0].equals(userName) && authArray[1].equals(password)){
                    return chain.filter(exchange);
                }else {
                    Object error = GatewayResultWarp.error("401", "认证失败", null);
                    return WebFluxResultUtils.result(exchange, error);
                }
            }catch (Exception e){
                e.printStackTrace();
                Object error = GatewayResultWarp.error("401", "认证失败", null);
                return WebFluxResultUtils.result(exchange, error);
            }
        }
        return chain.filter(exchange);
    }


    private String getFromBASE64(String s) {
        if (s == null) {
            return null;
        }
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            byte[] b = decoder.decodeBuffer(s);
            return new String(b);
        } catch (Exception e) {
            return null;
        }
    }


}

配置文件同步配置一下账号密码:

com:
  sztech:
    prometheus:
      username: 账号
      password: 密码

重启项目之后重新访问接口

在这里插入图片描述
由于我们项目是借助于prometheus对actuator监控信息进行收集和展示,所以prometheus的配置文件也需要修改一下,将账号密码配置一下,再重启prometheus即可。

 basic_auth:
   username: 账号
   password: 密码

下面看一下监控效果
在这里插入图片描述

Spring Boot Actuator未授权访问漏洞:从原理到AI辅助修复的实战指南 Spring Boot Actuator作为应用监控与管理模块,其暴露的HTTP端点(如/env、/heapdump)若未配置访问控制,将导致严重的信息泄露风险。其原理在于攻击者可链式利用这些端点,获取数据库密码、API密钥等敏感配置,甚至下载堆内存转储文件进行离线分析,为后续攻击铺平道路。该漏洞常与`fastjson反序列化漏洞`、`log4j漏洞`等高频安全风险产生“梦幻联动”,放大威胁。在技术价值上,修复漏洞是践行安全左移(Shift-Left Security)、将安全内建于开发流程的关键实践。应 阅读详情

相关推荐

Spring Boot Actuator未授权访问排查和整改指南

1、信息泄露:未授权访问者可以通过Actuator端点获取敏感信息,如应用程序的配置信息、运行时环境、日志内容等。这些信息可以被攻击者用于识别系统的弱点,并进行更深入的攻击。2、使用默认的敏感端点路径:默认情况下,Actuator的一些敏感端点路径(如/actuator/shutdown、/actuator/env)可能对未授权用户开放。2、系统破坏:攻击者可以通过Actuator端点的未授权访问,执行恶意操作,如修改配置、篡改数据、重启应用程序、关闭数据库连接等,从而破坏应用程序的正常运行。

weixin_44106034的博客 4万+

web渗透测试漏洞复现:Springboot Actuator未授权漏洞复现

pring Boot ActuatorSpring Boot 框架中非常重要的一个模块,设计用于增强应用程序在生产环境中的可观察性和管理能力。Actuator 提供了一系列内建的端点(Endpoints),这些端点可通过 HTTP 或 JMX 接口暴露应用的健康状况、度量指标、审计信息、环境属性、 Beans 列表等多种内部状态信息。

HACKONE的博客 5542

SpringBoot Actuator未授权访问漏洞修复

目前SpringBoot得框架,越来越广泛,大多数中小型企业,在开发新项目得时候。后端语言使用java得情况下,首选都会使用到SpringBoot。在很多得一些开源得框架中,例如: ruoyi若以,这些。不知道是出于什么原因?我们都会在这些框架中得pom文件中找到的依赖。嘿,这Actuator估计很多人都没有真真实实使用过,但是就会出现在pom文件中;这样导致,在做一些安全漏洞测试的时候,会出现漏洞问题。例如下面:对于这些漏洞,我们开始修复喽!!!

JHIII的博客 2万+

Spring Boot后端Actuator未授权访问漏洞解决

Spring Boot后端Actuator未授权访问漏洞解决

qq_46119575的博客 1万+

SpringbootActuator未授权访问漏洞

ActuatorSpringBoot 提供的用来对应用系统进行自省和监控的功能模块,借助于 Actuator 开发者可以很方便地对应用系统某些监控指标进行查看、统计等。然而,其默认配置会出现接口未授权访问,导致部分接口会泄露网站数据库连接信息等配置信息,使用Jolokia库特性甚至可以远程执行任意代码,获取服务器权限。

潇逗 1万+

Spring Boot Actuator未授权访问漏洞:从原理到实战修复指南

在微服务架构和云原生应用中,应用监控与健康检查是保障系统稳定性的关键技术。Spring Boot Actuator作为一套标准化的监控端点框架,其核心原理是通过预定义的HTTP端点暴露应用的内部状态、指标和配置信息,为运维人员提供了强大的实时诊断能力。这一机制的技术价值在于能够快速定位性能瓶颈、内存泄漏和依赖服务健康状况,是实现应用可观测性的重要组成部分。然而,若安全配置不当,这些端点可能直接暴露于公网,导致严重的未授权访问漏洞。攻击者可利用此漏洞获取环境变量、内存堆转储等敏感信息,进而引发数据泄露甚至系统

weixin_27875131的博客 314

SpringBoot Actuator未授权访问漏洞:原理、检测与防护实战指南

在微服务架构中,应用监控与管理端点是保障系统可观测性的核心组件。SpringBoot Actuator模块通过提供丰富的内置端点,实现了对应用健康状态、性能指标和环境配置的便捷监控。其工作原理基于“约定大于配置”的理念,默认暴露部分端点以提升开发效率。然而,若缺乏恰当的访问控制,这些端点将直接暴露敏感信息,如数据库连接字符串和API密钥,从而引发严重的安全风险。该漏洞的利用门槛极低,攻击者无需复杂技术即可获取内存转储文件或动态修改日志级别,实现静默信息搜集。在应用场景上,无论是传统单体应用还是云原生微服务,

devon2014的博客 435

修复SpringBoot Actuator未授权访问遇到的问题

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

web13116256725的博客 3520

【Spirngcloudalibaba】gateway下SpringBoot Actuator未授权访问漏洞修复

避免端点问题return 403;

m0_48771326的博客 3276

关于Spring Boot Actuator漏洞补救方案

SpringbootActuator信息泄露漏洞问题

qq_39712282的博客 1万+

Spring Boot Actuator未授权访问漏洞:风险自查与修复实战

Java应用开发中,监控与运维是保障系统稳定性的基石,Spring Boot Actuator作为内置的监控组件,能够提供健康检查、配置查看、线程转储等能力,极大提升了运维效率。然而,当监控端点被过度暴露且未设置访问控制时,便可能引发严重的安全风险。攻击者一旦未授权访问/env、/heapdump等敏感端点,就能窃取数据库密码、密钥甚至内存中的用户会话,直接威胁系统数据安全。这种未授权访问漏洞在大量生产项目中普遍存在,但常被忽视。实际利用时,heapdump端点可下载JVM堆快照,配合专业分析工具即可提取

weixin_28715953的博客 268

Spring Boot Actuator未授权访问安全指南:从原理到修复

Spring Boot Actuator作为应用监控与运维管理组件,提供了大量运行时端点,用于查看健康状态、环境配置、JVM堆快照等。若这些端点未受访问控制,将形成严重的安全隐患,即未授权访问。攻击者只需请求/actuator/env、/actuator/heapdump等路径即可获取敏感配置与内存数据。因此,必须理解Actuator端点暴露原理、配置分层以及常见风险。在生产环境中,开发者需要结合Spring Security、独立管理端口、细粒度ID过滤等方式,对Actuator端点进行安全加固,确保服务

weixin_31648507的博客 238

Spring Cloud Eureka未授权访问漏洞深度解析与Spring Security修复实战

在微服务架构中,服务注册与发现是核心基础组件,其安全性直接关系到整个系统的稳定与数据安全。服务注册中心默认配置下往往缺乏访问控制,导致未授权访问成为普遍风险,攻击者可借此获取完整的服务拓扑、实例信息,进而发起精准攻击。通过集成Spring Security实现HTTP Basic认证,可以为Eureka Server构建基础安全防线,有效防止服务注册信息泄露。这一方案不仅适用于修复Eureka未授权访问漏洞,其原理与配置思路也可迁移至解决类似组件的安全问题,如ZooKeeper、Redis等基础设施的未授权

weixin_30920513的博客 405

Spring Boot Actuator端点安全配置与漏洞修复实践

Spring Boot ActuatorSpring Boot框架提供的核心监控管理模块,它通过一系列HTTP端点暴露应用的内部状态,如健康检查、指标收集和环境信息。其工作原理是基于Spring Boot的自动配置机制,为生产环境应用提供开箱即用的运维能力。该技术的核心价值在于提升应用的可观测性和可维护性,使运维人员能够实时掌握应用运行状况。然而,若配置不当,敏感端点如/env(环境变量)和/heapdump(堆内存转储)可能被直接暴露,导致配置信息泄露甚至内存数据被窃取,这在微服务架构的API Gate

weixin_30644369的博客 388

SpringBoot Actuator未授权访问漏洞深度解析与多层次加固实战

在微服务架构中,应用监控与可观测性是保障系统稳定性的关键技术,它允许运维人员实时洞察应用内部状态。其实现原理通常通过暴露特定的HTTP端点来提供健康检查、性能指标和环境信息。然而,若这些端点缺乏适当的安全防护,便会引发严重的安全风险,例如敏感配置信息泄露和系统内部结构暴露。从技术价值看,合理的安全配置能平衡监控便利性与系统安全性,防止监控功能成为攻击入口。在实际应用场景中,SpringBoot Actuator作为广泛使用的监控组件,常因配置不当导致未授权访问。本文聚焦于Actuator端点的安全加固,深入

weixin_29322855的博客 218

从卡车定位系统漏洞剖析未授权访问:原理、危害与Spring Cloud安全实践

未授权访问是网络安全领域的核心漏洞类型之一,其本质在于系统未能对受保护的资源实施有效的身份认证与权限控制。从技术原理上看,这类漏洞常源于配置疏忽、默认设置、权限校验逻辑缺失或对内部网络环境的过度信任。在微服务与云原生架构日益普及的当下,其技术价值尤为凸显,一个微小的配置失误便可能导致整个系统门户大开。典型应用场景广泛存在于Web管理后台、API接口、监控端点以及各类中间件中,例如在物流车联网、物联网平台等涉及敏感数据与实时控制的系统中,危害尤为严重。本文以某卡车卫星定位系统的真实漏洞案例为切入点,深入探讨了

weixin_34197488的博客 354

未授权访问漏洞深度解析:从Redis到Nacos的30+实战案例与防御

未授权访问漏洞是网络安全领域一种常见且危害巨大的安全缺陷,其本质在于系统或组件在身份认证与授权校验环节存在缺陷,导致攻击者无需有效凭证即可访问受保护资源或执行敏感操作。从技术原理上看,这类漏洞通常源于配置错误、默认设置不安全、权限验证逻辑缺失或可被绕过。其技术价值在于,它绕过了复杂的认证机制,为攻击者提供了直接的入口点,常被用作网络渗透的突破口。在应用场景上,未授权访问广泛存在于各类基础设施、中间件、Web应用框架及云服务中,例如Redis、MongoDB、Docker API、Spring Boot Ac

weixin_34239169的博客 392

金和OA未授权访问漏洞剖析:从原理到实战修复

未授权访问是Web应用安全中常见的高危漏洞,其本质在于系统缺失对访问者身份与权限的有效验证。从技术原理看,这通常源于开发过程中忽略了授权环节,导致特定接口或资源无需认证即可被直接访问。这类漏洞危害显著,攻击者无需窃取凭证便能获取敏感数据或执行高权限操作,常成为内网渗透的突破口。在实践层面,未授权访问常出现在管理后台、API接口、配置文件及各类服务组件中,例如配置中心、缓存数据库的管理端口暴露。针对此类问题,修复需从代码层面添加严格的认证与授权检查,并遵循最小权限原则。本文以金和OA的sap-b1config

weixin_30655569的博客 374
上一篇: ELK(EFKE)日志告警监控系统集成笔记
DearLC
博客等级 码龄10年 18粉丝 27原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值