
Client proof-of-concept e laboratorio Docker che riproducono CVE-2026-15583, una SSRF confused-deputy non autenticata in Grafana MCP Server che espone i token degli account di servizio tramite X-Grafana-URL.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · CVE-2026-15583
Grafana MCP Server 0.17.0 - Grafana Labs
Sono @abraxas_null. Laboratorio su loopback. Il client è CVE-2026-15583-Abraxas-Labs.py.
Confused deputy. L'MCP HTTP non autenticato prende X-Grafana-URL dalla richiesta e il token del service-account dall'ambiente, quindi esegue GET {url}/api/frontend/settings con Authorization: Bearer. Un X-Grafana-Service-Account-Token vuoto ricade sulla variabile d'ambiente. Corretto in 0.17.1 evitando di inviare il token configurato a destinazioni non previste.
| 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 |
| Prodotto | Grafana MCP Server |
| Affette | tutte le versioni fino alla 0.17.0 (inclusa) |
| Corrette | 0.17.1 e successive |
| Auth | non autenticato |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1 |
POST /mcp o GET /sse con X-Grafana-URL puntato a un collector che controlli. Il server invia a te GRAFANA_SERVICE_ACCOUNT_TOKEN (o GRAFANA_API_KEY). Si tratta di SSRF con credenziali più furto di token. L'oracolo del lab è il token testimone nell'header Authorization del collector.
Ho mappato extractKeyGrafanaInfoFromReq / ExtractGrafanaInfoFromHeaders, poi NewGrafanaClient fetchPublicURL, poi AuthRoundTripper. Ho avviato mcp-grafana 0.17.0 con un collector su loopback.
Controlli di fallimento già presenti nel lab: eval/base64/system non è il testimone; una reverse shell non è il testimone; la 0.17.1 non deve inviare il token d'ambiente al collector.
Porta 18099. mcp-grafana 0.17.0. SSE o streamable-http raggiungibile. Token d'ambiente impostato. Collector sulla rete compose.
Target solo 127.0.0.1:18099 (o il loopback su cui hai fatto il bind).
cd lab
docker compose up --force-recreate
python3 ../CVE-2026-15583-Abraxas-Labs.py
Testimone: l'header Authorization del collector contiene GHSA15583-WITNESS.
Modi per perdere senza imparare nulla:
Aggiorna Grafana MCP Server alla 0.17.1 o successiva. Riesegui CVE-2026-15583-Abraxas-Labs.py contro la build corretta: il collector non deve vedere il token d'ambiente.
Abraxas Labs: abraxaslabs.tech · github.com/abraxas · @abraxas_null
GNU Affero GPL v3.0. Vedi LICENSE.
Il client comunica con il loopback. Usarlo contro sistemi che non possiedi non è autorizzato da Abraxas Labs. Nessuna garanzia.