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:8000 und 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_KEY des 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:

  1. Lädt das Docker-Image des Grafana MCP Servers herunter
  2. Konfiguriert die Umgebungsvariablen GRAFANA_URL und GRAFANA_API_KEY für seine Grafana-Instanz
  3. Aktiviert den SSE-Transport, indem er -t sse zum Docker-Befehl hinzufügt
  4. Exponiert unwissentlich http://their_ip:8000/sse gegenüber Angreifern auf Netzwerkebene

Ausnutzung durch den Angreifer

Ein Angreifer mit Netzwerkzugriff kann:

  1. Den exponierten Endpunkt unter http://victim_ip:8000/sse entdecken
  2. Mit dem MCP Inspector eine Verbindung herstellen: npx @modelcontextprotocol/inspector sse --port 8000
  3. Unbefugte Operationen ausführen unter Verwendung der verfügbaren Grafana-Werkzeuge
  4. 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.0 vergrößert die Angriffsfläche
  • Unauffälliger Betrieb: Angriffe können ohne Wissen des Benutzers erfolgen

Empfohlene Gegenmaßnahmen

Für Benutzer

  • Verwenden Sie -t sse nicht 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.

Referenzen