marimo - CVE-2026-39987
Date de publication :
Il s'agit d'une vulnérabilité d'absence d'authentification sur une fonction critique dans marimo.
marimo est un environnement de notebooks Python réactif et interactif, conçu pour le développement et le partage de scripts d'analyse de données et d'applications web légères directement depuis le navigateur.
L'endpoint WebSocket /terminal/ws ne fait appel ni au décorateur @requires() ni à la fonction validate_auth(), contrairement à l'endpoint /ws qui les implémente correctement. Le middleware AuthenticationMiddleware de Starlette marque les connexions non authentifiées comme UnauthenticatedUser sans les rejeter activement, laissant l'application de l'authentification à la charge de chaque endpoint. La connexion est acceptée via websocket.accept(), puis un shell PTY interactif est créé par pty.fork(), exposant un terminal système complet. Dans les déploiements Docker par défaut, le processus s'exécute en tant que root.
Elle permet à un attaquant non authentifié d'obtenir une exécution de code arbitraire à distance avec des privilèges root via une simple connexion WebSocket.
Informations
La faille est activement exploitée : Oui
Un correctif existe : Oui
Une mesure de contournement existe : Non
Exécution de code arbitraire (à distance)
Exploitation
CWE-306 : Missing Authentication for Critical Function
Détails sur l'exploitation
• Vecteur d'attaque : Réseau
• Complexité de l'attaque : Faible
• Privilèges nécessaires pour réaliser l'attaque : Aucun
• Interaction d'un utilisateur ayant accès au produit est-elle nécessaire : Non
• L'exploitation de la faille permet d'obtenir des droits privilégiés : Oui
Preuve de concept
Une preuve de concept est disponible en sources ouvertes.
Systèmes ou composants affectés
marimo versions 0.20.4 et antérieures