🔍 Contexte
Publié le 17 juin 2026 par Ax Sharma (Head of Research, Manifold Security), cet article de recherche documente deux chemins d’exécution de code locale à haute sévérité dans Cline, l’extension VS Code d’agent de codage IA comptant environ 4,2 millions d’installations sur le VS Code Marketplace et OpenVSX.
🎯 Scénario d’attaque
L’attaque cible un workflow développeur courant : cloner un dépôt inconnu et demander à Cline de le configurer. Le contenu du dépôt (README malveillant ou autre contenu lu par l’agent) manipule l’agent pour exécuter des commandes shell arbitraires sous le compte du développeur. L’impact potentiel inclut l’accès aux clés SSH, credentials AWS/GCP, cookies de navigateur, code source et tout ce que le développeur peut atteindre via VPN. Il s’agit d’un pattern confused-deputy dans l’IA agentique.
🐛 Finding #1 : Clic sur l’aperçu URL déclenche une commande OS
- Lorsque Cline veut récupérer une page web, un tile UI affiche l’URL avec un dialog Approve/Deny
- Cliquer sur le tile (action défensive intuitive pour vérifier la destination) passe l’URL directement dans
child_process.execavec uniquement un shell-quoting - Sur macOS :
open "${url}"; Linux :xdg-open "${url}"; Windows :start/powershell.exe Start-Process - Toute URL contenant
",$()ou un backtick échappe le wrapper et exécute du shell arbitraire - Le tile utilise une direction de texte droite-à-gauche avec troncature pour masquer visuellement la payload
- La fonction vulnérable (
openUrlInBrowser) existait depuis un an ; un bugfix de juin 2025 a ajouté un nouveau handler gRPC qui y transfère des chaînes arbitraires sans sanitisation - Le dialog Approve/Deny reste en attente et n’est jamais déclenché
🐛 Finding #2 : Le filtre “Safe Commands” délègue la décision au modèle lui-même
- La fonctionnalité “Safe Commands” d’auto-approbation ne compare pas les commandes à une allowlist
- Elle interroge le modèle LLM lui-même sur la sécurité de sa propre commande via le paramètre
requires_approval - Un README malveillant contenant une URL avec substitution bash
$(open -a Calculator)amène le modèle à émettrerequires_approval: false - Le shell expande la substitution avant l’exécution de curl
- PoC : six mots tapés par le développeur, zéro clic, zéro dialog d’approbation
- Testé sur Cline v3.81.0 avec le modèle
kwaipilot/kat-coder-pro
📋 Réponse du vendeur
- Cline a répondu le 9 juin 2026 en classifiant les deux findings comme hors périmètre sous un framework de responsabilité partagée
- Finding #1 : “unsafe URL sanitization pattern” → correction en “product hardening”
- Finding #2 : amélioration des contrôles et options de configuration prévue
- Aucun advisory de sécurité, aucun CVE assigné par Cline
- Les deux soumissions Bugcrowd avaient été fermées comme “Not Applicable” en moins de 24h sans engagement technique
- Une assignation CVE indépendante via MITRE est en cours
📅 Timeline de divulgation
- 29 avril 2026 : signalement via Bugcrowd VDP
- 30 avril 2026 : fermeture sans engagement technique
- 15 mai 2026 : première réponse de Cline
- 9 juin 2026 : détermination finale (hors périmètre)
- 17 juin 2026 : divulgation publique
📌 Type d’article
Publication de recherche en divulgation complète (full disclosure), documentant deux vulnérabilités d’exécution de code dans un agent IA largement déployé, avec PoC, timeline de divulgation coordonnée et analyse technique détaillée.
🧠 TTPs et IOCs détectés
TTP
- T1059.004 — Command and Scripting Interpreter: Unix Shell (Execution)
- T1059.001 — Command and Scripting Interpreter: PowerShell (Execution)
- T1195.001 — Supply Chain Compromise: Compromise Software Dependencies and Development Tools (Initial Access)
- T1204.002 — User Execution: Malicious File (Execution)
- T1552.001 — Unsecured Credentials: Credentials In Files (Credential Access)
IOC
- Emails :
security@cline.bot
🟡 Indice de vérification factuelle : 46/100 (moyenne)
- ⬜ manifold.security — source non référencée (0pts)
- ✅ 14869 chars — texte complet (fulltext extrait) (15pts)
- ✅ 1 IOC(s) (6pts)
- ⬜ pas d’IOC vérifié (0pts)
- ✅ 5 TTPs MITRE identifiées (15pts)
- ✅ date extraite du HTML source (10pts)
- ⬜ aucun acteur de menace nommé (0pts)
- ⬜ pas de CVE à vérifier (0pts)
🔗 Source originale : https://www.manifold.security/blog/cline-code-execution-bypass