veilletech.fr
23 oct. Feed du jour
#02 MCP Article

OpenCode : MCP exécute du code sur Windows

Un serveur MCP n'a pas besoin d'être hostile le jour où vous l'ajoutez.

Un serveur MCP distant pouvait exécuter des commandes sur Windows ou WSL pendant la connexion OAuth d'OpenCode, via une commande PowerShell construite sans échapper l'adresse fournie par le serveur. Corrigé en 1.18.33 le 28 septembre, mais sans CVE ni avis : aucun scanner ne le signale. Le contrôle du schéma HTTP/HTTPS ne suffit pas à bloquer l'attaque.

3 min de lectureintermédiairevidéo 1:15
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. Le mécanisme
  3. Pourquoi aucun scanner ne la voit
  4. Comment s'y prendre
  5. À retenir

Ce qui se passe

Pillar Security a trouvé une faille d'exécution de code dans OpenCode, l'agent de code open source de la société Anomaly (environ 3 millions de téléchargements npm par semaine, selon Pillar). Sur Windows et WSL, un serveur MCP distant pouvait lancer des commandes sur la machine du développeur, avec ses droits, pendant la connexion OAuth.

Le mécanisme

PowerShellServeur MCPdistantOpenCode sousWindowsDéveloppeurPowerShellServeur MCPdistantOpenCode sousWindowsDéveloppeurla commandetourne avec lesdroits dudéveloppeuropencode mcp authrequête, réponse 401authorization_endpointcontenant $(commande)open(adresse), cible non échappéedéveloppe$(commande) avantd'ouvrir lenavigateur

Le serveur choisit lui-même authorization_endpoint, la chaîne qui indique où envoyer l'utilisateur se connecter. OpenCode la passait au paquet open (184 millions de téléchargements par semaine). Sous Windows, la version open@10.1.2, épinglée par toutes les versions touchées, échappe le nom de l'application mais pas la cible, puis confie le tout à powershell -EncodedCommand. PowerShell développe $(...) dans une chaîne entre guillemets doubles : une adresse https://…/$(commande) parfaitement valide exécute la commande, et l'échec du lancement du navigateur qui suit est ignoré.

Le serveur n'a pas besoin d'être hostile à l'installation : la charge arrive dans une réponse HTTP au moment de la connexion. Un serveur compromis plus tard, un domaine racheté ou un nom typosquatté suffisent.

Pourquoi aucun scanner ne la voit

Anomaly a livré le correctif comme une refactorisation (PR #51414, fusionnée le 25 septembre), sans demander de CVE ni publier d'avis : un serveur MCP malveillant sort, selon l'éditeur, de son modèle de menace. Aucun outil d'analyse de dépendances ne la signalera. Le même défaut avait déjà donné CVE-2025-6514 (mcp-remote, juillet 2025, 9,6), CVE-2025-58062 et CVE-2025-10619.

Autre point : vérifier que l'adresse commence par http: ou https:, la parade habituelle, n'arrête pas cette charge, qui est une adresse HTTPS ordinaire. Ce qui ferme la faille est la mise à jour d'open vers 11.0.4, qui met la cible entre apostrophes. Selon Pillar, Claude Code protège l'ouverture à deux niveaux et gemini-cli passe par un execFile sans shell.

Comment s'y prendre

  1. Passer OpenCode en 1.18.33 ou plus et vérifier la version installée sur chaque poste Windows ou WSL : il n'y a pas d'alerte automatique.
  2. En attendant, retirer les serveurs MCP distants non vérifiés de la configuration ; opencode mcp list les énumère.
  3. Si vous écrivez un client MCP ou un outil qui ouvre des liens : ne passez jamais à open une chaîne venue d'un tiers, lancez le navigateur par vecteur d'arguments, sans shell, et cherchez open@10.x dans votre arbre de dépendances (pnpm why open).
  4. Lier la découverte OAuth à l'origine configurée : un serveur qui désigne lui-même son point d'autorisation prend une décision de sécurité à votre place.

Source : The Hacker News, 22 octobre 2026, d'après le rapport de Pillar Security, qui date sa publication du 4 octobre (The Hacker News situe la divulgation au 19). Source en anglais.