Autor: Evan Harris
Ryzyko: Niskie
Komponent, którego dotyczy problem: Grafana MCP Server

Wprowadzenie

W ramach naszych ciągłych badań nad bezpieczeństwem serwerów Model Context Protocol (MCP) zidentyfikowaliśmy lukę bezpieczeństwa w Grafana MCP Server, która umożliwia nieautoryzowany dostęp do instancji Grafany poprzez nieuwierzytelnione udostępnienie w sieci.

Przegląd

Grafana MCP Server po uruchomieniu z flagą -t sse udostępnia nieuwierzytelniony interfejs Server-Sent Events (SSE), który domyślnie wiąże się z adresem 0.0.0.0:8000, gdy jest uruchamiany za pomocą polecenia Docker podanego w pliku README serwera MCP. Taka konfiguracja pozwala zdalnym atakującym z dostępem do sieci na interakcję z instancjami Grafany ofiar bez uwierzytelnienia.

Szczegóły techniczne

Problem

Przy konfiguracji z transportem SSE za pośrednictwem Dockera serwer:

  • Wiąże się z adresem 0.0.0.0:8000, co czyni go dostępnym z dowolnego hosta w sieci
  • Nie zapewnia żadnego mechanizmu uwierzytelniania dla punktu końcowego /sse
  • Ufa dowolnemu podłączonemu klientowi w zakresie wykonywania uprzywilejowanych operacji Grafany
  • Wykorzystuje GRAFANA_API_KEY ofiary do wykonywania działań w jej imieniu

Podatna konfiguracja

Zgodnie z plikiem README projektu z dodaniem transportu SSE:

docker run --rm -p 8000:8000 \
  -e GRAFANA_URL \
  -e GRAFANA_API_KEY \
  mcp/grafana -debug -t sse

Powoduje to udostępnienie punktu końcowego pod adresem http://victim_ip:8000/sse całej sieci.

Scenariusz ataku

Konfiguracja ofiary

Użytkownik postępujący zgodnie z dokumentacją:

  1. Pobiera obraz Docker serwera Grafana MCP Server
  2. Konfiguruje zmienne środowiskowe GRAFANA_URL i GRAFANA_API_KEY dla swojej instancji Grafany
  3. Włącza transport SSE, dodając -t sse do polecenia Docker
  4. Nieświadomie udostępnia http://their_ip:8000/sse atakującym na poziomie sieci

Wykorzystanie przez atakującego

Atakujący z dostępem do sieci może:

  1. Wykryć udostępniony punkt końcowy pod adresem http://victim_ip:8000/sse
  2. Połączyć się przy użyciu MCP Inspector: npx @modelcontextprotocol/inspector sse --port 8000
  3. Wykonywać nieautoryzowane operacje przy użyciu dostępnych narzędzi Grafany
  4. Manipulować pulpitami poprzez ich wyświetlanie, tworzenie, aktualizowanie lub usuwanie

Proof of Concept

Demonstracja ataku

Za pomocą MCP Inspector atakujący może połączyć się z udostępnionym punktem końcowym SSE i wykonywać operacje Grafany:

  • Wyświetlić listę zespołów, aby poznać strukturę organizacji
  • Wyświetlić listę pulpitów, aby zidentyfikować wrażliwe dane analityki biznesowej
  • Tworzyć pulpity, aby wstrzyknąć złośliwą treść
  • Aktualizować pulpity, aby modyfikować istniejące wizualizacje
  • Uzyskać dostęp do źródeł danych i innych uprzywilejowanych funkcji Grafany

Ocena skutków

Ten wektor ataku umożliwia:

Naruszenie poufności

  • Wykrycie źródeł danych, ujawniające systemy backendowe i konfiguracje
  • Wyliczenie pulpitów, ujawniające wrażliwe dane analityki biznesowej
  • Wyciek informacji o użytkownikach i zespołach za pośrednictwem interfejsu MCP

Naruszenie integralności

  • Wstrzyknięcie złośliwej treści, mogące wprowadzić użytkowników w błąd
  • Manipulowanie konfiguracją, wpływające na dokładność wizualizacji
  • Manipulowanie pulpitami poprzez tworzenie, modyfikowanie lub usuwanie

Wpływ na dostępność

  • Zakłócenie działania usługi poprzez usunięcie lub uszkodzenie pulpitów
  • Potencjalna odmowa usługi (denial of service) poprzez przeciążenie systemu
  • Wyczerpanie zasobów poprzez nadmierne żądania narzędzi

Czynniki ryzyka

  • Wymóg dostępu do sieci: atakujący potrzebują dostępu do sieci ofiary na poziomie sieci
  • Brak uwierzytelniania: każdy klient może się połączyć i wykonywać uprzywilejowane operacje
  • Domyślne wiązanie Dockera: udostępnienie na 0.0.0.0 zwiększa powierzchnię ataku
  • Ciche działanie: ataki mogą odbywać się bez wiedzy użytkownika

Zalecane środki zaradcze

Dla użytkowników

  • Unikaj używania -t sse w sieciach współdzielonych lub niezaufanych
  • Wprowadź ograniczenia na poziomie sieci przy użyciu zapór sieciowych lub sieci VPN
  • Zastosuj wiązanie z localhost, zmieniając mapowanie portów Dockera na 127.0.0.1:8000:8000
  • Monitoruj dzienniki Grafany pod kątem nieoczekiwanej aktywności API

Oś czasu ujawnienia

  • 2024-05-22: Luka odkryta i zgłoszona firmie Grafana za pośrednictwem Intigriti VDP
  • 2024-05-23: Grafana potwierdza otrzymanie zgłoszenia
  • 2024-05-23: Zgłoszenie oznaczone jako “Informative” przez zespół Grafany
  • 2024-05-23: Grafana udziela zgody na publiczne opublikowanie ustaleń
  • 2025-09-02: Publiczne ujawnienie i publikacja poradnika bezpieczeństwa

Podsumowanie

Nieuwierzytelniony interfejs SSE w Grafana MCP Server pokazuje, jak ważne są bezpieczne ustawienia domyślne w narzędziach programistycznych, które łączą agentów AI z systemami korporacyjnymi.

Choć wymóg dostępu do sieci ogranicza powierzchnię ataku, organizacje wdrażające serwery MCP powinny stosować strategie obrony wielowarstwowej (defense-in-depth) i zachowywać świadomość ryzyka związanego z udostępnieniem w sieci, zwłaszcza w środowiskach współdzielonych.

Odniesienia