一、背景
漏洞名称 :Spring Boot Actuator未授权访问漏洞 【原理扫描】
风险等级:中
详细描述 :
Actuator 是 springboot 提供的用来对应用系统进行自省和监控的功能模块,借助于 Actuator 开发者可以很方便地对应用系统某些监控指标进行查看、统计等。在 Actuator 启用的情况下,如果没有做好相关权限控制,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息。
二、问题分析与复现
部署的微服务项目中,访问 http://ip:port/actuator 时,未受到任何权限控制,直接暴露了 Actuator 的接口信息。应用在生产环境中暴露了潜在的敏感信息,存在较大的安全隐患。
通过浏览器或命令行工具(如 curl)可以访问下面的端点:
/actuator/health/actuator/env/actuator/info- ...
这些端点中,env 和 health(开启详细信息时)可能泄露系统环境变量、配置属性、数据库连接信息等敏感数据。
三、解决方法
1. 更改初始配置的 3 种方式
漏洞扫描时项目初始配置如下:
yaml
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: always
浏览器访问或使用 curl -i http://ip:port/actuator请求,会返回敏感数据。
1.1 开放指定端点,显示简略信息
然后调整到下面这样:
yaml
management:
endpoints:
web:
exposure:
# 我用的springboot版本是2.3,actuator接口还是会返回200,但是子接口模禁掉了。
#exclude: '*'
include: "health,info"
endpoint:
health:
show-details: never
改成这个后浏览器可以直接访问,访问结果如图所示。


敏感的环境信息没有返回,/actuator 返回的是导航菜单,/actuator/health 返回服务是否存活,所以基本可以确认安全了。
show-details 控制接口内容返回详细程度,有三个可选值:
| 可选值 | 含义 | 返回内容 | 安全性 | 适用场景 |
|---|---|---|---|---|
NEVER (默认值) |
"从不显示细节" 访问时只告诉你"UP"还是"DOWN",不解释原因。 | {"status": "UP"} |
🟢 高 (最安全) | 生产环境推荐。 给 K8s 或负载均衡做存活检查用。 |
WHEN_AUTHORIZED |
"认证后显示" 游客看简略信息,登录后的管理员看详细信息。 | 未登录: {"status": "UP"} 已登录: 显示磁盘、DB 等详情 |
🟡 中 (需配置 Security) | 既需要监控又需要安全的场景。 前提: 必须集成了 Spring Security 并配置了角色。 |
ALWAYS |
"总是显示" 只要能访问接口,就可以查看详细内容。 | {"status": "UP", "components": {"db": {...}, "diskSpace": {...}}} |
🔴 低 (危险) | 仅限开发/测试环境。 |
虽然人工确认安全,但是安全扫描工具还是判定为漏洞,这时有两种解决方式,一种是变更默认路径,一种是彻底关闭Actuator。
1.2 修改默认访问路径
运维时需要检查项目的健康状况等信息,不适合关闭Actuator,所以只能修改默认访问路径,记得用到Actuator 的配置或路径也需要同步修改。漏洞工具只会扫描默认路径,这也是另外一种规避,但需要自己配置正确,不要返回敏感信息。
yaml
management:
endpoints:
web:
exposure:
include: "health,info"
base-path: /checkactuator
# 这个配置在某些springboot版本不一定有效,作用是关掉 /actuator 接口。
#discovery:
#enabled: false
endpoint:
health:
show-details: never
重启服务后访问,,访问原默认路径:

访问修改后路径:

好了,扫描通过。
1.3 彻底关闭
如果确定不使用了,可以选择彻底禁用 Actuator 模块,防止任何端点在生产环境中暴露。
yaml
management:
server:
port: -1
这个配置直接关闭了 Actuator 的服务端口,使其完全不可访问,验证结果如下:
/actuator/health→ 404/actuator/env→ 404/actuator/info→ 404
通过 curl、浏览器等方式均无法访问,说明已彻底关闭。
2. Spring Security 配置(未尝试)
官方建议使用 Spring Security 对 Actuator 接口添加认证控制,例如:
yaml
spring:
security:
user:
name: admin
password: xxx
这个配置会影响整个应用的安全机制,导致所有接口均需登录认证。避免影响正常业务调用,没有调试这个。
还有通过自定义 SecurityConfig 类,对 /actuator/** 接口设置认证规则,项目由客户维护,改代码重测有点麻烦,没用它。
3. Nginx 拦截
使用 Nginx 拒绝所有 /actuator 开头的请求:
nginx
location ^~ /actuator {
deny all;
return 403;
}
有用。
四、总结
Spring Boot Actuator 提供了丰富的监控能力,但在未做好权限控制的情况下存在严重的安全风险。尤其是在微服务架构中,Actuator 常被用于服务发现与健康检查,其默认暴露行为容易被忽视,成为安全薄弱点。
本次修复过程的关键经验总结如下:
- 配置项需精确匹配版本:部分配置项在不同 Spring Boot 版本中行为存在差异,需结合版本文档验证。
- 默认配置不可依赖:不要假设 Actuator 默认是安全的,必须手动限制暴露的端点。
- 彻底关闭是最保险的措施:如果线上无必要使用 Actuator,建议直接关闭,避免漏洞根源。