Diferencia entre revisiones de «Marimo Pre-Auth RCE Vulnerability (CVE-2026-39987) Active Exploitation Campaign»
(Descripción de Marimo Pre-Auth RCE Vulnerability (CVE-2026-39987) Active Exploitation Campaign) |
(Sin diferencias)
|
Revisión del 18:40 13 abr 2026
Marimo Pre-Auth RCE Exploitation Campaign se refiere a la explotación activa y generalizada de una vulnerabilidad crítica de ejecución remota de código (RCE) sin autenticación en la plataforma de cuadernos Python reactivos de código abierto Marimo, registrada como CVE-2026-39987 con una puntuación CVSS crítica de 9.3 sobre 10. La vulnerabilidad, que afecta a todas las versiones de Marimo anteriores a la 0.23.0, reside en el endpoint WebSocket /terminal/ws, que expone una terminal interactiva completa sin realizar las comprobaciones de autenticación adecuadas. A diferencia de otros endpoints WebSocket como /ws que llaman correctamente a validate_auth(), el endpoint /terminal/ws solo verifica el modo de ejecución y el soporte de la plataforma antes de aceptar conexiones, saltándose por completo la validación de autenticación. Los atacantes comenzaron a explotar esta vulnerabilidad en estado salvaje apenas 10 horas después de su divulgación pública el 8 de abril de 2026. Según investigadores de Sysdig, en las primeras 12 horas posteriores a la revelación de los detalles, 125 direcciones IP comenzaron a realizar actividades de reconocimiento. La explotación observada muestra un "operador metódico" con enfoque práctico y manual, no scripts automatizados, que se centra en objetivos de alto valor como el robo de credenciales de archivos .env y claves SSH. Toda la fase de acceso a credenciales se completó en menos de tres minutos. La vulnerabilidad afecta especialmente a usuarios que implementan Marimo como cuaderno editable expuesto a redes compartidas mediante --host 0.0.0.0 en modo edición, y en implementaciones Docker por defecto donde los comandos se ejecutan como root. Marimo lanzó la versión parcheada 0.23.0 el 11 de abril de 2026 para solucionar la vulnerabilidad.
Nombres Alternativos / Aliases
- CVE-2026-39987 Campaign (Por el identificador de vulnerabilidad)
- Marimo Terminal RCE (Por el vector de ataque)
- 10-Hour Exploit Campaign (Por la rápida explotación tras divulgación)
- Marimo WebSocket Auth Bypass (Por la causa raíz)
- Pre-Auth Marimo RCE (Por la naturaleza sin autenticación)
Fecha de Detección / Actividad
- Divulgación Pública de la Vulnerabilidad: 8 de abril de 2026 (publicación del advisory de seguridad GHSA-2679-6mx9-h9xc).
- Primer Intento de Explotación Observado: Menos de 10 horas después de la divulgación.
- Ventana de Explotación Inicial: 10 horas a 12 horas post-divulgación (125 IPs activas).
- Fecha de Lanzamiento de la Versión Parcheada (0.23.0): 11 de abril de 2026.
- Fecha de Publicación del Análisis de Explotación: 12 de abril de 2026.
- Estado: Activo. La vulnerabilidad sigue siendo explotada en instancias de Marimo no parcheadas.
Actor de Amenaza (Atribución)
- Nombre del Actor: No atribuido a un grupo específico. Se observaron 125 direcciones IP distintas realizando reconocimiento en las primeras 12 horas.
- Tipo de Actor: Múltiples actores oportunistas, incluyendo investigadores de seguridad (grey hat) y ciberdelincuentes. El análisis de Sysdig sugiere que al menos un operador es "metódico" con enfoque práctico y manual, no puramente automatizado.
- Sofisticación: Alta en cuanto a velocidad de respuesta (explotación en menos de 10 horas). Los atacantes demostraron capacidad para: (a) analizar rápidamente el advisory de seguridad, (b) desarrollar o adaptar un exploit funcional, (c) realizar reconocimiento a gran escala (125 IPs en 12 horas), (d) ejecutar un robo de credenciales manual y dirigido en menos de 3 minutos, y (e) evitar la instalación de persistencia o backdoors para mantener un perfil bajo y sigiloso.
Resumen Ejecutivo
Marimo Pre-Auth RCE Exploitation Campaign representa un ejemplo clásico de la "carrera armamentista" en ciberseguridad, donde una vulnerabilidad crítica es explotada en estado salvaje en cuestión de horas tras su divulgación pública. La vulnerabilidad CVE-2026-39987 afecta a Marimo, una popular plataforma de cuadernos Python reactivos con 20,000 estrellas en GitHub y 1,000 forks, utilizada extensamente por científicos de datos, profesionales de machine learning e IA, investigadores y desarrolladores. La causa raíz es la omisión de validación de autenticación en el endpoint WebSocket /terminal/ws. Mientras que otros endpoints como /ws implementan correctamente validate_auth(), el endpoint de terminal solo verifica el modo de ejecución (modo edición) y el soporte de plataforma, aceptando conexiones sin autenticación alguna. Un atacante no autenticado puede conectarse directamente al WebSocket, obtener una shell PTY completa (pseudo-terminal), y ejecutar comandos arbitrarios en el sistema con los mismos privilegios que el proceso de Marimo. En implementaciones Docker por defecto, esto significa ejecución como root. El advisory de seguridad fue publicado el 8 de abril de 2026. En menos de 10 horas, los investigadores de Sysdig observaron el primer intento de explotación activa. En las primeras 12 horas, 125 direcciones IP realizaron actividades de reconocimiento. El atacante observado siguió un patrón metódico: (1) validación de la vulnerabilidad conectándose a /terminal/ws, (2) reconocimiento manual con comandos pwd, whoami, ls, (3) exploración de directorios y búsqueda de ubicaciones SSH, (4) extracción de credenciales del archivo .env (variables de entorno, credenciales de nube, secretos de aplicación), (5) búsqueda de claves SSH adicionales. Toda la fase de robo de credenciales se completó en menos de 3 minutos. El atacante no instaló persistencia, mineros de criptomonedas ni backdoors, sugiriendo una operación rápida, sigilosa y enfocada en objetivos de alto valor. Se recomienda a todos los usuarios de Marimo actualizar inmediatamente a la versión 0.23.0, rotar todos los secretos expuestos, y bloquear el acceso al endpoint /terminal/ws.
Vectores de Ataque / Métodos de Explotación
- Conexión WebSocket sin Autenticación: El atacante establece una conexión WebSocket al endpoint
ws://TARGET:2718/terminal/wssin proporcionar ningún token de autenticación. - Omisión de Validación de Autenticación: El endpoint no llama a
validate_auth()ni utiliza el decorador@requires("edit"). Solo verifica el modo de ejecución (modo edición) y soporte de plataforma. - Obtención de Shell PTY: El servidor ejecuta
pty.fork(), creando un proceso hijo PTY (pseudo-terminal) que proporciona una shell interactiva completa. - Ejecución de Comandos Arbitrarios: El atacante envía comandos a través del WebSocket, que se ejecutan en la shell del sistema con los privilegios del proceso Marimo (root en contenedores Docker por defecto).
- Reconocimiento y Robo de Credenciales: El atacante explora el sistema, lee archivos sensibles como
.env(credenciales de nube, secretos) y busca claves SSH. - Exfiltración de Datos: Las credenciales y secretos robados son exfiltrados fuera del sistema comprometido.
Técnicas, Tácticas y Procedimientos (TTPs) - MITRE ATT&CK
| Táctica (MITRE ATT&CK) | Técnica / Subtécnica | Descripción / Implementación |
|---|---|---|
| Initial Access (TA0001) | Exploit Public-Facing Application (T1190) | Explotación de la vulnerabilidad CVE-2026-39987 en instancias de Marimo expuestas a internet. |
| Execution (TA0002) | Command and Scripting Interpreter: Unix Shell (T1059.004) | Obtención de shell PTY interactiva a través del WebSocket /terminal/ws.
|
| Execution (TA0002) | Native API (T1106) | Uso de pty.fork() para crear procesos terminales.
|
| Privilege Escalation (TA0004) | Exploitation for Privilege Escalation (T1068) | La vulnerabilidad proporciona directamente ejecución de comandos con los privilegios del proceso (root en Docker). |
| Defense Evasion (TA0005) | Indicator Removal (T1070) | El atacante observado no instaló persistencia ni backdoors, manteniendo un perfil bajo y sin dejar rastros obvios. |
| Discovery (TA0007) | System Information Discovery (T1082) | Ejecución de comandos pwd, whoami, ls para reconocimiento del entorno.
|
| Discovery (TA0007) | File and Directory Discovery (T1083) | Navegación por directorios, búsqueda de ubicaciones SSH y archivos de configuración. |
| Discovery (TA0007) | System Network Configuration Discovery (T1016) | Posible reconocimiento de red (implícito en los comandos ejecutados). |
| Credential Access (TA0006) | Unsecured Credentials: Credentials In Files (T1552.001) | Lectura del archivo .env que contiene credenciales de nube, secretos de aplicación y variables de entorno.
|
| Credential Access (TA0006) | Unsecured Credentials: Private Keys (T1552.004) | Búsqueda y extracción de claves SSH privadas. |
| Collection (TA0009) | Data from Local System (T1005) | Recopilación de credenciales, secretos y archivos sensibles del sistema. |
| Exfiltration (TA0010) | Exfiltration Over C2 Channel (T1041) | Exfiltración de datos robados a través de la misma conexión WebSocket o canal alternativo. |
| Impact (TA0040) | Data Destruction (T1485) / Impact no aplicado | No se observó impacto destructivo; el objetivo fue robo de credenciales. |
Flujo de Ataque (Cyber Kill Chain)
- Reconocimiento: El atacante escanea internet en busca de instancias de Marimo expuestas (puerto 2718 por defecto). 125 direcciones IP fueron observadas en las primeras 12 horas post-divulgación.
- Armamento: El atacante desarrolla o adapta un exploit basado en el advisory público (GitHub Security Advisory GHSA-2679-6mx9-h9xc) y el código de prueba de concepto (PoC).
- Entrega: El atacante se conecta directamente al endpoint vulnerable
ws://TARGET:2718/terminal/ws. No se requiere interacción del usuario ni entrega de archivos. - Explotación: El atacante establece la conexión WebSocket. El servidor acepta la conexión sin autenticación y ejecuta
pty.fork(), proporcionando una shell PTY interactiva. - Instalación: El atacante no instala persistencia ni backdoors (operación sigilosa). La shell activa es el mecanismo de control.
- Comando y Control (C2): La conexión WebSocket actúa como canal C2 bidireccional, permitiendo al atacante enviar comandos y recibir salida en tiempo real.
- Acción sobre Objetivos:
- Reconocimiento Manual:
pwd,whoami,ls - Exploración: Búsqueda de directorios, ubicaciones SSH
- Robo de Credenciales: Extracción del archivo
.envy claves SSH - Exfiltración: Envío de datos robados fuera del sistema
- Reconocimiento Manual:
Infraestructura Utilizada
| Tipo | Indicador / Característica | Propósito |
|---|---|---|
| Instancias Marimo Vulnerables | Versiones <= 0.20.4, expuestas en puerto 2718 con --host 0.0.0.0
|
Objetivo del ataque, proporcionan shell no autenticada. |
| Endpoint WebSocket Vulnerable | /terminal/ws en puerto 2718
|
Vector de explotación que permite shell interactiva. |
| Direcciones IP Atacantes | 125 IPs distintas (primeras 12 horas) | Escaneo y explotación. No se proporcionaron IPs específicas en el artículo. |
| Comandos Utilizados | pwd, whoami, ls, navegación de directorios, lectura de .env y archivos SSH
|
Reconocimiento y robo de credenciales. |
| Archivos Objetivo | .env (variables de entorno), claves SSH, credenciales de nube
|
Extracción de secretos y credenciales. |
Objetivos y Sectores Afectados
- Objetivo Principal: Usuarios y organizaciones que implementan Marimo como cuaderno editable expuesto a redes compartidas o internet.
- Sectores Prioritarios:
- Ciencia de Datos y Machine Learning
- Investigación y Desarrollo
- Inteligencia Artificial
- Educación y Academia
- Empresas tecnológicas que utilizan Marimo para prototipado rápido y dashboards.
- Perfiles de Usuario Afectados: Científicos de datos, ingenieros de ML, investigadores, desarrolladores, educadores.
- Configuraciones de Alto Riesgo: Usuarios que ejecutan
marimo edit --host 0.0.0.0 --port 2718exponiendo el servidor a redes compartidas. Implementaciones Docker por defecto donde los comandos se ejecutan comoroot. - Distribución Geográfica: Global, dada la popularidad del proyecto (20,000 estrellas en GitHub).
Impacto y Riesgo
- Nivel de Riesgo: Crítico (CVSS 9.3 - GitHub) . La vulnerabilidad permite ejecución remota de código sin autenticación, sin interacción del usuario.
- Impacto Potencial:
- Compromiso Total del Sistema: El atacante obtiene una shell interactiva completa con los privilegios del proceso Marimo (root en Docker).
- Robo de Credenciales de la Nube: Extracción de credenciales de AWS, Azure, GCP del archivo
.env, permitiendo acceso a infraestructura cloud. - Robo de Claves SSH: Compromiso de claves SSH que pueden ser utilizadas para acceder a otros sistemas.
- Exfiltración de Datos Sensibles: Robo de secretos de aplicación, tokens de API, contraseñas de bases de datos.
- Pivoting a Redes Internas: Uso del sistema comprometido como punto de entrada para moverse lateralmente a otras máquinas en la red.
- Impacto en la Cadena de Suministro: Si el entorno comprometido contiene código fuente, dependencias o pipelines de CI/CD, el atacante podría introducir backdoors en artefactos de software.
- Rápida Explotación a Gran Escala: 125 IPs atacantes en 12 horas demuestra la capacidad de actores maliciosos para explotar vulnerabilidades críticas casi inmediatamente después de su divulgación.
- Nota sobre la Explotación Observada: El atacante específico analizado por Sysdig no instaló persistencia ni backdoors, centrándose exclusivamente en el robo rápido de credenciales de alto valor. Esto sugiere una operación sigilosa, posiblemente enfocada en la recolección de inteligencia para ataques posteriores.
Recomendaciones de Mitigación
- Actualización Inmediata a la Versión Parcheada (M1051):
- Actualizar Marimo a la versión 0.23.0 o superior inmediatamente.
- Ejecutar:
pip install --upgrade marimo - Verificar la versión instalada:
marimo version
- Bloqueo del Endpoint Vulnerable (M1037):
- Si la actualización no es posible de inmediato, bloquear o deshabilitar completamente el acceso al endpoint
/terminal/ws. - Configurar el firewall o proxy inverso para rechazar solicitudes a
ws://DOMAIN:2718/terminal/ws. - En implementaciones con Nginx/Apache, añadir reglas de bloqueo específicas para ese path.
- Si la actualización no es posible de inmediato, bloquear o deshabilitar completamente el acceso al endpoint
- Restricción de Exposición de Red (M1030):
- No exponer Marimo en modo edición a redes no confiables. Evitar el uso de
--host 0.0.0.0a menos que sea absolutamente necesario. - Si se requiere acceso remoto, utilizar VPN, túnel SSH (
ssh -L 2718:localhost:2718), o proxy inverso con autenticación adicional. - Implementar segmentación de red para aislar instancias de Marimo de redes externas.
- No exponer Marimo en modo edición a redes no confiables. Evitar el uso de
- Rotación de Secretos Comprometidos (M1026, M1053):
- Si se sospecha que una instancia de Marimo ha sido comprometida (especialmente si estaba expuesta en la versión vulnerable), rotar inmediatamente todos los secretos almacenados en archivos
.env, incluyendo:- Credenciales de proveedores de nube (AWS, Azure, GCP)
- Claves API de servicios externos
- Tokens de acceso
- Contraseñas de bases de datos
- Claves SSH privadas
- Asumir que cualquier secreto presente en el sistema comprometido ha sido exfiltrado.
- Si se sospecha que una instancia de Marimo ha sido comprometida (especialmente si estaba expuesta en la versión vulnerable), rotar inmediatamente todos los secretos almacenados en archivos
- Monitoreo y Detección (M1040):
- Monitorear logs de acceso para detectar conexiones WebSocket al endpoint
/terminal/wsdesde IPs inesperadas. - Implementar reglas de detección para: (a) conexiones al puerto 2718 desde el exterior, (b) patrones de comandos anómalos (ejecución de
whoami,cat .env, búsqueda de claves SSH). - Utilizar soluciones de detección de intrusiones (IDS/IPS) para identificar intentos de explotación de CVE-2026-39987.
- Monitorear logs de acceso para detectar conexiones WebSocket al endpoint
Herramientas de Detección
- Monitoreo de Logs de Acceso: Revisar logs de Marimo y logs del servidor web/proxy para identificar conexiones al endpoint
/terminal/ws. - Análisis de Tráfico de Red: Herramientas de NDR (Network Detection and Response) pueden detectar conexiones WebSocket al puerto 2718 y patrones de comandos sospechosos (ej.,
cat .env,ls -la,whoami). - Escáneres de Vulnerabilidades: Herramientas como Nessus, Qualys, o Nuclei pueden identificar instancias de Marimo vulnerables (versiones <= 0.20.4) mediante la verificación del endpoint
/terminal/ws. - SIEM: Correlacionar eventos de acceso, logs de autenticación y actividad de red para identificar intentos de explotación.
- Hunting Manual: Buscar en sistemas sospechosos de estar comprometidos la presencia de conexiones WebSocket activas a
/terminal/ws, procesos PTY anómalos (pty.fork()), o archivos.envleídos recientemente.
Referencias y Fuentes
- Toulas, B. (2026, 12 de abril). La vulnerabilidad crítica de ejecución remota de código (RCE) en Marimo, que no requería autorización previa, está siendo explotada activamente. (Artículo proporcionado por el usuario).
- Sysdig. (2026, abril). *Marimo CVE-2026-39987 Active Exploitation Analysis*. (Análisis citado en el artículo).
- GitHub Security Advisory. (2026, 8 de abril). *GHSA-2679-6mx9-h9xc: Pre-Auth Remote Code Execution via Terminal WebSocket Authentication Bypass*. (Advisory oficial).
- NIST NVD. (2026). *CVE-2026-39987 Detail*. (Vulnerabilidad registrada).
- MITRE ATT&CK Framework. Enterprise Matrix. (Para mapeo de TTPs).
- Marimo Project. (2026, 11 de abril). Release 0.23.0. (Versión parcheada).
Historial de Revisiones
| Fecha | Versión | Autor | Cambios Realizados |
|---|---|---|---|
| 2026-04-13 | 1.0 | Fernando Vargas | Creación inicial de la entrada basada en el análisis de explotación de CVE-2026-39987. |
Indicadores de Compromiso (IOCs)
| Tipo | Valor |
|---|---|
| CVE ID | CVE-2026-39987 |
| Puntuación CVSS | 9.3 (Crítica - GitHub) |
| Versiones Afectadas | Marimo <= 0.20.4 |
| Versión Parcheada | Marimo 0.23.0 |
| Endpoint Vulnerable | /terminal/ws (WebSocket)
|
| Puerto por Defecto | 2718 |
| Protocolo | WebSocket (ws://) |
| Causa Raíz | Omisión de validate_auth() en endpoint WebSocket (CWE-306: Missing Authentication for Critical Function)
|
| Comando de Exposición Riesgosa | marimo edit --host 0.0.0.0 --port 2718
|
| Número de IPs Atacantes (12h) | 125 direcciones IP distintas |
| Tiempo a Primer Exploit | < 10 horas post-divulgación |
| Tiempo de Robo de Credenciales | < 3 minutos |
| Archivos Objetivo | .env, claves SSH (id_rsa, id_ed25519, etc.), credenciales de nube
|
| Comandos Observados | pwd, whoami, ls, navegación de directorios, lectura de archivos
|
| Comportamiento Anómalo | Conexiones WebSocket entrantes al puerto 2718 sin autenticación |
| Comportamiento Anómalo | Procesos PTY anómalos (pty.fork()) en servidores Marimo
|
| Comportamiento Anómalo | Acceso a archivos .env desde procesos no autorizados
|
| TTP Clave | Exploit Public-Facing Application (T1190) + Unsecured Credentials: Credentials In Files (T1552.001) |
Etiquetas / Categorías
cve-2026-39987 marimo rce pre-auth websocket critical-vulnerability active-exploitation sysdig python-notebook data-science credential-theft env-file ssh-keys docker zero-day vulnerability ciberwiki marimo-vulnerability 10-hour-exploit bill-toulas