Stu Mason · Folkestone, Kent
One entryClosed issue· StuMason/coolify-mcp· TypeScript

Issue #275 closed: Les variables d'environnement d'une base de données sont renvoyées en clair par défaut

Contexte

D'après sa propre description, l'outil env_vars est censé masquer les valeurs par défaut (renvoyées sous la forme ***) afin de ne pas divulguer de secrets aux clients MCP, et il faut passer explicitement reveal=true pour obtenir la valeur en clair. C'est bien le cas pour les applications et pour les services, mais pas pour les bases de données.

Quand on liste les variables d'environnement d'une base de données, les valeurs reviennent en clair, directement, sans qu'on ait rien demandé. Et surtout, reveal n'y change rien : que l'on passe true, false ou rien du tout, le comportement reste identique. Le paramètre est tout bonnement ignoré dans ce cas.

Reproduction

  1. Connecter le serveur MCP à une instance Coolify possédant au moins une base de données avec des variables sensibles (mot de passe, chaîne de connexion, etc.).
  2. Appeler l'outil env_vars sur la ressource base de données, action list, sans renseigner reveal (donc en se fiant au comportement par défaut documenté).
  3. Refaire la même chose sur une application, puis sur un service, pour comparer.

Comportement attendu

Les trois types de ressources devraient se comporter comme l'annonce la description de l'outil : valeurs masquées par *** par défaut, valeurs réelles uniquement lorsqu'on passe explicitement reveal=true.

Comportement observé

  • Liste des variables d'une application → masquée. ✅
  • Liste des variables d'un service → masquée. ✅
  • Liste des variables d'une base de données → secrets renvoyés en clair par défaut, et reveal sans aucun effet. ❌

Pourquoi c'est gênant

Les variables d'environnement d'une base de données comptent parmi les données les plus sensibles que ce serveur manipule : on y trouve presque toujours des identifiants et des chaînes de connexion. Tout l'intérêt de la couche de masquage est précisément d'éviter que ces valeurs finissent, par mégarde, entre les mains d'un client LLM. Là, le chemin « base de données » passe complètement à travers ce garde-fou, et comme le paramètre est ignoré, il n'existe même aucun moyen de demander le masquage. En prime, cela contredit en silence le comportement par défaut annoncé dans la doc : quelqu'un qui fait confiance à la documentation est induit en erreur.