En bref

  • CVE-2026-39987 (CVSS 9.3) : endpoint WebSocket /terminal/ws non authentifié dans Marimo, ouvrant un shell PTY complet à tout attaquant distant.
  • Toutes les versions Marimo <= 0.20.4 sont affectées ; correctif disponible uniquement à partir de la 0.23.0.
  • Exploitation active confirmée 9h41 après publication, malware NKAbuse déployé sur les instances compromises, ajout KEV CISA.

Les faits

Le 8 avril 2026, une vulnérabilité critique pré-authentification a été publiée dans Marimo, notebook Python open-source utilisé pour la data science et l'analyse reproductible, référencée CVE-2026-39987 et scorée CVSS 9.3. Le défaut réside dans l'endpoint WebSocket /terminal/ws, qui accepte des connexions sans valider aucune forme d'authentification, permettant à un attaquant non authentifié d'obtenir un shell PTY complet et d'exécuter des commandes système arbitraires sur la machine hôte avec les privilèges du processus Marimo. Selon le Sysdig Threat Research Team, l'exploitation en conditions réelles a été observée 9 heures et 41 minutes après la publication officielle de l'advisory, sans aucun code d'exploit public disponible à ce moment. L'attaquant a reconstitué l'exploit directement à partir de la description textuelle du bulletin, puis a établi une connexion WebSocket manuelle vers l'endpoint vulnérable pour commencer l'exploration du système compromis. Les premières exfiltrations de credentials cloud ont pris moins de 3 minutes après compromission initiale. Endor Labs et Security Affairs confirment que le défaut affecte l'ensemble des versions antérieures ou égales à 0.20.4 ; le correctif officiel n'est disponible qu'à partir de la 0.23.0 de Marimo.

Entre le 11 et le 14 avril 2026, Sysdig a comptabilisé 662 événements d'exploitation distincts contre ses honeypots et ses clients, largement utilisés pour déployer une nouvelle variante du malware multi-plateforme NKAbuse, connu pour ses capacités de botnet et de relai de commandes via NKN (New Kind of Network). CISA a ajouté CVE-2026-39987 à son catalogue Known Exploited Vulnerabilities, imposant aux agences fédérales un délai de remédiation de trois semaines. BleepingComputer et SC Media rapportent plusieurs campagnes opportunistes ciblant des instances Marimo exposées publiquement sur Internet, notamment dans le cadre de déploiements cloud de data scientists et d'environnements de formation académiques.

Impact et exposition

Marimo est largement déployé dans les environnements de data science, souvent sur des VMs cloud ou conteneurs avec accès direct à des credentials AWS, GCP ou Azure via les variables d'environnement. Une compromission donne à l'attaquant un accès immédiat à ces secrets, ainsi qu'aux datasets potentiellement sensibles manipulés dans les notebooks. Les équipes exposant Marimo sur Internet sans reverse proxy authentifiant en frontal sont particulièrement exposées ; la surface d'attaque inclut également les déploiements Jupyter-compatibles embarqués dans des plateformes éducatives. La vitesse d'exploitation (moins de 10 heures) démontre qu'aucune fenêtre de patching différée n'est acceptable pour ce type de service exposé.

Recommandations immédiates

  • Migrer immédiatement vers Marimo 0.23.0 ou supérieure via pip install --upgrade marimo, puis redémarrer tous les processus notebook existants.
  • Si l'upgrade n'est pas immédiatement possible, bloquer l'accès réseau à l'endpoint /terminal/ws via reverse proxy (Nginx, Traefik) ou firewall applicatif, et restreindre Marimo à localhost.
  • Rechercher dans les logs système la présence de processus marimo ayant spawné des shells (/bin/bash, /bin/sh) ainsi que des connexions sortantes vers des IP NKN ou non listées.
  • Rotation immédiate des credentials cloud accessibles aux environnements Marimo compromis potentiels (clés AWS, tokens GCP, secrets Azure).

⚠ Exploitation active confirmée

Sysdig a observé une exploitation en 9h41 minutes après publication, sans exploit public. Toute instance Marimo <= 0.20.4 exposée sur Internet doit être considérée comme potentiellement compromise. Déconnectez immédiatement et lancez une investigation forensique avant toute remise en service.

À retenir

La fenêtre entre publication d'un advisory et exploitation massive se réduit à quelques heures. Pour les services exposés sur Internet, aucun délai de patching au-delà de 24 heures n'est désormais défendable, et la segmentation réseau devient une contre-mesure obligatoire indépendamment du patching.

Comment savoir si je suis vulnérable ?

Vérifiez la version de Marimo installée via marimo --version ou pip show marimo. Toutes les versions antérieures ou égales à 0.20.4 sont vulnérables. Pour tester l'exposition réseau, exécutez curl -i http://localhost:port/terminal/ws : une réponse 101 Switching Protocols ou 426 Upgrade Required indique un endpoint présent. Seules les versions 0.23.0 et supérieures intègrent le correctif.

Quels indicateurs de compromission surveiller ?

Recherchez dans les logs applicatifs Marimo des connexions WebSocket vers /terminal/ws depuis des IP externes non autorisées. Au niveau système, surveillez les processus enfants du binaire Marimo, notamment des shells interactifs et des outils de reconnaissance (whoami, id, env). Les IoC NKAbuse incluent des connexions sortantes vers le réseau NKN et la présence de binaires dans /tmp/ ou /dev/shm/.

Cette vague d'exploitations rapides rappelle les campagnes récentes : voir notre analyse de CVE-2026-5760 sur SGLang où le vecteur GGUF a été exploité en quelques jours, ainsi que CVE-2026-32604 sur Spinnaker Gitrepo. Les environnements de data science cloud sont également ciblés via CVE-2026-5059 aws-mcp-server, et les exploitations de services Python exposés sont détaillées dans notre dossier sur CVE-2026-34197 ActiveMQ Jolokia.

Votre infrastructure est-elle exposée ?

Ayi NEDJIMI réalise des audits ciblés pour identifier et corriger vos vulnérabilités.

Demander un audit