En bref

  • CVE-2026-39987 (CVSS 9.3) : exécution de code à distance sans authentification dans Marimo, notebook Python open-source
  • Versions affectées : Marimo <= 0.20.4 — correctif disponible en version 0.23.0
  • Action urgente : mettre à jour immédiatement vers Marimo 0.23.0 ou désactiver l'accès réseau aux instances exposées

Les faits

Points clés à retenir

  • Les faits
  • Impact et exposition
  • Recommandations immédiates

La CVE-2026-39987, divulguée le 10 avril 2026 et notée 9.3 sur l'échelle CVSS, touche Marimo, une plateforme open source de notebooks Python largement adoptée par les équipes data science, les laboratoires de recherche et les métiers de l'analyse de données. Classée critique, cette faille se déclenche avant toute étape d'authentification : un attaquant distant, sans identifiants ni interaction d'un utilisateur légitime, peut ouvrir un shell PTY complet sur le serveur hébergeant le notebook et y exécuter des commandes système arbitraires. L'exploitation aboutit donc à une compromission intégrale de l'hôte, avec accès aux jeux de données, aux secrets applicatifs, aux clés d'API et aux environnements connectés. Les instances Marimo exposées sur Internet ou accessibles depuis un réseau interne peu segmenté constituent des cibles privilégiées, d'autant que le vecteur d'attaque reste simple à automatiser à grande échelle.

Le problème réside dans l'endpoint WebSocket /terminal/ws qui ne valide pas l'authentification des connexions entrantes. Contrairement aux autres endpoints WebSocket de l'application (comme /ws) qui appellent correctement la fonction validate_auth(), l'endpoint terminal vérifie uniquement le mode d'exécution et la compatibilité plateforme avant d'accepter les connexions, contournant totalement la vérification d'identité.

L'équipe Sysdig Threat Research a déployé des instances Marimo vulnérables en honeypot sur plusieurs fournisseurs cloud et a observé des tentatives d'exploitation moins de 10 heures après la divulgation publique. L'attaquant a construit un exploit fonctionnel directement à partir de la description de l'advisory, s'est connecté à l'endpoint terminal non authentifié et a exploré manuellement l'environnement compromis à quatre reprises sur une période de 90 minutes.

Impact et exposition

Toute instance Marimo version 0.20.4 ou antérieure exposée sur le réseau est vulnérable. L'exploitation ne nécessite aucun identifiant ni interaction utilisateur : un simple accès réseau au port de l'application suffit. L'attaquant obtient un accès shell complet avec les privilèges du processus Marimo, ce qui peut mener à une compromission totale du serveur, une exfiltration de données, ou un pivotement vers d'autres systèmes du réseau.

La CISA a ajouté cette vulnérabilité à son catalogue KEV (Known Exploited Vulnerabilities), confirmant l'exploitation active en conditions réelles. Les agences fédérales américaines avaient jusqu'au 11 avril 2026 pour appliquer les correctifs. Les environnements de data science et de machine learning, souvent déployés avec des configurations réseau permissives, sont particulièrement exposés.

Recommandations immédiates

  • Mettre à jour Marimo vers la version 0.23.0 qui corrige la vulnérabilité — advisory Marimo Security Advisory GHSA-2026-39987
  • Si la mise à jour n'est pas immédiatement possible, restreindre l'accès réseau aux instances Marimo via des règles de pare-feu ou un reverse proxy avec authentification
  • Vérifier les logs d'accès pour toute connexion suspecte à l'endpoint /terminal/ws
  • Auditer les instances Marimo exposées sur Internet via un scan de surface d'attaque

⚠️ Urgence

Exploitation active confirmée par CISA et Sysdig. Les attaquants exploitent cette faille moins de 10 heures après sa divulgation. Toute instance Marimo non patchée et accessible depuis le réseau est une cible immédiate. Appliquez le correctif sans délai.

Comment savoir si je suis vulnérable ?

Vérifiez la version de Marimo installée avec la commande pip show marimo ou marimo --version. Si la version affichée est inférieure ou égale à 0.20.4, votre instance est vulnérable. Vérifiez également si le port de l'application est accessible depuis l'extérieur de votre réseau local avec ss -tlnp | grep marimo ou un scan Nmap ciblé.

Détails techniques et vecteur d'attaque

Le vecteur CVSS complet de la CVE-2026-39987 se décompose comme suit : AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H, traduisant une exploitation réseau (AV:N) à faible complexité (AC:L), sans privilège requis (PR:N) ni interaction utilisateur (UI:N), avec un impact maximal sur la confidentialité, l'intégrité et la disponibilité. Techniquement, l'endpoint /terminal/ws repose sur le protocole WebSocket pour établir une session PTY interactive côté serveur, fonctionnalité pensée pour permettre aux utilisateurs légitimes d'exécuter des commandes shell depuis l'interface du notebook. Le défaut de validation survient parce que la fonction de contrôle d'accès validate_auth(), correctement invoquée par le handler WebSocket principal (/ws), a été omise lors de l'implémentation du handler terminal — une régression probablement introduite lors de l'ajout de cette fonctionnalité de terminal intégré. Un attaquant n'a donc qu'à établir une connexion WebSocket brute vers cet endpoint, sans jeton de session ni cookie d'authentification, pour recevoir un shell interactif exécuté avec les droits du processus Marimo — généralement l'utilisateur système sous lequel le notebook tourne, parfois avec des permissions élevées dans les environnements de data science mal cloisonnés.

Cette classe de vulnérabilité n'est pas isolée : elle rappelle plusieurs failles similaires découvertes ces dernières années dans l'écosystème des notebooks Python, notamment sur Jupyter, où des endpoints d'administration ou de terminal intégré exposés sans authentification ont permis des compromissions comparables. Le point commun de ces incidents est l'usage de ces plateformes en environnement de développement ou de data science, où les équipes ont tendance à privilégier la rapidité de déploiement — souvent via des conteneurs exposés directement sur Internet pour faciliter l'accès collaboratif — au détriment du durcissement réseau. Les honeypots Sysdig ont documenté des connexions provenant d'adresses IP associées à des scans de masse automatisés, suggérant l'intégration rapide de cette CVE dans des frameworks d'exploitation opportunistes plutôt qu'une campagne ciblée.

Détection et outils de mitigation

Pour détecter une exposition, les administrateurs peuvent interroger directement l'endpoint vulnérable via wscat -c ws://<host>:<port>/terminal/ws : l'obtention d'une réponse de connexion sans challenge d'authentification confirme la vulnérabilité. Des scanners réseau comme Shodan et Censys permettent d'identifier les instances Marimo exposées publiquement via leurs bannières HTTP caractéristiques. Côté journalisation, il convient de surveiller les logs applicatifs Marimo pour toute connexion au path /terminal/ws ne présentant pas d'en-tête d'autorisation valide, ainsi que les commandes shell inhabituelles exécutées par le processus parent Marimo (via auditd ou un EDR).

En complément du correctif, les organisations ne pouvant pas migrer immédiatement vers la version 0.23.0 doivent restreindre l'accès réseau à l'interface Marimo via un pare-feu ou un groupe de sécurité cloud, en la limitant à un VPN ou une liste blanche d'IP internes. L'ajout d'un reverse proxy imposant une authentification préalable (SSO, Basic Auth) devant l'application constitue une mitigation temporaire efficace, tout comme la désactivation explicite de la fonctionnalité terminal intégré lorsque celle-ci n'est pas indispensable à l'usage du notebook.

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