Découverte d’une vulnérabilité d’exécution de code à distance non authentifiée dans OpenCode
(cy.md)- Une vulnérabilité critique d’exécution de code à distance permettant d’exécuter du code arbitraire sans authentification a été découverte dans les anciennes versions d’OpenCode
- Les versions antérieures à la v1.1.10 lancent automatiquement un serveur HTTP qui permet, sans procédure d’authentification, l’exécution de commandes arbitraires, la lecture de fichiers et la création de sessions de terminal
- Avant la v1.0.216, le simple fait de visiter un site web pouvait suffire à exécuter du code dans l’environnement local de l’utilisateur
- Dans la dernière version (v1.1.10), le serveur est désactivé par défaut, mais il reste dépourvu d’authentification lorsqu’il est activé
- Cette vulnérabilité a été enregistrée sous le nom CVE-2026-22812, et les développeurs comme les utilisateurs doivent mettre à jour immédiatement et vérifier leur configuration
Aperçu de la vulnérabilité
- OpenCode est un assistant de codage IA open source qui, avant la v1.1.10, démarrait automatiquement un serveur HTTP (port par défaut 4096+) à l’exécution
- Le serveur expose des endpoints tels que
POST /session/:id/shell,POST /pty,GET /file/content - En l’absence de procédure d’authentification, tout client capable de s’y connecter peut exécuter du code avec les privilèges de l’utilisateur
- Le serveur expose des endpoints tels que
- Aucun indicateur visuel ne signale à l’utilisateur que le serveur est en cours d’exécution, ce qui rend son exposition difficile à détecter
- La politique CORS est codée en dur sur
*.opencode.ai, ce qui permet à des pages servies depuis opencode.ai ou un sous-domaine d’accéder à l’API du serveur- Si ce domaine est compromis ou présente une faille XSS, tous les utilisateurs dont le serveur est actif peuvent devenir des cibles
Vecteurs d’attaque
- Avant la v1.0.216 : n’importe quel site web pouvait exécuter du code sur la machine locale d’un utilisateur exécutant OpenCode
- Avant la v1.1.10 : un processus local ou une page localhost pouvait exécuter du code sans authentification
- Dans toutes les versions lorsque le serveur est activé :
- Les processus locaux et les pages localhost peuvent exécuter du code sans authentification
- Avec le flag
--mdns, tout appareil du réseau local peut y accéder - Aucun indicateur ne montre que le serveur tourne, si bien que l’utilisateur peut ignorer son exposition
- Le domaine opencode.ai ou ses sous-domaines peuvent exécuter du code
Exemples d’attaque (Proof of Concept)
- Attaque locale : lorsque le serveur est en cours d’exécution, un processus local peut créer une session avec la commande
curl, puis exécuter la commandeid > /tmp/pwned.txt - Attaque via navigateur (avant la v1.0.216) : une page web peut transmettre des commandes au serveur local via des requêtes
fetch, puis télécharger et exécuter un script distant- Fonctionnement confirmé sur Firefox ; Chrome peut afficher une demande de confirmation utilisateur en raison de ses protections d’accès au réseau local
Mesures à prendre côté utilisateur
- Vérifier la version avec
opencode --version, puis mettre à jour vers la v1.1.10 ou une version ultérieure - Vérifier dans le fichier de configuration si les options
server.portouserver.hostnamesont activées - Ne pas utiliser le flag
--mdns(liaison à 0.0.0.0, exposant le service à l’ensemble du réseau) - Si l’utilisation du serveur est indispensable, éviter d’accéder à opencode.ai et à ses sous-domaines
- Garder à l’esprit que les processus locaux peuvent accéder au serveur sans authentification lorsqu’il est activé
Calendrier de divulgation
- 2025-11-17 : premier signalement par e-mail, aucune réponse
- 2025-12-27 : soumission d’un GitHub Security Advisory, aucune réponse
- 2025-12-29 : publication du signalement par un autre utilisateur
- 2025-12-30 : application d’une restriction CORS dans la v1.0.216
- 2026-01-09 : désactivation du serveur par défaut dans la v1.1.10
- 2026-01-11 : divulgation complète
Actions recommandées
- Limiter CORS au strict minimum de domaines nécessaires (appliqué dans la v1.0.216)
- Désactiver le serveur par défaut (appliqué dans la v1.1.10)
- Ajouter une procédure d’authentification à toutes les requêtes du serveur
- Fournir à l’utilisateur un indicateur clair lorsque le serveur est en cours d’exécution
- Documenter explicitement que l’option
--mdnseffectue une liaison sur 0.0.0.0 - Appliquer TLS aux communications réseau
- Publier officiellement le GitHub Security Advisory et le CVE-2026-22812
- Renforcer la surveillance des e-mails de signalement de sécurité et des alertes GHSA
- Clarifier la relation de confiance entre les mainteneurs d’OpenCode, opencode.ai et les utilisateurs
Références
- CVE : CVE-2026-22812
- Package concerné : npm
opencode-ai - Dernières informations et contact : cy.md
1 commentaires
Réactions sur Hacker News
En tant que mainteneur, il reconnaît ne pas avoir bien géré la réponse à ce rapport de sécurité
L’usage a explosé, les problèmes se sont accumulés, et il prévoit de rencontrer des experts cette semaine pour lancer un programme de bug bounty et un audit de sécurité
Il est plus important que toute l’équipe comprenne et applique le guide OWASP sur l’Insecure Design
Comme OpenCode est un agent de code open source bien connu, il est possible que la faille ait déjà été exploitée
Il faudrait au minimum exécuter le modèle dans un environnement sandboxé comme gVisor
Sans réaction rapide, davantage d’attaquants risquent de se mettre à chercher d’autres vulnérabilités RCE
Certains se demandent s’ils s’inspirent aussi de principes d’organisation anarchistes
Beaucoup de gens exécutent des outils comme OpenCode en local sans séparation des privilèges
Les plugins aussi sont généralement conçus en partant du principe d’un accès illimité, et la consommation de ressources est élevée
Le minimum serait de l’exécuter dans un dev-container ou une VM, puis de ne monter que les fichiers nécessaires via SSHFS ou Samba
Si c’est trop contraignant, un VPS à 5 dollars par mois peut aussi faire l’affaire
Pour lancer un serveur avec qemu, quickemu est recommandé
La fonction SSH remote de zed est aussi utile pour l’utiliser avec Claude Code ou OpenCode
Le correctif CORS a bloqué l’exploitation depuis des sites web externes, mais le vrai problème reste une architecture permettant l’exécution de code sur localhost
Neovim utilise par défaut des sockets de domaine, et le démon SSH de VS Code comporte une procédure d’authentification
Un serveur local qui exécute les entrées client sans authentification constitue une vulnérabilité LCE (Local Code Execution),
et si l’accès devient possible via des requêtes navigateur, cela s’étend en RCE (Remote Code Execution)
C’est choquant d’avoir mis dans un outil CLI un endpoint HTTP permettant du RCE sans authentification, puis d’y avoir ajouté en plus un contournement de CORS
*Le calendrier de divulgation de la vulnérabilité pose problème
Elle a été signalée le 2025-11-17, sans réponse malgré plusieurs prises de contact
Voir ce commentaire sur l’issue GitHub
Même si le serveur est désactivé par défaut, cela reste grave dès qu’il est activé
N’importe quelle page web pouvait exécuter du code sur localhost, et même lancer des processus locaux sans authentification
Rien n’indique clairement à l’utilisateur si le serveur tourne ou non
Les applications TUI inspirent généralement confiance précisément parce qu’elles ne font pas ce genre de choses, et cette affaire a fortement abîmé cette confiance
Le fait qu’OpenCode soit soutenu par YC (Y Combinator) surprend
On s’attendrait à ce que YC encourage une meilleure culture de la sécurité
Voir ce commentaire
Certains pensaient qu’OpenCode était un projet bénévole, avant de découvrir qu’il s’agit en réalité d’un projet d’entreprise soutenu par de gros investisseurs
Certains ont arrêté de l’utiliser parce qu’on continuait à ajouter des fonctionnalités tout en négligeant la maintenance de base
L’objectif était d’utiliser plusieurs modèles en parallèle, mais le partage de contexte est inefficace, ce qui limite fortement l’intérêt pratique
Ils utilisent maintenant Claude Code et Codex en parallèle
Malgré cela, le besoin d’une plateforme ouverte capable d’intégrer plusieurs modèles reste important
ampcode permet de créer gratuitement de petits scripts, et Crush+GLM suit bien les plans produits par Claude ou Codex
Au départ, certains aimaient Aider, mais comme la maintenance est quasiment absente, ils rencontrent souvent des problèmes
En envisageant d’installer OpenCode, cette affaire les a fait hésiter
Il est surprenant qu’il existe si peu d’assistants CLI LLM open source non dépendants d’un modèle