Volver al Blog
Ciberseguridad 11 de abril de 2026 5 min read

CVE-2026-39987: Marimo Python Notebook expone RCE sin autenticación — CISA ordena parche de emergencia

Una vulnerabilidad crítica de CVSS 9.3 en Marimo Python notebook versiones ≤ 0.20.4 permite a cualquier atacante ejecutar código arbitrario sin credenciales mediante un endpoint WebSocket sin autenticación. CISA lo añadió al catálogo KEV con fecha límite federal del 11 de abril.

CVE-2026-39987: Marimo Python Notebook expone RCE sin autenticación — CISA ordena parche de emergencia

Parchea ahora: pip install --upgrade "marimo>=0.23.0"

CVE-2026-39987 es una vulnerabilidad de ejecución remota de código sin autenticación previa en Marimo, el notebook Python reactivo ampliamente utilizado por científicos de datos, ingenieros de ML e investigadores. Puntuación CVSS: 9.3 (Crítica, CVSS v4.0). Afectadas: todas las versiones de Marimo hasta la 0.20.4 inclusive. Corregida en: 0.23.0. El equipo Sysdig Threat Research observó el primer exploit in the wild 9 horas y 41 minutos después de la divulgación pública el 10 de abril. CISA lo añadió al catálogo de Vulnerabilidades Explotadas Conocidas (KEV) con fecha límite de remediación del 11 de abril de 2026 para todas las agencias federales.

La causa raíz

La vulnerabilidad reside en el endpoint WebSocket /terminal/ws de Marimo. Todos los demás endpoints sensibles de Marimo llaman correctamente a validate_auth() antes de proceder. Este lo omite por completo.

Las únicas comprobaciones realizadas antes de aceptar una conexión WebSocket son: (1) ¿está el servidor en modo edición? y (2) ¿admite el sistema operativo anfitrión PTY? Ambas se cumplen en prácticamente todas las configuraciones desplegadas. Una vez superadas, Marimo llama a websocket.accept() seguido inmediatamente de pty.fork(), entregando al atacante una sesión de terminal interactiva completa.

Sin credenciales. Sin phishing. Sin tokens de sesión. Una única conexión WebSocket.

Qué roban los atacantes

La shell PTY se ejecuta como el usuario que lanzó el servidor Marimo, a menudo root en despliegues Docker y frecuentemente la cuenta local de un desarrollador con acceso completo a su entorno. Tiempo promedio de exfiltración de credenciales observado in the wild: menos de 3 minutos. Lo que se extrae:

  • Archivos .env (claves API, contraseñas de bases de datos, credenciales de servicios)
  • Credenciales de acceso a AWS, GCP y Azure almacenadas localmente
  • Claves privadas SSH
  • Cadenas de conexión de bases de datos
  • URLs de servicios HTTP internos y tokens

Si Marimo se ejecuta en un pipeline de CI/CD, un entorno compartido tipo Jupyter o una plataforma de datos alojada en la nube, el radio de impacto se extiende mucho más allá del notebook individual.

Exposición a escala

Marimo tiene aproximadamente 19.600 estrellas en GitHub y una adopción creciente en flujos de trabajo de ingeniería de ML y ciencia de datos. Endor Labs analizó 186 instancias de Marimo accesibles públicamente y encontró que el 16%, aproximadamente 30 servidores, seguían aceptando conexiones no autenticadas a /terminal/ws durante su ventana de análisis. Eso es un mínimo conservador; la gran mayoría de los despliegues de Marimo no están indexados públicamente.

Solución y mitigaciones

Actualiza a 0.23.0 de inmediato:

pip install --upgrade "marimo>=0.23.0"

El parche añade la validación de autenticación adecuada al endpoint /terminal/ws antes de cualquier handshake WebSocket.

Si no puedes actualizar de inmediato:

  • Restringe el acceso de red al puerto de Marimo (por defecto el 2718) mediante reglas de firewall o VPN
  • No expongas Marimo directamente a internet público
  • Audita los registros del servidor en busca de conexiones WebSocket inesperadas a /terminal/ws

Cualquier instancia de Marimo que haya ejecutado la versión ≤ 0.20.4 mientras era accesible por red debe considerarse completamente comprometida. Rota todas las credenciales almacenadas en variables de entorno o accesibles desde el servidor: credenciales de proveedores cloud, contraseñas de bases de datos y claves SSH.

marimo python rce cve cybersecurity