CiberBlog

Marimo parchea RCE pre-auth CVSS 9.3 explotado 10 horas tras divulgación

Imagen Marimo parchea RCE CVE-2026-39987
Un solo handshake WebSocket bastaba para obtener shell completo sin credenciales.

El endpoint WebSocket del terminal integrado no validaba autenticación. Sysdig detectó explotación activa en menos de 10 horas con robo de credenciales en 3 minutos.

Marimo publicó el 9 de abril la versión 0.23.0 con un parche crítico para CVE-2026-39987, una vulnerabilidad de ejecución remota de código (RCE) sin autenticación con CVSS 9.3 que permite obtener una shell interactiva completa mediante una única conexión WebSocket. El fallo afecta a todas las versiones anteriores del popular framework de notebooks reactivos para Python, utilizado por equipos de ciencia de datos y machine learning en entornos colaborativos frecuentemente expuestos a internet.

El vector de ataque reside en el endpoint /terminal/ws, que implementa el terminal integrado de Marimo. Mientras otros endpoints WebSocket del servidor —como /ws— invocan correctamente la función validate_auth() para verificar credenciales, la ruta del terminal únicamente comprueba el modo de ejecución y la compatibilidad de plataforma antes de aceptar conexiones, omitiendo por completo cualquier validación de identidad. Un atacante remoto solo necesita completar un handshake WebSocket para obtener acceso a un PTY completo con los privilegios del usuario que ejecuta el proceso Marimo, según detalla el registro CVE-2026-39987 en NIST.

La gravedad del fallo se amplifica por la velocidad de explotación en el mundo real. El equipo de investigación de amenazas de Sysdig observó el primer intento de explotación apenas 9 horas y 41 minutos después de la publicación del advisory oficial, sin que existiera código de prueba de concepto (PoC) disponible en ese momento.

El atacante construyó un exploit funcional directamente a partir de la descripción técnica del advisory, se conectó al endpoint vulnerable y comenzó una exploración manual del sistema de archivos en cuestión de minutos. La operación completa de robo de credenciales, incluyendo acceso al archivo .env, búsqueda de claves SSH y exfiltración de datos sensibles, se ejecutó en menos de 3 minutos.

La naturaleza reactiva de Marimo, diseñado como alternativa moderna a Jupyter para notebooks Python, fomenta despliegues accesibles remotamente para colaboración en tiempo real. Esta arquitectura de uso choca con la superficie de ataque expuesta: instancias en modo edición accesibles desde internet con datos sensibles, variables de entorno y credenciales de servicios adyacentes. El análisis de Endor Labs estima que decenas o incluso cientos de instancias podrían permanecer expuestas y vulnerables si no se aplica el parche con urgencia.

El fallo está clasificado como CWE-306 (Missing Authentication for Critical Function), una categoría que agrupa vulnerabilidades donde funciones críticas del sistema carecen de mecanismos de autenticación adecuados. Marimo cerró la brecha de autenticación en la versión 0.23.0, alineando la validación del endpoint del terminal con la que ya aplicaban otros WebSockets del servidor.

Los equipos que ejecutan Marimo en cualquier versión anterior a 0.23.0 deben actualizar inmediatamente ejecutando pip install --upgrade "marimo>=0.23.0", especialmente si la instancia está expuesta más allá de una red estrictamente confiable. La ventana entre divulgación y explotación se ha reducido a horas, no días y cualquier servidor de notebooks accesible desde internet debe tratarse como objetivo de alto valor.

FUENTE ORIGINAL

Endor Labs
RB

CURADO POR

Ricardo Burgos

Twitter / XLinkedInWhatsApp