Volver al inicio

RCE en Marimo CVE-2026-39987: explotado en 9 horas

RCE crítico CVE-2026-39987 en Marimo permite acceso root pre-auth vía /terminal/ws. Exploit ensamblado en 9 horas sin PoC, Sysdig registró ataque en honeypot. Recomendaciones: actualiza, rotación de secretos, protección de red.

RCE en Marimo: root vía WebSocket sin contraseña — explotado en 9 horas
Advertisement 728x90

RCE Crítico en Marimo: Explotación en 9 Horas Sin PoC Público

La vulnerabilidad crítica CVE-2026-39987 (CVSS 9.3) en versiones de Marimo anteriores a la 0.23.0 permite acceso no autorizado a shell root mediante WebSocket. Sysdig detectó el primer ataque apenas 9 horas y 41 minutos después de que se publicara el aviso el 8 de abril de 2026. Los atacantes construyeron un exploit únicamente con la descripción técnica —sin necesidad de un PoC público— y extrajeron secretos de un honeypot en menos de tres minutos.

El fallo reside en el endpoint /terminal/ws: carece de la llamada validate_auth() presente en /ws. Una simple conexión WebSocket otorga una shell PTY con privilegios de proceso. En imágenes Docker por defecto, esto significa acceso root, además de exposición de claves API de OpenAI, Anthropic y Google Gemini almacenadas en archivos .env.

Detalles Técnicos de la Vulnerabilidad

Marimo utiliza WebSockets para conexiones persistentes: /ws gestiona la interfaz reactiva y las celdas del cuaderno, mientras que /terminal/ws impulsa el terminal integrado. El último endpoint solo verifica banderas de modo terminal y compatibilidad con PTY —no se realiza autenticación con token de sesión.

Google AdInline article slot

La validación a nivel de red ocurre automáticamente. Como resultado, cualquier cliente remoto puede conectarse y ejecutar comandos con privilegios del servidor. GHSA-2679-6MX9-H9XC clasifica esto como CWE-306 (autenticación ausente para funciones críticas). La corrección en el PR #9098 añade la verificación validate_auth() faltante.

Las implementaciones en Docker aumentan el riesgo: los procesos se ejecutan como root, y los secretos se almacenan en archivos .env o ~/.aws/credentials. El compromiso lleva al acceso total a facturación de LLM, modelos y conjuntos de datos.

Cronología del Ataque e Indicadores

  • 00:00: Aviso publicado.
  • 09:41: Primera conexión a /terminal/ws observada en el honeypot de Sysdig.
  • <3 min: Navegación por sistema de archivos, lectura de .env, claves SSH y configuraciones de nube.
  • ~1 hora: El atacante regresó para verificar persistencia.

No se desplegaron mineros ni backdoors —indicando una operación dirigida por un atacante activo. Monitorea el tráfico WebSocket a través de proxies (nginx access.log, Caddy stdout). Actividad sospechosa: conexiones desde IP externas a /terminal/ws tras el 8 de abril de 2026.

Google AdInline article slot

Rutas comunes para descubrir secretos:

  • .env
  • ~/.ssh/id_rsa, ~/.ssh/id_ed25519
  • ~/.aws/credentials
  • ~/.config/gcloud/
  • ~/.bash_history

Patrón de RCE en Herramientas de IA

Marimo (20k estrellas en GitHub) es ampliamente utilizado en Stanford, Mozilla AI, OpenAI y BlackRock. Sus despliegues abarcan Docker, Hugging Face Spaces y CoreWeave. Este caso marca el tercer RCE en meses:

  • Langflow CVE-2026-33017 — explotado en menos de 20 horas.
  • Flowise CVE-2025-59528 (CVSS 10.0) — explotado tras la corrección.
  • Marimo CVE-2026-39987.

Las cadenas de herramientas de IA (cuadernos, pipelines) suelen tratarse como herramientas de desarrollo —lo que genera segmentación débil, monitoreo deficiente y privilegios excesivos. Realidad: acceso productivo a modelos, datos y sistemas de facturación.

Google AdInline article slot

Medidas de Protección y Pasos de Auditoría

Actualiza inmediatamente:

  • Ejecuta marimo --version para confirmar ≥ 0.23.0.
  • En Docker: reconstruye la imagen usando un usuario no root (USER).

Si tu puerto estuvo expuesto tras el 8 de abril, el compromiso es probable. Aplica estas acciones:

  • Rotar secretos: claves de LLM, credenciales de nube, claves SSH.
  • Audita los registros de facturación de OpenAI/Anthropic/Google ante solicitudes desconocidas.
  • Usa ss -tlnp | grep LISTEN para verificar si Marimo, Jupyter o Flowise escuchan en 0.0.0.0.
  • Inicia con marimo edit --host 127.0.0.1 y añade protección mediante proxy inverso (autenticación nginx, OAuth2 en Caddy).
  • Monitorea avisos via GitHub Security Advisories, osv.dev y CISA KEV.

Conclusiones Clave

  • Velocidad de ataque: 9h 41m desde el aviso hasta el RCE —típico para vulnerabilidades bien documentadas.
  • Acceso root por defecto: Marimo en Docker requiere personalización explícita del usuario.
  • Los secretos son el objetivo principal: Archivos .env con claves de LLM son objetivos prioritarios.
  • Tendencia de RCE en IA: Tercer RCE consecutivo —exige prácticas de seguridad de producción.
  • Detección: Vigila los logs de /terminal/ws en proxies; audita patrones de uso de LLM.

— Editorial Team

Advertisement 728x90

Leer después