
Client de preuve de concept et lab Docker reproduisant CVE-2026-15583, une SSRF de type confused-deputy non authentifiée dans Grafana MCP Server qui exfiltre les jetons de compte de service via X-Grafana-URL.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · CVE-2026-15583
Write-up : https://abraxaslabs.tech/research/CVE-2026-15583
Grafana MCP Server 0.17.0 - Grafana Labs
Je suis @abraxas_null. Lab en loopback. Le client est CVE-2026-15583-Abraxas-Labs.py.
Confused deputy. Le MCP HTTP non authentifié récupère X-Grafana-URL depuis la requête et le token de compte de service depuis l'environnement, puis effectue un GET {url}/api/frontend/settings avec Authorization: Bearer. Un X-Grafana-Service-Account-Token vide retombe sur la variable d'environnement. Corrigé dans la 0.17.1 en n'envoyant plus le token configuré vers des destinations non prévues.
| CVE | CVE-2026-15583 · CVE.org |
| CWE | CWE-918 |
| CVSS | Élevé : 8.6 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| Produit | Grafana MCP Server |
| Affecté | toutes les versions jusqu'à 0.17.0 (incluse) |
| Corrigé | 0.17.1 et ultérieures |
| Auth | non authentifié |
| Licence | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 uniquement |
POST /mcp ou GET /sse avec X-Grafana-URL pointant vers un collecteur que vous contrôlez. Le serveur vous transmet GRAFANA_SERVICE_ACCOUNT_TOKEN (ou GRAFANA_API_KEY). C'est une SSRF authentifiée doublée d'un vol de token. L'oracle du lab est le token témoin présent dans l'en-tête Authorization du collecteur.
J'ai cartographié extractKeyGrafanaInfoFromReq / ExtractGrafanaInfoFromHeaders, puis NewGrafanaClient fetchPublicURL, puis AuthRoundTripper. J'ai monté mcp-grafana 0.17.0 avec un collecteur en loopback.
Contrôles d'échec déjà en place dans le lab : eval/base64/system n'est pas le témoin ; un reverse shell n'est pas le témoin ; la 0.17.1 ne doit pas envoyer le token d'environnement au collecteur.
Port 18099. mcp-grafana 0.17.0. SSE ou streamable-http accessible. Token d'environnement défini. Collecteur sur le réseau compose.
Cible uniquement 127.0.0.1:18099 (ou le loopback que vous avez lié).
python3 CVE-2026-15583-Abraxas-Labs.py
ou
cd lab
./run.sh
Témoin : l'en-tête Authorization du collecteur contient GHSA15583-WITNESS.
Façons d'échouer sans rien apprendre :
Mettez à jour Grafana MCP Server vers 0.17.1 ou une version plus récente. Relancez CVE-2026-15583-Abraxas-Labs.py contre la version corrigée : le collecteur ne doit pas voir le jeton d'environnement.
Abraxas Labs : abraxaslabs.tech · github.com/abraxas · @abraxas_null
GNU Affero GPL v3.0. Voir LICENSE.
Le client communique avec la boucle locale. Son utilisation contre des systèmes qui ne vous appartiennent pas n'est pas autorisée par Abraxas Labs. Aucune garantie.