En bref

  • La CVE-2026-39987 (CVSS 9.3) permet une exécution de code à distance sans authentification sur Marimo, un notebook Python open source.
  • La faille a été exploitée dans la nature moins de 10 heures après la publication de l'advisory, selon Sysdig.
  • Toutes les versions jusqu'à 0.20.4 sont vulnérables ; la correction est disponible dans la version 0.23.0.

Ce qui s'est passé

Points clés à retenir

  • Ce qui s'est passé
  • Pourquoi c'est important
  • Ce qu'il faut retenir

Marimo s'est imposé comme l'un des notebooks Python open source les plus prisés des équipes data science et machine learning, séduites par son exécution réactive et son partage simplifié. C'est précisément cette popularité qui rend la vulnérabilité Marimo CVE-2026-39987 RCE particulièrement préoccupante. Des chercheurs ont mis en évidence une faille d'authentification béante sur l'endpoint WebSocket /terminal/ws : contrairement aux autres points d'entrée, comme /ws, qui invoquent correctement la fonction validate_auth(), celui-ci n'effectue aucune vérification d'identité avant d'ouvrir la session. Conséquence directe : n'importe quel attaquant non authentifié capable d'atteindre l'instance sur le réseau obtient un shell PTY complet, avec les privilèges du processus hôte, sans exploiter le moindre débordement mémoire ni contourner de mécanisme cryptographique. Une simple requête suffit à transformer un notebook exposé en porte d'entrée sur l'ensemble du système d'information.

La vulnérabilité, référencée CVE-2026-39987 avec un score CVSS de 9.3, a été rendue publique début avril 2026. Selon les observations de Sysdig, des tentatives d'exploitation ont été détectées dans la nature en moins de 10 heures, un délai qui illustre la rapidité avec laquelle les attaquants intègrent les nouvelles failles dans leurs arsenaux. Ce constat rejoint les observations faites sur d'autres outils IA récemment ciblés, comme la faille sandbox escape dans PraisonAI ou la vulnérabilité CVSS 10 dans Flowise AI.

Toutes les versions de Marimo jusqu'à la 0.20.4 incluse sont affectées. L'équipe de développement a publié un correctif dans la version 0.23.0. Les instances exposées sur Internet sans proxy d'authentification sont les plus à risque, car l'exploitation ne nécessite aucun identifiant.

Pourquoi c'est important

Cette faille met en lumière un problème récurrent dans l'écosystème des outils de data science et d'IA : la sécurité est souvent sacrifiée au profit de la facilité d'utilisation. Les notebooks Python sont fréquemment déployés sur des serveurs accessibles depuis le réseau, parfois directement sur Internet, pour faciliter la collaboration. Un shell complet sans authentification transforme chaque instance vulnérable en point d'entrée pour un attaquant.

Le délai d'exploitation de 10 heures confirme une tendance préoccupante : les fenêtres de remédiation se réduisent drastiquement. Les équipes de sécurité ne peuvent plus compter sur des jours ou des semaines pour appliquer les correctifs. Cette réalité est d'autant plus critique pour les outils IA qui manipulent des données sensibles et ont souvent accès à des ressources GPU coûteuses, comme le soulignait notre analyse sur la surface d'attaque de l'IA agentique. La faille rappelle aussi les risques des contournements d'authentification dans Docker, un autre composant fréquent des environnements data science.

Ce qu'il faut retenir (2)

  • Mettez à jour Marimo vers la version 0.23.0 ou ultérieure sans délai.
  • Ne jamais exposer un notebook Python directement sur Internet sans reverse proxy avec authentification.
  • Surveillez les connexions WebSocket inhabituelles sur vos instances de notebooks et outils IA.

Comment protéger mes notebooks Python contre ce type de faille ?

Placez toujours vos notebooks derrière un reverse proxy (Nginx, Traefik) avec authentification forte. Limitez l'accès réseau aux seules adresses IP autorisées via des règles de pare-feu. Désactivez les fonctionnalités terminal si elles ne sont pas nécessaires. Enfin, maintenez vos outils à jour et surveillez les advisories de sécurité des projets que vous utilisez.

Le délai d'exploitation de 10 heures confirme une tendance préoccupante observée par plusieurs éditeurs de threat intelligence depuis 2025 : le temps moyen entre la publication d'un CVE critique et sa première exploitation en conditions réelles est passé sous la barre des 24 heures pour les outils exposant une interface web accessible sans authentification forte. Sysdig indique avoir repéré les premières tentatives via des scans automatisés ciblant le chemin /terminal/ws, signe que les groupes d'attaquants disposent désormais de pipelines capables d'intégrer un exploit fonctionnel dès la publication d'un advisory public, souvent avant même que les mainteneurs n'aient largement communiqué sur le correctif.

L'écosystème des notebooks Python et des plateformes IA constitue une cible de choix pour ce type d'attaque : ces environnements hébergent fréquemment des identifiants cloud, des clés d'API et des jeux de données sensibles, tout en tournant avec des privilèges système élevés pour faciliter l'installation de dépendances. Un shell PTY obtenu sans authentification permet à un attaquant non seulement d'exécuter du code arbitraire, mais aussi de pivoter vers l'infrastructure cloud sous-jacente via les métadonnées d'instance, un scénario déjà documenté sur des services Jupyter mal configurés exposés publiquement.

Ce qu'il faut retenir

  • La faille réside dans une absence totale de contrôle d'authentification sur l'endpoint WebSocket /terminal/ws, alors que l'endpoint /ws applique correctement validate_auth().
  • L'exploitation ne requiert aucun identifiant : un simple accès réseau à l'instance Marimo exposée suffit à obtenir un shell PTY complet.
  • Le délai de 10 heures entre publication et exploitation illustre la nécessité d'un patch management réactif, y compris pour les outils data science considérés comme secondaires par les équipes sécurité.
  • La mise à jour vers la version 0.23.0 corrige la vulnérabilité en rétablissant la validation d'authentification sur tous les endpoints WebSocket.

Comment protéger mes notebooks Python contre ce type de faille ?

La première mesure consiste à mettre à jour immédiatement toute instance Marimo vers la version 0.23.0 ou supérieure. En complément, plusieurs bonnes pratiques limitent l'exposition de ce type d'outil :

  • Ne jamais exposer directement un notebook sur Internet : placez l'instance derrière un VPN, un tunnel SSH ou un reverse proxy imposant une authentification (SSO, Basic Auth, mTLS).
  • Segmenter le réseau : limitez l'accès aux ports des serveurs de notebooks aux seules plages IP internes ou aux postes des data scientists via un pare-feu applicatif.
  • Auditer les endpoints WebSocket lors de l'intégration de tout nouvel outil open source de data science, en vérifiant que chaque route sensible applique bien une vérification d'authentification cohérente.
  • Surveiller les logs d'accès pour détecter des connexions WebSocket anormales ou des commandes shell inhabituelles exécutées depuis le processus du notebook.
  • Exécuter les notebooks dans des conteneurs isolés avec des privilèges minimaux, sans accès direct aux métadonnées cloud ni aux secrets de production.

Cet incident rappelle également l'intérêt d'intégrer les outils IA et data science dans le périmètre de la gestion des vulnérabilités de l'entreprise, au même titre que les serveurs applicatifs classiques, plutôt que de les traiter comme des outils de développement à part.

Besoin d'un accompagnement expert ?

Ayi NEDJIMI vous accompagne sur vos projets cybersécurité et IA.

Prendre contact

Sources et références