🔍 Contexte
Publié le 20 septembre 2026 par Omri Dar (Remedio Research), cet article présente une vulnérabilité de contournement de sécurité dans Visual Studio Code (VS Code) de Microsoft, affectant la dernière version stable au moment de la publication. La faille a été signalée au Microsoft Security Response Center (MSRC), qui l’a classée comme « Security Feature Bypass de sévérité modérée » sans attribution de CVE et sans correctif déployé.
🎯 Nature de la vulnérabilité
La vulnérabilité repose sur deux défauts combinés :
-
Défaut 1 – Liens
command:dans l’éditeur source : VS Code rend cliquables les liens dans la vue source (plain text editor) via le mécanismeDocumentLinkdu serveur de langage Markdown. Ces liens peuvent utiliser le schémacommand:pour déclencher n’importe quelle commande interne de l’éditeur. Contrairement à la vue preview Markdown (durcie après CVE-2022-41034), la vue source ne filtre pas les lienscommand:et ne vérifie jamais le statut de confiance du workspace (allowCommands: trueen dur, sans liste blanche). -
Défaut 2 – Installation silencieuse d’extension via
workbench.extensions.installExtension: Cette commande accepte un fichier.vsixlocal sans vérification de signature ni de l’éditeur. La seule vérification de confiance est contournée si le manifeste de l’extension déclare"untrustedWorkspaces": {"supported": true}, ce qui supprime entièrement le dialogue de confirmation. L’extension s’active immédiatement sans redémarrage.
💥 Chaîne d’attaque (kill chain)
- L’attaquant prépare un dossier malveillant contenant un fichier
.vsixet unREADME.markdown(extension.markdownpour forcer l’ouverture en vue source, pas en preview). - Un fichier
.vscode/settings.jsonconfigureworkbench.startupEditor: readmepour afficher automatiquement le README à l’ouverture du dossier. - Le README contient un lien
command:workbench.extensions.installExtensionpointant vers le.vsixlocal. - La victime ouvre le dossier et clique sur le lien (ex: « Install project dependencies »).
- L’extension malveillante est installée silencieusement, s’active immédiatement et persiste à chaque lancement de VS Code.
🔒 Contraintes et limites
- Le chemin absolu du
.vsixdoit être connu de l’attaquant (pas de résolution${workspaceFolder}). - Le partage réseau UNC est bloqué par une liste blanche d’hôtes UNC de VS Code.
- Ces contraintes rendent l’exploitation ciblée plutôt que générique.
🧪 Preuve de concept
Reproduction confirmée en laboratoire sur la dernière version stable : installation d’une extension lançant calc.exe et créant C:\Users\Public\EXTINSTALL_PWNED.txt, sans que le dossier soit jamais marqué comme approuvé.
📌 Type d’article
Publication de recherche technique offensive avec divulgation responsable partielle. But principal : documenter une vulnérabilité non corrigée dans VS Code, démontrer la chaîne d’exploitation complète et proposer des mesures de mitigation aux utilisateurs.
🧠 TTPs et IOCs détectés
TTP
- T1204.001 — User Execution: Malicious Link (Execution)
- T1059 — Command and Scripting Interpreter (Execution)
- T1546 — Event Triggered Execution (Persistence)
- T1195.002 — Supply Chain Compromise: Compromise Software Supply Chain (Initial Access)
- T1553 — Subvert Trust Controls (Defense Evasion)
- T1027 — Obfuscated Files or Information (Defense Evasion)
IOC
- CVEs :
CVE-2022-41034— NVD · CIRCL - Fichiers :
evil.vsix - Chemins :
C:\Users\Public\EXTINSTALL_PWNED.txt
⚠️ À propos de ces IOC — ils sont extraits automatiquement de l’article original le 20 septembre 2026 et n’ont pas fait l’objet d’une vérification externe. Un indicateur peut avoir été réattribué depuis : une IP de C2 peut redevenir un service légitime, un domaine sinkholé peut changer de propriétaire. Aucune garantie d’exactitude ni d’actualité — contrôlez leur validité avant tout usage opérationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.
Malware / Outils
- malicious VS Code extension (.vsix) (other)
🟡 Indice de vérification factuelle : 55/100 (moyenne)
- ⬜ remedio.io — source non référencée (0pts)
- ✅ 25975 chars — texte complet (fulltext extrait) (15pts)
- ✅ 3 IOCs (IPs/domaines/CVEs) (10pts)
- ⬜ pas d’IOC vérifié (0pts)
- ✅ 6 TTPs MITRE identifiées (15pts)
- ✅ date extraite du HTML source (10pts)
- ⬜ aucun acteur de menace nommé (0pts)
- ✅ 1/1 CVE(s) confirmée(s) (CIRCL) (5pts)
🔗 Source originale : https://remedio.io/blog/bypassing-vs-code-workspace-trust-with-a-single-link/