Auteur : Evan Harris
Risque : Faible
Composant concerné : Grafana MCP Server

Introduction

Dans le cadre de nos recherches continues en sécurité sur les serveurs Model Context Protocol (MCP), nous avons identifié une faille de sécurité dans le Grafana MCP Server qui permet un accès non autorisé aux instances Grafana par le biais d’une exposition réseau non authentifiée.

Vue d’ensemble

Le Grafana MCP Server, lorsqu’il est lancé avec l’option -t sse, expose une interface Server-Sent Events (SSE) non authentifiée qui se lie par défaut à 0.0.0.0:8000 lorsqu’il est exécuté via la commande Docker fournie dans le README du serveur MCP. Cette configuration permet à des attaquants distants disposant d’un accès réseau d’interagir avec les instances Grafana des victimes sans authentification.

Détails techniques

Le problème

Lorsqu’il est configuré avec le transport SSE via Docker, le serveur :

  • Se lie à 0.0.0.0:8000, ce qui le rend accessible depuis n’importe quel hôte du réseau
  • Ne fournit aucun mécanisme d’authentification pour le point de terminaison /sse
  • Fait confiance à tout client connecté pour exécuter des opérations Grafana privilégiées
  • Utilise la GRAFANA_API_KEY de la victime pour effectuer des actions en son nom

Configuration vulnérable

En suivant le README du projet avec l’ajout du transport SSE :

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

Cela expose le point de terminaison à l’adresse http://victim_ip:8000/sse à l’ensemble du réseau.

Scénario d’attaque

Configuration de la victime

Un utilisateur qui suit la documentation :

  1. Télécharge l’image Docker du Grafana MCP Server
  2. Configure les variables d’environnement GRAFANA_URL et GRAFANA_API_KEY pour son instance Grafana
  3. Active le transport SSE en ajoutant -t sse à la commande Docker
  4. Expose sans le savoir http://their_ip:8000/sse à des attaquants au niveau du réseau

Exploitation par l’attaquant

Un attaquant disposant d’un accès réseau peut :

  1. Découvrir le point de terminaison exposé à l’adresse http://victim_ip:8000/sse
  2. Se connecter à l’aide de MCP Inspector : npx @modelcontextprotocol/inspector sse --port 8000
  3. Exécuter des opérations non autorisées à l’aide des outils Grafana disponibles
  4. Manipuler les tableaux de bord en les listant, en les créant, en les mettant à jour ou en les supprimant

Preuve de concept

Démonstration de l’attaque

À l’aide de MCP Inspector, un attaquant peut se connecter au point de terminaison SSE exposé et exécuter des opérations Grafana :

  • Lister les équipes pour comprendre la structure de l’organisation
  • Lister les tableaux de bord pour identifier des données sensibles de business intelligence
  • Créer des tableaux de bord pour injecter du contenu malveillant
  • Mettre à jour les tableaux de bord pour modifier les visualisations existantes
  • Accéder aux sources de données et à d’autres fonctionnalités Grafana privilégiées

Évaluation de l’impact

Ce vecteur d’attaque permet :

Atteinte à la confidentialité

  • Découverte des sources de données, exposant les systèmes back-end et les configurations
  • Énumération des tableaux de bord, révélant des données sensibles de business intelligence
  • Fuite d’informations sur les utilisateurs et les équipes via l’interface MCP

Compromission de l’intégrité

  • Injection de contenu malveillant, susceptible d’induire les utilisateurs en erreur
  • Altération de la configuration, affectant la précision des visualisations
  • Manipulation des tableaux de bord par création, modification ou suppression

Impact sur la disponibilité

  • Interruption de service par la suppression ou la corruption de tableaux de bord
  • Déni de service potentiel par la surcharge du système
  • Épuisement des ressources par des requêtes d’outils excessives

Facteurs de risque

  • Exigence d’accès réseau : les attaquants ont besoin d’un accès au réseau de la victime
  • Absence d’authentification : tout client peut se connecter et exécuter des opérations privilégiées
  • Liaison Docker par défaut : l’exposition à 0.0.0.0 augmente la surface d’attaque
  • Fonctionnement silencieux : les attaques peuvent se produire à l’insu de l’utilisateur

Mesures d’atténuation recommandées

Pour les utilisateurs

  • Évitez d’utiliser -t sse sur des réseaux partagés ou non fiables
  • Mettez en place des restrictions au niveau du réseau à l’aide de pare-feu ou de VPN
  • Utilisez une liaison sur localhost en modifiant le mappage des ports Docker en 127.0.0.1:8000:8000
  • Surveillez les journaux de Grafana afin de détecter toute activité inattendue de l’API

Chronologie de la divulgation

  • 2024-05-22 : Vulnérabilité découverte et signalée à Grafana via Intigriti VDP
  • 2024-05-23 : Grafana accuse réception du signalement
  • 2024-05-23 : Le signalement est marqué comme « Informative » par l’équipe de Grafana
  • 2024-05-23 : Grafana accorde l’autorisation de publier les conclusions publiquement
  • 2025-09-02 : Divulgation publique et publication de l’avis de sécurité

Conclusion

L’interface SSE non authentifiée du Grafana MCP Server illustre l’importance de paramètres par défaut sécurisés dans les outils de développement qui relient les agents d’IA aux systèmes d’entreprise.

Bien que l’exigence d’accès réseau limite la surface d’attaque, les organisations qui déploient des serveurs MCP devraient mettre en œuvre des stratégies de défense en profondeur et rester conscientes des risques d’exposition sur le réseau, en particulier dans les environnements partagés.

Références