【挖洞实录】记一次 CVSS 9.8 的奇妙探险:从无鉴权 Prometheus 到接管内部监控网络

在渗透测试的实战中,我们经常会把目光聚焦在复杂的 RCE、花里胡哨的反序列化漏洞上。但有时候,最致命的打击往往来自最基础的“疏忽”。今天,我想和大家分享我近期在某个受邀授权测试项目(暂称其为 [Redacted].com)中挖掘到的一个极其硬核的漏洞链:仅仅因为一个无鉴权的监控面板,不仅导致了整个内部网络拓扑和云凭据的泄露,还能一键瘫痪整个监控基础设施。

0x01 故事背景

“监控系统”在很多开发者眼里,只是一个用来看 CPU 占用率和流量波形图的后台工具。如果它不小心暴露在公网上,大不了就是被别人看一眼服务器负载嘛,能有多大危害?

本以为到此为止,然而,接下来的发现彻底推翻了我的假设。当监控系统(Prometheus)与 Go 语言强大的底层性能分析工具(pprof)在没有任何访问控制(Basic Auth / OAuth)的情况下同时暴露在公网上时,它就不再是一个“看图工具”了——它变成了一张内部网络的活地图,一个堆内存的提款机,甚至是一个完美的 DoS 武器

0x02 信息收集

在这个项目的初期阶段,我按部就班地进行着资产梳理。通过一些常规的子域名枚举,我注意到了一个特殊的资产:prometheus.partner.[Redacted].com。

访问该域名后,映入眼帘的是熟悉的 Prometheus 原生 UI,而且没有任何登录框,直接长驱直入。

专业直觉告诉我,事情不简单:
很多新手师傅看到这种页面,可能会点一点 Metrics,截个图交个信息泄露(Low/Medium 级别)就结束了。但我脑子里立刻闪过两个念头:

  1. Prometheus 自身拥有强大的 API,是否能利用这些 API 窃取核心配置?
  2. Prometheus 是用 Go 语言编写的。Go 开发者在排查性能问题时,经常会引入 net/http/pprof 库。如果 Prometheus 的端口对外开放,这个调试接口是不是也跟着裸奔了?

0x03 深入利用

这是本次探险的核心。我将攻击链路拆分为两个维度:API 信息掠夺 与 Go pprof 的降维打击

阶段一:API 维度的“内部侦察”

我首先将目标对准了 Prometheus 的核心 API 端点。

正常的监控请求通常是拉取数据,但我构造了对配置端点的访问。当我请求 /api/v1/status/config 时,服务器直接吐出了完整的 YAML 配置文件明文:

GET /api/v1/status/config HTTP/1.1
Host: prometheus.partner.[Redacted].com
Accept: application/json

里面赫然写着配置文件的绝对路径(/etc/prometheus/prometheus.yml),以及后端集成的云服务(Azure, AWS, Kubernetes)。

紧接着,我又访问了 /api/v1/targets 端点。这个端点简直是渗透测试中的“作弊码”——它完整列出了目标公司内网的所有监控节点

不需要进行任何危险的 Nmap 扫描,我已经掌握了目标内网的核心资产分布(比如 pagespeed-exporter、内部容器 ID 等),直接绕过了所有的边界防火墙隔离保护。

阶段二:深入 Go pprof,逻辑转换的瞬间

既然是 Go 写的服务,我立刻在浏览器地址栏敲下了那个让我心跳加速的 URI:
https://prometheus.partner.[Redacted].com/debug/pprof/

页面成功加载!完整的 pprof 调试目录暴露无遗。从普通的监控数据泄露,瞬间升级为系统底层的交互。

致命一击 1:Heap 内存中的云凭证

我访问了 /debug/pprof/heap,下载了当前的堆内存分配快照。
在本地,我使用 Go 自带的工具启动了可视化分析:

go tool pprof -http=:8080 heap

在内存堆栈中,我清晰地追踪到了处理 Azure/AWS SDK 的相关函数调用。这意味着什么?这意味着在内存中存在高概率未被垃圾回收的云平台 API Key 和认证凭证!这不仅是技术信息的泄露,更是核心商业机密的暴露。

致命一击 2:无中生有的 Remote DoS

更夸张的是 /debug/pprof/profile 端点。在 Go 中,访问这个接口会让程序进行 CPU 性能采样。
正常的请求是这样的:
GET /debug/pprof/profile?seconds=30

逻辑转换: 既然这是一个无需鉴权且极其消耗 CPU 资源的底层操作,如果我使用多线程,在同一时间发起大量请求呢?
没错,此时 Prometheus 必须分配所有可用的 CPU 周期来生成这些 Profile 文件。在生产环境中,这会直接导致 Prometheus 进程停止抓取数据,服务彻底无响应,造成关键监控基础设施的 拒绝服务 (DoS)

0x04 漏洞影响

经过整理,我将这个看似简单的“未授权访问”定级为 Critical (CVSS 3.1: 9.8)
为什么?让我们把视角切回真实的生产场景:

  1. 暗网级的信息搜集 (Infrastructure Takeover): 攻击者相当于获得了目标公司内部基础架构的上帝视角(Living Map)。
  2. SSRF 与横向移动的跳板 (Lateral Movement): 泄露出的 pagespeed-exporter 等内部 Agent,极易被用作 SSRF 的跳板,进一步攻击内网原本不可达的云元数据服务(如 169.254.169.254)。
  3. 监控致盲 (Monitoring Blackout): 攻击者可以利用 DoS 向量,兵不血刃地瘫痪整个监控系统。想象一下,攻击者在执行其他恶意入侵(如数据窃取)的同时,利用多线程压垮 Prometheus,让运维团队的告警大屏变成一片死寂的黑色。这才是最让人后背发凉的。

0x05 防御与反思

从攻击者的角度爽完之后,作为技术研究员,我们必须回归建设者的身份。产生这个漏洞的根源 (Root Cause) 其实非常经典:缺乏对管理平面与数据平面的网络隔离,且默认信任了内部服务。

对于广大开发者和运维师傅们,我的加固建议如下:

  1. 核心 API 鉴权机制: 绝对、绝对不能让 Prometheus 裸奔。必须为所有 Prometheus 和 pprof 端点实施强认证(Basic Auth, OAuth 等)。
  2. 生产环境关闭调试: 在生产环境中,除非绝对必要,否则在编译或启动时应禁用 /debug/pprof 接口。Go 的 pprof 极其强大,但暴露给黑客时,它就是一把锋利的刀。
  3. 网络架构隔离: 监控系统 API 不应直接暴露在公网(Public Internet),应置于安全的管理内网,仅通过 VPN、堡垒机或零信任架构(Zero Trust)访问。

这次挖洞经历让我深刻体会到,渗透测试不仅仅是跑工具和砸 Payload,更是对目标系统底层运行逻辑的理解与发散。一个小小的 Go 调试接口,也能撕开企业内网的巨大裂口。

保持好奇,敬畏技术,我们下个漏洞见!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注