文章总结: 本文分析Prometheus服务发现机制引发的敏感信息泄露风险。由于默认保留元数据且无脱敏,攻击者可获取SSH密钥及K8s凭据等敏感信息,甚至利用管理接口删除数据或关闭服务。建议实施访问认证、禁用高危启动参数、避免在元数据中存储凭据,并严格执行网络隔离策略,将访问控制纳入云原生安全基线。 综合评分: 87 文章分类: 漏洞分析,云安全,数据泄露,安全建设
Prometheus 服务发现机制导致的敏感信息泄露分析
原创
黑熊先生 黑熊先生
黑熊安全
2026年2月27日 11:09 日本
一、背景
在云原生环境中,Prometheus 被广泛用于基础设施与业务监控。然而,在大量实际部署案例中,Prometheus 常因未授权访问或错误暴露而成为内部信息泄露的重要入口。
相比传统漏洞利用,Prometheus 的风险往往并不来源于代码缺陷,而是其服务发现(Service Discovery)机制天然暴露大量运行时元数据(metadata)。
这些数据一旦被未授权访问,可能直接泄露:
- SSH 登录用户信息
- Kubernetes 集群敏感标签
- 服务注册中心账号密码
- API 访问凭据
- 云主机元数据
本文重点分析:
Prometheus 服务发现 metadata 的泄露方式,以及管理接口暴露带来的高危风险。
二、Prometheus 服务发现工作原理
Prometheus 为实现自动化监控目标发现,支持多种 Service Discovery 机制,例如:
- Kubernetes
- GCE / GCP
- Consul
- Nacos
- Eureka
- EC2 等云平台
其工作流程如下:
云平台 / 注册中心 API
↓
Service Discovery
↓
生成 __meta_* 标签
↓
relabel_configs 处理
↓
加入监控 targets
Prometheus 会生成大量以 __meta_* 开头的标签,用于描述目标实例上下文信息。
关键问题在于:
Prometheus 不会对 Service Discovery metadata 进行脱敏或过滤。
因此,一旦 Web 接口暴露,这些信息将被完整返回。
三、可能泄露的敏感字段
1. GCE / GCP 环境
可能出现:
__meta_gce_metadata_ssh_keys
可能泄露:
- SSH 登录用户名
- SSH 公钥信息
攻击者可据此识别云主机账户体系。
2. Kubernetes 环境
启用:
kubernetes_sd_configs
后可能暴露:
__meta_kubernetes_pod_annotation_*
__meta_kubernetes_secret_*
潜在泄露内容包括:
- ServiceAccount Token
- 内部 API 凭据
- Annotation 中存储的认证信息
3. Consul / Nacos / Eureka
典型 metadata 字段:
__meta_consul_service_metadata_user_name
__meta_consul_service_metadata_user_password
或:
__meta_nacos_metadata_user
__meta_eureka_app_instance_metadata_user_password
若业务将账号密码写入 metadata,则 Prometheus 会直接采集并暴露。
四、敏感信息实际泄露接口
(1)/api/v1/targets —— 核心泄露接口
/api/v1/targets
重点字段:
discoveredLabels
示例:
{
"activeTargets": [
{
"discoveredLabels": {
"__meta_consul_service_metadata_user_name": "admin",
"__meta_consul_service_metadata_user_password": "123456"
}
}
]
}
特点:
- 包含完整服务发现结果
- 未脱敏 metadata
- 最常见泄露来源
(2)/service-discovery —— 最完整泄露页面
http://IP:9090/service-discovery
展示内容:
- 原始服务发现数据
- 未经过 relabel 的标签
- 全部
__meta_*字段
很多环境限制 API 却忽略 UI 权限控制,从而造成泄露。
(3)/api/v1/targets/metadata —— 补充接口
/api/v1/targets/metadata
返回:
- metric metadata
- job 信息
- 实例标签
常用于环境指纹识别。
五、未授权访问漏洞—高危管理接口暴露风险(Admin API 与 Lifecycle API)
除信息泄露外,Prometheus 在特定启动参数开启时,还可能暴露高危管理接口。这两个参数默认是false,但是当开启时可以进行未授权删除和关闭监控服务器的权限。
接口地址:/api/v1/status/flags
1. Admin API(数据管理接口)
当启动参数开启:
--web.enable-admin-api
将开放 TSDB 管理能力。
删除监控指标
POST /api/v1/admin/tsdb/delete_series
示例:
POST /api/v1/admin/tsdb/delete_series?match[]={__name__=~".+"}
影响:
- 删除匹配时间序列
- 若匹配全部指标 ⇒ 等同清空监控数据
清理数据库数据块
POST /api/v1/admin/tsdb/clean_tombstones
作用:
- 永久删除已标记数据
- 释放磁盘空间
2. Lifecycle API(生命周期控制接口)
当开启:
--web.enable-lifecycle
将允许远程控制 Prometheus 运行状态。
关闭监控服务
POST /-/quit
效果:
- 优雅关闭 Prometheus 进程
- 监控系统立即停止
热加载配置
POST /-/reload
作用:
- 重新加载 prometheus.yml
- 无需重启服务
3. 接口对应关系
| 启动参数 | 危险接口 | 功能 | | — | — | — | | web.enable-admin-api | /api/v1/admin/tsdb/delete_series | 删除指标 | | | /api/v1/admin/tsdb/clean_tombstones | 清理数据 | | web.enable-lifecycle | /-/quit | 关闭服务 | | | /-/reload | 重载配置 |
4. 未授权风险原因
若满足以下条件:
- Prometheus 暴露公网
- 未设置访问认证
- 启用了上述参数
攻击者仅需访问:
/api/v1/status/flags
即可确认:
- 是否可删除全部监控数据
- 是否可远程关闭监控系统
这类风险通常属于高危运维破坏面。
六、风险本质分析
Prometheus 的设计目标是:
最大化监控可观测性,而非安全隔离。
因此:
- metadata 必须完整保留
- 服务发现默认可查询
- 管理接口可被远程调用(若启用)
攻击链通常表现为:
Prometheus 未授权访问
↓
Service Discovery 信息泄露
↓
获取内部凭据
↓
调用管理接口或横向移动
Prometheus 往往成为内网攻击的起点。
七、安全加固建议
1. 禁止公网暴露 Prometheus
仅允许内网访问。
2. 增加访问认证
建议通过反向代理实现:
- Basic Authentication
- OAuth2 Proxy
- SSO 接入
3. 禁止开启高危参数
避免启用:
--web.enable-admin-api
--web.enable-lifecycle
4. 避免在 metadata 中存储凭据
禁止在:
- Service Metadata
- Annotation
- URL 参数
中保存账号密码。
5. 网络访问控制
仅允许:
- Grafana
- 运维网段
- 监控系统
访问 Prometheus Web 端口。
八、总结
Prometheus 的安全风险往往被低估。
其真正危险之处并非远程执行漏洞,而是:
信息聚合能力 + 管理接口控制能力的组合风险。
一旦访问控制缺失,攻击者不仅能够获取:
- 内网拓扑结构
- 服务认证信息
- 云主机登录数据
甚至可能:
- 删除全部监控指标
- 远程关闭监控系统
因此,Prometheus 接口访问控制应被纳入云原生安全基线的核心要求。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:黑熊安全 黑熊先生 黑熊先生《Prometheus 服务发现机制导致的敏感信息泄露分析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论