Marimo远程代码执行漏洞:9小时内无公开PoC即遭利用
Marimo版本低于0.23.0时存在严重漏洞CVE-2026-39987(CVSS评分9.3),攻击者可通过WebSocket实现未授权的root shell访问。Sysdig在2026年4月8日发布通告后仅9小时41分钟便捕获到首次攻击。攻击者仅凭技术说明就构建出攻击工具——无需公开的PoC(概念验证)——并在三分钟内从蜜罐中窃取了敏感凭证。
漏洞位于 /terminal/ws 接口:该接口缺少 /ws 接口中存在的 validate_auth() 认证检查。一次简单的WebSocket握手即可获得具备进程级权限的PTTY终端。在默认Docker镜像中,这意味着直接获取root权限,同时暴露存储在 .env 文件中的OpenAI、Anthropic和Google Gemini API密钥。
漏洞技术细节
Marimo使用WebSocket建立持久连接:/ws 处理响应式UI与笔记本单元格,而 /terminal/ws 则驱动嵌入式终端。后者仅校验终端模式标志和平台PTY支持,未进行会话令牌认证。
网络层验证自动生效,因此任何远程客户端均可连接并以服务器权限执行命令。GHSA-2679-6MX9-H9XC将其归类为CWE-306(关键功能缺失认证)。PR #9098 提供的修复方案已补上缺失的 validate_auth() 检查。
Docker部署显著放大风险:容器内进程以root运行,敏感信息存储于 .env 或 ~/.aws/credentials。一旦被攻破,将导致对大模型计费系统、模型及数据集的完全控制。
攻击时间线与检测指标
- 00:00:安全通告发布。
- 09:41:Sysdig蜜罐首次观测到对
/terminal/ws的连接。 - <3分钟:文件系统遍历,读取
.env、SSH密钥、云配置文件。 - 约1小时:攻击者返回确认持久化访问。
未发现挖矿程序或后门——表明是真实攻击者实施的针对性行动。建议通过代理(如nginx access.log、Caddy stdout)监控WebSocket流量。可疑行为:2026年4月8日后,外部IP地址连接 /terminal/ws。
常见敏感信息泄露路径:
.env~/.ssh/id_rsa、~/.ssh/id_ed25519~/.aws/credentials~/.config/gcloud/~/.bash_history
AI工具中的RCE模式
Marimo(GitHub星标2万+)被斯坦福大学、Mozilla AI、OpenAI和黑石集团广泛采用。部署场景涵盖Docker、Hugging Face Spaces及CoreWeave。这已是数月内的第三次RCE事件:
- Langflow CVE-2026-33017 —— 20小时内被利用。
- Flowise CVE-2025-59528(CVSS 10.0)—— 补丁发布后立即遭利用。
- Marimo CVE-2026-39987。
AI工具链(笔记本、工作流)常被视为开发环境,导致网络隔离薄弱、监控缺失、权限过度。现实是:这些系统直接关联生产环境中的模型、数据与计费系统。
防护措施与审计步骤
立即更新:
- 运行
marimo --version确认版本 ≥ 0.23.0。 - Docker部署:使用非root用户重建镜像。
若您的端口在2026年4月8日后曾对外暴露,极可能已被入侵。请采取以下措施:
- 立即轮换密钥:大模型API密钥、云凭证、SSH密钥。
- 审计OpenAI/Anthropic/Google账单日志,排查异常请求。
- 使用
ss -tlnp | grep LISTEN检查Marimo、Jupyter或Flowise是否监听0.0.0.0。 - 启动时添加限制:
marimo edit --host 127.0.0.1,并配置反向代理保护(nginx身份验证、Caddy OAuth2)。 - 通过GitHub安全通告、osv.dev及CISA KEV持续关注最新威胁情报。
核心启示
- 攻击速度:从通告到成功利用仅9小时41分钟——属于高文档化漏洞的标准响应速度。
- 默认root权限:Docker版Marimo需显式配置用户,否则默认以root运行。
- 目标明确:
.env文件中的大模型密钥是首要攻击目标。 - AI-RCE趋势:连续三次RCE事件,凸显生产环境安全实践的紧迫性。
- 检测重点:在代理日志中监控
/terminal/ws访问;定期审计大模型使用行为。
— Editorial Team
暂无评论。