Grafana MCP Server exponiert unauthentifizierte SSE-Schnittstelle und ermöglicht Remote-Manipulation von Dashboards
Autor: Evan Harris
Risiko: Niedrig
Betroffene Komponente: Grafana MCP Server
Einleitung
Im Rahmen unserer laufenden Sicherheitsforschung zu Model-Context-Protocol-Servern (MCP) haben wir eine Sicherheitslücke im Grafana MCP Server identifiziert, die durch unauthentifizierte Netzwerkexposition unbefugten Zugriff auf Grafana-Instanzen ermöglicht.
Überblick
Wird der Grafana MCP Server mit dem Flag -t sse gestartet, exponiert er eine nicht authentifizierte Server-Sent-Events-Schnittstelle (SSE), die standardmäßig an 0.0.0.0:8000 bindet, wenn er über den in der README des MCP Servers angegebenen Docker-Befehl ausgeführt wird. Diese Konfiguration erlaubt es entfernten Angreifern mit Netzwerkzugriff, ohne Authentifizierung mit den Grafana-Instanzen der Opfer zu interagieren.
Technische Details
Das Problem
Bei der Konfiguration mit SSE-Transport über Docker verhält sich der Server wie folgt:
- Er bindet an
0.0.0.0:8000und ist damit von jedem Host im Netzwerk erreichbar - Er bietet keinen Authentifizierungsmechanismus für den Endpunkt
/sse - Er vertraut jedem verbundenen Client und erlaubt ihm die Ausführung privilegierter Grafana-Operationen
- Er verwendet den
GRAFANA_API_KEYdes Opfers, um Aktionen in dessen Namen durchzuführen
Verwundbare Konfiguration
Gemäß der README des Projekts mit Ergänzung des SSE-Transports:
docker run --rm -p 8000:8000 \
-e GRAFANA_URL \
-e GRAFANA_API_KEY \
mcp/grafana -debug -t sse
Dies exponiert den Endpunkt unter http://victim_ip:8000/sse gegenüber dem gesamten Netzwerk.
Angriffsszenario
Aufbau beim Opfer
Ein Benutzer, der der Dokumentation folgt:
- Lädt das Docker-Image des Grafana MCP Servers herunter
- Konfiguriert die Umgebungsvariablen
GRAFANA_URLundGRAFANA_API_KEYfür seine Grafana-Instanz - Aktiviert den SSE-Transport, indem er
-t ssezum Docker-Befehl hinzufügt - Exponiert unwissentlich
http://their_ip:8000/ssegegenüber Angreifern auf Netzwerkebene
Ausnutzung durch den Angreifer
Ein Angreifer mit Netzwerkzugriff kann:
- Den exponierten Endpunkt unter
http://victim_ip:8000/sseentdecken - Mit dem MCP Inspector eine Verbindung herstellen:
npx @modelcontextprotocol/inspector sse --port 8000 - Unbefugte Operationen ausführen unter Verwendung der verfügbaren Grafana-Werkzeuge
- Dashboards manipulieren, indem er sie auflistet, erstellt, aktualisiert oder löscht
Proof of Concept
Angriffsdemonstration
Mit dem MCP Inspector kann ein Angreifer eine Verbindung zum exponierten SSE-Endpunkt herstellen und Grafana-Operationen ausführen:
- Teams auflisten, um die Organisationsstruktur zu verstehen
- Dashboards auflisten, um sensible Business-Intelligence-Daten zu identifizieren
- Dashboards erstellen, um bösartige Inhalte einzuschleusen
- Dashboards aktualisieren, um bestehende Visualisierungen zu verändern
- Auf Datenquellen und andere privilegierte Grafana-Funktionen zugreifen
Bewertung der Auswirkungen
Dieser Angriffsvektor ermöglicht:
Verletzung der Vertraulichkeit
- Entdeckung von Datenquellen, wodurch Backend-Systeme und Konfigurationen offengelegt werden
- Aufzählung von Dashboards, wodurch sensible Business-Intelligence-Daten preisgegeben werden
- Preisgabe von Benutzer- und Teaminformationen über die MCP-Schnittstelle
Beeinträchtigung der Integrität
- Einschleusen bösartiger Inhalte, was Benutzer möglicherweise in die Irre führt
- Manipulation der Konfiguration, was die Genauigkeit der Visualisierungen beeinträchtigt
- Manipulation von Dashboards durch Erstellen, Ändern oder Löschen
Auswirkungen auf die Verfügbarkeit
- Dienstunterbrechung durch Löschen oder Beschädigen von Dashboards
- Potenzial für Denial of Service durch Systemüberlastung
- Ressourcenerschöpfung durch übermäßige Werkzeuganfragen
Risikofaktoren
- Erfordernis von Netzwerkzugriff: Angreifer benötigen Netzwerkzugriff auf das Opfer
- Keine Authentifizierung: Jeder Client kann sich verbinden und privilegierte Operationen ausführen
- Standard-Docker-Bindung: Die Exposition an
0.0.0.0vergrößert die Angriffsfläche - Unauffälliger Betrieb: Angriffe können ohne Wissen des Benutzers erfolgen
Empfohlene Gegenmaßnahmen
Für Benutzer
- Verwenden Sie
-t ssenicht in gemeinsam genutzten oder nicht vertrauenswürdigen Netzwerken - Setzen Sie Beschränkungen auf Netzwerkebene mithilfe von Firewalls oder VPNs um
- Verwenden Sie eine Localhost-Bindung, indem Sie das Docker-Port-Mapping auf
127.0.0.1:8000:8000ändern - Überwachen Sie die Grafana-Protokolle auf unerwartete API-Aktivität
Zeitleiste der Offenlegung
- 2024-05-22: Schwachstelle entdeckt und über Intigriti VDP an Grafana gemeldet
- 2024-05-23: Grafana bestätigt den Eingang des Berichts
- 2024-05-23: Bericht vom Grafana-Team als “Informative” eingestuft
- 2024-05-23: Grafana erteilt die Erlaubnis, die Ergebnisse öffentlich zu veröffentlichen
- 2025-09-02: Öffentliche Offenlegung und Veröffentlichung des Sicherheitshinweises
Fazit
Die unauthentifizierte SSE-Schnittstelle im Grafana MCP Server verdeutlicht, wie wichtig sichere Standardeinstellungen bei Entwicklungswerkzeugen sind, die KI-Agenten mit Unternehmenssystemen verbinden.
Auch wenn das Erfordernis eines Netzwerkzugriffs die Angriffsfläche begrenzt, sollten Organisationen, die MCP-Server bereitstellen, Defense-in-Depth-Strategien umsetzen und sich der Risiken einer Netzwerkexposition bewusst bleiben, insbesondere in gemeinsam genutzten Umgebungen.