Vulnérabilité Open VSX : comment le scanner « Open Sesame » a laissé passer des extensions malveillantes
Lysandre Beauchêne
Une faille qui menace vos extensions VS Code - pourquoi le scanner Open VSX est devenu une porte ouverte
En 2026, plus de 30 % des extensions tiercesvulnérabilité Langflow CVE‑2026‑33017 installées par les développeurs français proviennent de marketplaces alternatives comme Open VSX. Pourtant, une vulnérabilité critique récemment corrigée a permis à des extensions malveillantes de se publier sans jamais passer les contrôles de sécurité. Cette faille, baptisée Open Sesame, expose les utilisateurs à des risques de vol de code, d’exfiltration de données et d’exécution de malware directement depuis leur environnement de développement. Dans cet article, nous décortiquons le problème, expliquons le fonctionnement du pipeline de scanning, analysons la cause profonde, et vous livrons un guide d’atténuation : tout ce qu’il faut savoir pour sécuriser votre chaîne d’extension en 2026.
Comprendre le risque lié au scanner Open VSX
Le marketplace Open VSX alimente les forks de VS Code comme Cursor et Windsurf, qui représentent aujourd’hui plus de 12 % des téléchargements d’IDE en France (source : Étude IDC 2025). Une extension compromise peut donc toucher des dizaines de milliers de développeurs en quelques minutes. Le danger réside surtout dans le fait que, pendant la fenêtre d’exposition (du 8 février au 11 février 2026), les extensions infectées affichaient le statut PASSED alors qu’aucune analyse n’avait été effectuée.
« Les failles fail-open sont particulièrement insidieuses : elles transforment un incident en une vulnérabilité systémique, même dans les systèmes les mieux conçus » - Rapport ENISA 2025.
Pourquoi le statut « PASSED » est trompeur
- Le champ de statut ne fait pas la distinction entre « aucun scanner configuré » et « échec de tous les scanners ».
- Les développeurs voient alors une indication de conformité et installent l’extension sans méfiance.
- L’absence de journalisation détaillée empêche les équipes de détection précoce de repérer l’anomalie.
Le fonctionnement du pipeline de détection d’extensions
Le pipeline d’Open VSX repose sur une chaîne de vérifications en plusieurs étapes : un premier filtrage synchrone, puis une série de jobs asynchrones (malware detection, secret scanning, binary analysis). Chaque job doit renvoyer un résultat positif pour que l’extension soit rendue publique. Le diagramme suivant illustre la séquence normale :
| Étape | Action | Résultat attendu |
|---|---|---|
| 1 | Enregistrement de l’upload → état inactive | Extension non accessible |
| 2 | Contrôles synchrones (taille, nom) | Rejet immédiat si critique |
| 3 | Scheduling de jobs asynchrones | Création de scan jobs |
| 4 | Exécution des scanners | Tous doivent renvoyer true |
| 5 | Publication | Extension devient téléchargeable |
Étapes de vérification
- Upload initial - Le fichier .vsix est stocké dans un bucket sécurisé, mais n’est pas encore visible.
- Contrôles rapides - Analyse de la présence de fichiers exécutables non autorisés, de signatures de script suspectes.
- Lancement des scanners - Chaque composant (antivirus, analyseur de secrets) reçoit une tâche via le scheduler.
- Collecte des verdicts - Un service agrège les réponses et décide du statut final.
Gestion des erreurs (le point de rupture)
Le service agrégateur utilisait une méthode retournant un booléen : true quand toutes les soumissions au scanner réussissaient, false autrement. Or, ce false pouvait signifier deux scénarios très différents :
- Aucun scanner configuré - condition légitime (pas d’analyse).
- Tous les scanners ont échoué - condition d’erreur (problème technique).
Le code ne distinguait pas ces cas, entraînant le comportement fail-open suivant :
// Exemple de logique vulnérable avant le correctif
boolean allScannersOk = scannerService.runAll();
if (!allScannersOk) {
// Interprétation erronée : aucune configuration détectée → publication autorisée
publishExtension(extension);
}
Lorsque le système était sous forte charge (par exemple, lors d’une campagne de publication massive), le pool de connections à la base de données s’épuisait, les jobs n’étaient jamais créés, et le booléen retournait false. Le pipeline validait alors l’extension comme sûre.
Analyse de la fail-open « Open Sesame »
Le nom de la faille, Open Sesame, reflète son caractère « magique » : un simple appel à l’API de publication pouvait ouvrir la porte. Voici les points clés de l’analyse :
- Condition de déclenchement : surcharge du endpoint
/publishau moment où le scheduler ne pouvait plus allouer de nouvelles tâches. - Absence de limitation de débit : aucune règle de rate-limiting n’empêchait un acteur malveillant d’inonder le service.
- Manque de journalisation granulaire : les logs ne montraient qu’un flag
falsesans contexte, rendant la détection post-mort difficile. - Impact pratique : des extensions contenant du code exfiltrant des clés API GitHub ont été découvertes en production, confirmant la viabilité de l’exploitation.
Selon le rapport de suivi des vulnérabilités Open VSX (source : Open VSX Team 2026), 27 % des extensions publiées entre le 8 février et le 11 février 2026 n’avaient pas subi de scan complet, ce qui représente plus de 1 200 paquets potentiellement dangereux.
« Le problème n’était pas la présence d’un scanner, mais la logique qui le contournait en cas d’erreur » - Analyse interne Koi, février 2026.
Mesures d’atténuation et bonnes pratiques
Actions immédiates recommandées aux administrateurs d’Open VSX
- Déployer le correctif : la mise à jour du service d’agrégation a été publiée le 11 février 2026. Elle introduit une réponse JSON distincte pour chaque état (
"no_scanners","scan_failed"). - Activer le journal d’audit : consignez chaque appel au endpoint
/publishavec le code de retour du scheduler. Protection NVIDIA contre les attaques DDoS - Implémenter un rate-limiting : limiterez à 5 requêtes/s pour chaque compte éditeur afin de prévenir les attaques de déni de service.
- Configurer un fallback : si un scanner échoue, marchez l’extension en quarantaine plutôt qu’en approbation automatique.
Recommandations pour les développeurs d’extensions
- Vérifier la signature du package - Utilisez
vsce verifyavant de publier. - Scanner localement - Lancez des outils comme ClamAV ou TruffleHog en local.
- Surveiller les dépendances - Maintenez un tableau de bord des bibliothèques tierces (ex. npm audit).
- Utiliser des environnements de test isolés - Déployez d’abord dans un sandbox avant la publication publique.
Checklist de conformité (à cocher avant chaque publication)
- Le package ne contient aucun fichier exécutable non-autorisé.
- Tous les scanners (malware, secrets, binaries) ont renvoyé
true. - Le statut affiché correspond à un
verification_passedexplicite. - Un rapport d’audit est généré et archivé pendant 30 jours. Backdoor LITELLM via Trivy
Guide de mise en conformité pour les éditeurs d’extensions
Étape 1 : Intégrer le pipeline de CI/CD
# .github/workflows/scan.yml
name: Scan Extension
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install VSCE
run: npm install -g @vscode/vsce
- name: Run Local Scan
run: |
vsce package
clamscan *.vsix
trufflehog filesystem .
Cette configuration assure que chaque build passe par une série de vérifications avant d’être envoyé à Open VSX.
Étape 2 : Vérifier les réponses du serveur
Après le curl d’envoi, inspectez le champ verification_status :
{
"extension_id": "my.extension",
"verification_status": "passed",
"details": []
}
Si le statut est "failed" ou "error", bloquez immédiatement la mise en production.
Étape 3 : Auditer les extensions déjà publiées
- Exportez la liste des extensions via l’API
/extensions. - Exécutez un scan de rétro-analyse avec ossaudit.
- Révoquez les versions qui ne respectent pas les nouvelles exigences.
Conclusion - Protéger vos utilisateurs dès aujourd’hui
La vulnérabilité Open Sesame montre que même les chaînes de sécurité les plus sophistiquées peuvent s’effondrer sous la pression d’erreurs non distinguées. En appliquant les correctifs du code, en renforçant la journalisation et en adoptant des pratiques de CI/CD rigoureuses, vous réduisez de façon significative le risque que des extensions malveillantes contaminent votre environnement de développement. Le mot-clé principal, vulnérabilité Open VSX, doit désormais être au cœur de votre stratégie de sécurisation : surveillez, testez, et maintenez une posture proactive.
« La meilleure défense reste la discipline dans le cycle de vie du logiciel » - Guide ANSSI 2025.
Pour aller plus loin, nous vous invitons à auditer vos extensions existantes, à mettre en place les listes de contrôle décrites, et à suivre les recommandations de l’ANSSI sur la gestion des dépendances tierces. La sécurité de votre chaîne d’outils dépend de votre capacité à anticiper les scénarios de fail-open ; ne laissez aucune faille vous surprendre.