Eigene Forschung
CVE-2026-15583: SSRF im Grafana MCP Server erklärt
CVE-2026-15583 ist eine Server-Side Request Forgery (SSRF) nach dem Muster „Confused Deputy“ im Open-Source-Projekt Grafana MCP Server (mcp-grafana): Über den Request-Header X-Grafana-URL konnte ein Aufrufer ohne Anmeldung festlegen, an welchen Host der Server seine in der Umgebung hinterlegten Grafana-Zugangsdaten schickt. Der CVE-Eintrag bewertet die Schwachstelle mit CVSS 8.6 (hoch) und führt alle Versionen bis einschließlich 0.17.1 als betroffen. Behoben ist sie in Version 0.17.2 vom 13.07.2026, als Finder nennt der CVE-Eintrag CyberSec42.
- Zugangsdaten aus der Umgebung, also Service-Account-Token, veralteter API-Schlüssel, Basic-Auth und zusätzliche Header, folgten einer URL, die der Aufrufer per Header vorgeben konnte.
- Betroffen waren die HTTP-basierten Transporte (SSE und Streamable HTTP). Im Standardmodus stdio wertet der Server keine Request-Header aus.
- Bewertung laut CVE-Eintrag: CVSS 3.1 Basiswert 8.6, Vektor
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N, Klasse CWE-610. - Was Betreiber tun sollten: auf 0.17.2 oder neuer aktualisieren. War der HTTP-Endpunkt für nicht vertrauenswürdige Aufrufer erreichbar, empfehlen wir zusätzlich, den Service-Account-Token zu erneuern.
Hintergrund
Was ein MCP-Server ist und warum er Zugangsdaten hält.
Zum AbschnittDie Schwachstelle
Mechanik in einfachen Worten und technisch.
Zum AbschnittWer betroffen war
Versionen und Betriebsarten.
Zum AbschnittBehebung
Was der Fix ändert und was Betreiber tun sollten.
Zum AbschnittZeitleiste
Nur öffentlich belegte Daten.
Zum AbschnittDas Muster dahinter
Confused Deputy in MCP-Servern.
Zum AbschnittDie Fakten auf einen Blick
| Merkmal | Angabe |
|---|---|
| Kennung | CVE-2026-15583, GHSA-7cfp-pmw3-4j7r |
| Produkt | Grafana MCP Server (grafana/mcp-grafana) |
| Klasse | SSRF, Confused Deputy; CWE-610 „Externally Controlled Reference to a Resource in Another Sphere“ |
| Schwere | CVSS 3.1: 8.6, hoch (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N) |
| Betroffen | alle Versionen bis einschließlich 0.17.1 |
| Behoben | 0.17.2, veröffentlicht am 13.07.2026 |
| Veröffentlicht | 15.07.2026, Grafana Labs als CVE Numbering Authority (CNA) |
| Credit | „cybersec42“ als Finder im CVE-Eintrag |
Hintergrund: Was ein MCP-Server ist und warum er Zugangsdaten hält
Das Model Context Protocol (MCP) ist ein offener Standard, über den KI-Assistenten Werkzeuge und Datenquellen ansprechen. Ein MCP-Server sitzt dazwischen: Er nimmt die Werkzeugaufrufe eines KI-Clients entgegen und übersetzt sie in Aufrufe an ein Zielsystem. Der Grafana MCP Server gibt laut seiner Dokumentation KI-Assistenten Zugriff auf eine Grafana-Instanz. Damit lassen sich Metriken und Logs abfragen, Dashboards suchen und verwalten, Alert-Regeln pflegen und Funktionen wie Grafana Incident und Sift nutzen.
Für all das braucht der Server Zugangsdaten zu Grafana. Üblicherweise trägt der Betreiber die Adresse der Instanz und einen Service-Account-Token in Umgebungsvariablen ein (GRAFANA_URL und GRAFANA_SERVICE_ACCOUNT_TOKEN, früher GRAFANA_API_KEY). Ab dann handelt der Server mit den Rechten dieses Tokens, und zwar für jeden, der ihn ansprechen kann. Genau deshalb ist ein MCP-Server ein lohnendes Ziel: Er ist ein Stellvertreter mit Befugnissen. Grundsätzliches zur Absicherung solcher Server steht in unserem Leitfaden zu MCP-Servern; hier geht es um den konkreten Fall.
Wichtig für das Verständnis ist die Betriebsart, im MCP-Jargon der Transport. Der Grafana MCP Server kennt drei: stdio (der Standard, der KI-Client startet den Server als lokalen Prozess), sse und streamable-http (der Server läuft als Netzwerkdienst und nimmt HTTP-Anfragen an). Bei den HTTP-Transporten kann der Server Konfiguration zusätzlich pro Anfrage aus Headern lesen, darunter X-Grafana-URL für die Zieladresse und eigene Header für einen Token. Laut Quellcode ist das für Szenarien mit mehreren Grafana-Instanzen gedacht, eine nützliche Funktion. Die Schwachstelle lag im Zusammenspiel dieser Header mit den Zugangsdaten aus der Umgebung.
Die Schwachstelle
In einfachen Worten
Stellen Sie sich einen Kurier vor, der mit Ihrem Firmenausweis Unterlagen bei Ihrer Hausbank abholt. Jeder Auftraggeber darf ihm eine andere Adresse nennen, falls die Bank einmal mehrere Filialen hat. Der Kurier prüft aber nicht, ob die neue Adresse noch zu Ihrer Bank gehört, und zeigt den Firmenausweis an jeder Tür vor. Wer ihm die Adresse eines eigenen Büros nennt, bekommt Ihren Ausweis zu sehen und kann ihn kopieren.
So verhielt sich der Grafana MCP Server bis Version 0.17.1. Der Ausweis ist der Service-Account-Token, die Adresse ist der Header X-Grafana-URL.
Technisch
Der Server ermittelte die Zieladresse und die Zugangsdaten unabhängig voneinander, und für beides gab es einen eigenen Rückfall auf die Umgebung. So beschreibt es auch die Nachricht des Fix-Commits. Kam eine Anfrage mit X-Grafana-URL, aber ohne eigenen Token-Header, übernahm der Server die Adresse aus dem Header und den Token aus der Umgebung. Dasselbe galt für Basic-Auth und für zusätzliche Header, die der Betreiber per Umgebung konfiguriert hatte. Solche Header können selbst Geheimnisse tragen, etwa einen Authorization-Header. Der anschließende Aufruf an „Grafana“ ging damit samt Zugangsdaten des Betreibers an einen Host, den der Aufrufer bestimmt hatte.
Der Begriff Confused Deputy beschreibt genau diese Lage: Ein Dienst mit Befugnissen (der Stellvertreter) wird von jemandem ohne diese Befugnisse dazu gebracht, sie für fremde Zwecke einzusetzen. Der CVE-Eintrag hält außerdem fest, dass derselbe Mechanismus SSRF gegen beliebige interne Dienste ermöglicht, einschließlich Cloud-Metadaten-Endpunkten. Die Grafana-Advisory spricht von „credentialed SSRF“, also Anfragen an interne Ziele, die zusätzlich Zugangsdaten mitführen.
Zur Einordnung des Vektors: PR:N und UI:N bedeuten, dass weder eine Anmeldung noch eine Handlung eines Nutzers nötig war. S:C (Scope changed) bedeutet nach der CVSS-Spezifikation, dass die Auswirkung über die verwundbare Komponente hinausreicht. Verwundbar war der MCP-Server, betroffen ist die Grafana-Instanz, deren Token abfließen konnte. C:H steht für den Verlust der Vertraulichkeit, Integrität und Verfügbarkeit des Servers selbst sind laut Vektor nicht betroffen. Wir haben den Basiswert von 8.6 anhand der Formel der Spezifikation nachgerechnet.
Schematischer Ablauf
- Der Betreiber startet
mcp-grafanamit einem HTTP-Transport. Adresse und Token der eigenen Grafana-Instanz stehen in Umgebungsvariablen. - Ein Aufrufer, der den HTTP-Endpunkt erreicht, sendet eine MCP-Anfrage mit
X-Grafana-URLauf einen Host seiner Wahl und ohne eigenen Token. - Der Server übernimmt die Adresse aus dem Header und ergänzt die Zugangsdaten aus der Umgebung.
- Der nächste Werkzeugaufruf geht samt Token an den fremden Host, der den Token mitschneiden kann.
- Mit dem Token lässt sich die echte Grafana-Instanz direkt ansprechen, im Rahmen der Rechte des Service-Accounts.
Wir veröffentlichen bewusst keinen Exploit-Code. Die Beschreibung reicht, um die eigene Installation einzuordnen und den Fix nachzuvollziehen.
Wer betroffen war
Der CVE-Eintrag nennt ein einziges Produkt, den Grafana MCP Server, in allen Versionen bis einschließlich 0.17.1. Grafana selbst ist dort nicht als verwundbar aufgeführt. Die Grafana-Instanz ist aber der Ort, an dem ein abgeflossener Token wirkt. Laut Fix-Commit betraf das Verhalten die Transporte HTTP und SSE. Im Quellcode von 0.17.1 liest der stdio-Modus seine Konfiguration nur aus der Umgebung, nicht aus Request-Headern.
| Betriebsart | Einordnung bis 0.17.1 |
|---|---|
stdio (Standard, lokaler Prozess) | Keine Auswertung von Request-Headern, der beschriebene Weg besteht nicht |
sse oder streamable-http, Zugangsdaten in der Umgebung hinterlegt | Betroffen. Ausnutzbar für jeden, der den HTTP-Endpunkt erreicht, laut CVE-Eintrag ohne Anmeldung |
sse oder streamable-http, keine Zugangsdaten in der Umgebung | Es gab nichts, was dem Ziel des Aufrufers hätte folgen können |
Wie groß das Risiko im Einzelfall war, hängt davon ab, wer den HTTP-Endpunkt erreichen konnte: nur der lokale Rechner, ein internes Netz oder das Internet. Und davon, welche Rechte der Service-Account in Grafana hatte.
Behebung und was Betreiber jetzt tun sollten
Was der Fix in 0.17.2 ändert
Die Korrektur bindet Zugangsdaten aus der Umgebung an die in der Umgebung konfigurierte Grafana-Adresse. Zeigt X-Grafana-URL auf eine andere Instanz, hängt der Server weder Service-Account-Token noch veralteten API-Schlüssel, Basic-Auth oder zusätzliche Header aus der Umgebung an. Der Aufrufer muss für diese Adresse eigene Zugangsdaten mitbringen. Für den Vergleich werden beide Adressen vorher normalisiert. Header, die der Betreiber ausdrücklich zur Weiterleitung freigegeben hat (GRAFANA_FORWARD_HEADERS), werden weiterhin durchgereicht. Anfragen ohne X-Grafana-URL oder mit der konfigurierten Adresse verhalten sich wie vorher. Der Fix ergänzt außerdem Tests, die genau diese Fälle abdecken.
Das ist eine strukturelle Lösung: Statt einzelne Ziele zu sperren, hängt die Berechtigung jetzt am Ziel. Die Funktion für mehrere Instanzen bleibt erhalten.
Empfehlungen für Betreiber
Die folgenden Schritte sind unsere Empfehlungen, keine Vorgaben des Herstellers.
| Schritt | Maßnahme |
|---|---|
| 1. Version prüfen | Auf 0.17.2 oder neuer aktualisieren. Version 0.17.1 ist laut CVE-Eintrag noch betroffen, der Fix ist im Repository erst ab 0.17.2 enthalten. |
| 2. Token erneuern | Lief ein HTTP-Transport mit Zugangsdaten aus der Umgebung und war der Endpunkt für nicht vollständig vertrauenswürdige Aufrufer erreichbar: neuen Service-Account-Token ausstellen, alten widerrufen. Das gilt auch für Basic-Auth-Passwörter und Geheimnisse in zusätzlichen Headern. |
| 3. Rechte begrenzen | Dem Service-Account nur die Rollen geben, die die freigeschalteten Werkzeuge wirklich brauchen. |
| 4. Endpunkt abschirmen | Den HTTP-Endpunkt nicht ungeschützt ins Netz stellen, sondern an localhost oder ein internes Netz binden und eine Authentifizierung vorschalten. |
| 5. Ausgehende Verbindungen begrenzen | Dem Server nur Verbindungen zur eigenen Grafana-Instanz erlauben. Dann läuft auch eine künftige Fehlleitung ins Leere, und Metadaten-Endpunkte bleiben unerreichbar. |
| 6. Protokolle sichten | Wenn Ihr Reverse Proxy Request-Header protokolliert: nach Anfragen suchen, deren X-Grafana-URL von der konfigurierten Adresse abweicht. |
Zeitleiste
Aufgeführt sind nur Daten, die sich aus öffentlichen Quellen belegen lassen.
| Datum | Ereignis | Beleg |
|---|---|---|
| 07.07.2026 | Release 0.17.1, die letzte betroffene Version | GitHub-Release v0.17.1 |
| 13.07.2026 | CVE-Nummer durch Grafana Labs als CNA reserviert | CVE-Eintrag |
| 13.07.2026 | Fix gemergt (Pull Request #995), Release 0.17.2 | GitHub |
| 15.07.2026 | CVE-Eintrag, Grafana-Advisory und GHSA-7cfp-pmw3-4j7r veröffentlicht | CVE.org, grafana.com, GitHub |
| 15.07.2026 | CISA ergänzt den Eintrag um eine SSVC-Bewertung: Ausnutzung „none“, automatisierbar „yes“, technische Auswirkung „partial“ | CVE-Eintrag (CISA ADP) |
Die korrigierte Version stand damit zwei Tage vor der öffentlichen Beschreibung der Schwachstelle bereit. Das Datum der ursprünglichen Meldung ist nicht öffentlich dokumentiert und deshalb nicht aufgeführt.
Das Muster dahinter: Confused Deputy in MCP-Servern
Hinter CVE-2026-15583 steht ein Muster, das in MCP-Servern naheliegt. Viele Server halten Zugangsdaten des Betreibers und erlauben zugleich, Teile der Konfiguration pro Anfrage zu überschreiben, weil das für mehrere Mandanten oder Instanzen praktisch ist. Gefährlich wird es, sobald Ziel und Zugangsdaten getrennt aufgelöst werden und jede Hälfte für sich auf einen Standardwert zurückfällt. Dann bestimmt der Aufrufer das Ziel, und der Betreiber liefert die Zugangsdaten.
In unserer Erläuterung der OWASP MCP Top 10 berührt der Fall drei Klassen: den Confused Deputy aus Klasse 1, SSRF aus Klasse 5 und Zugangsdaten, die ungeprüft an ein fremdes Ziel weitergereicht werden, aus Klasse 7. Für Entwickler von MCP-Servern lassen sich daraus vier Regeln ableiten:
- Zugangsdaten an das Ziel binden. Ein Token gehört zu genau einem Ursprung. Ändert der Aufrufer das Ziel, bringt er eigene Zugangsdaten mit oder bekommt keine.
- Kein stiller Rückfall. Ein Standardwert für das Geheimnis darf nur greifen, wenn auch das Ziel der Standardwert ist.
- Vom Aufrufer gesetzte Ziele prüfen. Eine Allowlist für Schema und Host, Sperre für interne und Link-Local-Adressen, und bei Fehlern ablehnen statt durchlassen.
- Den Negativfall testen. Ein Test „fremde Adresse ohne Token, es darf kein Token hinausgehen“ fängt diese Klasse dauerhaft ab. Der Grafana-Fix enthält genau solche Tests.
Für Betreiber gilt die Kehrseite: Ein MCP-Server mit HTTP-Transport ist ein Netzwerkdienst mit Ihren Zugangsdaten. Er verdient dieselbe Behandlung wie jede andere API mit Geheimnissen, also Authentifizierung, minimale Rechte und begrenzte ausgehende Verbindungen.
Dank an das Grafana-Security-Team
Wir danken dem Security-Team von Grafana Labs für die koordinierte Zusammenarbeit. Die Meldung lief vertraulich über Grafanas Bug-Bounty-Programm, der CVE-Eintrag vermerkt als Quelle „BUG_BOUNTY“. Grafana Labs hat als CNA die CVE-Nummer vergeben, die korrigierte Version vor der Veröffentlichung bereitgestellt und Advisory und CVE-Eintrag mit Nennung von CyberSec42 veröffentlicht. So sollte koordinierte Offenlegung ablaufen: Betreiber konnten aktualisieren, bevor die Details öffentlich waren.
Hält Ihr MCP-Server Zugangsdaten, die er nicht hergeben sollte?
Wir prüfen MCP-Server und KI-Agenten im schriftlich vereinbarten Umfang: wohin Zugangsdaten fließen können, welche Ziele ein Aufrufer beeinflusst, wie die Transporte abgesichert sind und was ein Werkzeugaufruf tatsächlich erreicht. Jeder Befund kommt mit einem nachvollziehbaren Nachweis und einem konkreten Korrekturvorschlag. Mehr dazu unter KI-Pentest & MCP-Sicherheit.
KI-Pentest anfragenCyberSec42 ist eine unabhängige technische Sicherheitsprüfung, keine akkreditierte Zertifizierungsstelle und keine Rechtsberatung. CyberSec42 steht in keiner Verbindung zu Grafana Labs.
Häufige Fragen
Was ist CVE-2026-15583?
Eine SSRF-Schwachstelle nach dem Muster Confused Deputy im Grafana MCP Server. Über den Header X-Grafana-URL konnte ein Aufrufer ohne Anmeldung erreichen, dass der Server seine Grafana-Zugangsdaten aus der Umgebung an einen Host seiner Wahl schickt. Der CVE-Eintrag bewertet sie mit CVSS 8.6 (hoch).
Welche Versionen des Grafana MCP Servers sind betroffen?
Laut CVE-Eintrag alle Versionen bis einschließlich 0.17.1. Behoben ist die Schwachstelle in 0.17.2 vom 13.07.2026. Aktualisieren Sie auf 0.17.2 oder neuer.
Ist Grafana selbst betroffen?
Der CVE-Eintrag nennt als Produkt ausschließlich den Grafana MCP Server. Die Grafana-Instanz ist aber betroffen, sobald ein abgeflossener Token gegen sie eingesetzt wird, im Rahmen der Rechte des zugehörigen Service-Accounts.
Bin ich betroffen, wenn ich den Server über stdio nutze?
Laut Fix-Commit betraf das Verhalten die HTTP- und SSE-Transporte. Im stdio-Modus liest der Server seine Konfiguration aus der Umgebung, nicht aus Request-Headern. Aktualisieren sollten Sie trotzdem, weil sich die Betriebsart später ändern kann.
Muss ich meinen Service-Account-Token erneuern?
Wir empfehlen es, wenn Sie einen HTTP-Transport mit Zugangsdaten aus der Umgebung betrieben haben und der Endpunkt für Aufrufer erreichbar war, denen Sie nicht vollständig vertrauen. Ein neuer Token kostet wenig, ein abgeflossener bleibt gültig, bis er widerrufen wird.
Wurde die Schwachstelle aktiv ausgenutzt?
Die SSVC-Bewertung von CISA im CVE-Eintrag mit Stand 15.07.2026 lautet für die Ausnutzung „none“. Über spätere Ausnutzung treffen die öffentlichen Quellen keine Aussage.
Weiterlesen
- CVE-2026-114123: Fehlende Authentifizierung im D365 F&O MCP Server erklärt
- CVE-2026-104776: Dateilesen über kubectl_patch in mcp-server-kubernetes erklärt
- CVE-2026-110787: Wie der MCP-Endpunkt von pREST die expose-Einstellungen umging
- Forschung: unsere öffentlich dokumentierten Funde
- Die OWASP MCP Top 10, praktisch erklärt
- MCP-Server absichern: der praktische Leitfaden
- Leistung: KI-Pentest & MCP-Sicherheit
Quellen
- CVE.org: CVE-2026-15583
- NVD: CVE-2026-15583
- Grafana Labs Security Advisory: CVE-2026-15583
- GitHub Advisory Database: GHSA-7cfp-pmw3-4j7r
- GitHub: mcp-grafana Release v0.17.2
- GitHub: mcp-grafana Pull Request #995
- GitHub: Änderungen zwischen v0.17.1 und v0.17.2
- MITRE: CWE-610
- FIRST: CVSS v3.1 Specification
- Model Context Protocol: Transports