
CVE-2026-15583을 재현하는 개념 증명 클라이언트 및 Docker 랩으로, Grafana MCP Server의 인증되지 않은 confused-deputy SSRF 취약점으로 X-Grafana-URL을 통해 서비스 계정 토큰이 유출됩니다.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · CVE-2026-15583
Grafana MCP Server 0.17.0 - Grafana Labs
저는 @abraxas_null입니다. 루프백 랩입니다. 클라이언트는 CVE-2026-15583-Abraxas-Labs.py입니다.
혼동된 대리인(confused deputy) 문제입니다. 인증되지 않은 MCP HTTP는 요청에서 X-Grafana-URL을, 환경 변수에서 서비스 계정 토큰을 가져온 뒤 Authorization: Bearer와 함께 {url}/api/frontend/settings를 GET합니다. X-Grafana-Service-Account-Token이 비어 있으면 환경 변수로 폴백합니다. 0.17.1에서 의도하지 않은 대상에 설정된 토큰을 전송하지 않도록 수정되었습니다.
| CVE | CVE-2026-15583 · CVE.org |
| CWE | CWE-918 |
| CVSS | High: 8.6 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| 제품 | Grafana MCP Server |
| 영향받는 버전 | 0.17.0까지(포함) 모든 버전 |
| 패치됨 | 0.17.1 이상 |
| 인증 | 인증되지 않음 |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1 전용 |
X-Grafana-URL을 공격자가 제어하는 수집기(collector)로 지정하여 POST /mcp 또는 GET /sse를 보냅니다. 서버는 GRAFANA_SERVICE_ACCOUNT_TOKEN(또는 GRAFANA_API_KEY)을 공격자에게 전송합니다. 이는 자격 증명이 포함된 SSRF이자 토큰 탈취입니다. 랩의 오라클은 수집기 Authorization 헤더에 있는 증인(witness) 토큰입니다.
extractKeyGrafanaInfoFromReq / ExtractGrafanaInfoFromHeaders, 그다음 NewGrafanaClient의 fetchPublicURL, 그다음 AuthRoundTripper를 매핑했습니다. 루프백 수집기와 함께 mcp-grafana 0.17.0을 구동했습니다.
랩에 이미 포함된 실패 제어(fail-control): eval/base64/system은 증인이 아니며, 리버스 셸은 증인이 아니고, 0.17.1은 환경 변수 토큰을 수집기로 전송해서는 안 됩니다.
포트 18099. mcp-grafana 0.17.0. SSE 또는 streamable-http에 접근 가능. 환경 변수 토큰 설정됨. 수집기는 compose 네트워크에 위치.
대상은 오직 127.0.0.1:18099(또는 바인딩한 루프백)입니다.
cd lab
docker compose up --force-recreate
python3 ../CVE-2026-15583-Abraxas-Labs.py
증인: 수집기의 Authorization 헤더에 GHSA15583-WITNESS가 포함됩니다.
아무것도 배우지 못하고 실패하는 방법:
Grafana MCP Server를 0.17.1 이상으로 업데이트하십시오. 패치된 빌드에 대해 CVE-2026-15583-Abraxas-Labs.py를 다시 실행하십시오: 수집기가 환경 변수 토큰을 보아서는 안 됩니다.
Abraxas Labs: abraxaslabs.tech · github.com/abraxas · @abraxas_null
GNU Affero GPL v3.0. LICENSE를 참조하십시오.
클라이언트는 루프백과 통신합니다. 소유하지 않은 시스템에 대해 사용하는 것은 Abraxas Labs에 의해 승인되지 않습니다. 보증은 없습니다.