keraattin/CVE-2026-39987
GitHub: keraattin/CVE-2026-39987
该项目提供针对 Marimo 预认证 RCE 漏洞的检测与缓解指导,帮助识别和修复关键身份验证绕过问题。
Stars: 0 | Forks: 0
# CVE-2026-39987 — Marimo Python Notebook 预认证远程代码执行
# 扫描 Marimo 可能运行的常用端口
nmap -p 2718,8080,8443,443 --script CVE-2026-39987_Marimo_RCE
# 子网扫描
nmap -p 2718 --script CVE-2026-39987_Marimo_RCE 10.0.0.0/24
# 从文件扫描目标
nmap -p 2718 --script CVE-2026-39987_Marimo_RCE -iL targets.txt
# 启用服务版本检测
nmap -sV -p 2718 --script CVE-2026-39987_Marimo_RCE
```
**示例 Nmap 输出:**
```
PORT STATE SERVICE
2718/tcp open http
| CVE-2026-39987_Marimo_RCE:
| VULNERABLE:
| Marimo Pre-Auth RCE (CVE-2026-39987)
| State: VULNERABLE
| Risk level: CRITICAL
| Marimo Version: 0.19.2
| /terminal/ws: accessible without authentication
| Description:
| The Marimo /terminal/ws WebSocket endpoint accepts connections
| without authentication, enabling pre-authenticated RCE.
| An attacker can obtain a full PTY shell without any credentials.
| References:
|_ https://nvd.nist.gov/vuln/detail/CVE-2026-39987
```
### 手动验证
如果可以访问 Marimo 实例:
```
# 通过 API 检查 Marimo 版本
curl -s http://:2718/api/status | python3 -m json.tool
# 测试 /terminal/ws 的 WebSocket 升级(应在无认证时**不成功**)
curl -s -o /dev/null -w "%{http_code}" \
-H "Upgrade: websocket" \
-H "Connection: Upgrade" \
-H "Sec-WebSocket-Key: dGVzdC1rZXktMTIzNDU2Nzg=" \
-H "Sec-WebSocket-Version: 13" \
http://:2718/terminal/ws
# 如果返回 101(Switching Protocols),则端点在无认证下开放
# 如果返回 401/403,则已强制执行认证(已修复或加固)
# 作为对比,测试 /ws(应始终要求认证)
curl -s -o /dev/null -w "%{http_code}" \
-H "Upgrade: websocket" \
-H "Connection: Upgrade" \
-H "Sec-WebSocket-Key: dGVzdC1rZXktMTIzNDU2Nzg=" \
-H "Sec-WebSocket-Version: 13" \
http://:2718/ws
```
如果 `/terminal/ws` 返回 101 而 `/ws` 返回 401/403,则这是经典的 CVE-2026-39987 特征签名。
## 妥协指标
在环境中留意以下迹象:
| Indicator | Where to Check | What to Look For |
|:---|:---|:---|
| Unauthorized WebSocket connections | Server/proxy logs | 来自意外 IP 的 `/terminal/ws` 连接 |
| PTY session creation | Process monitoring | 由 Marimo 服务器生成的意外 Shell 进程 |
| File access | File audit logs | 对 `.env`、凭据文件或 SSH 密钥的读取 |
| Credential usage | Cloud provider audit logs | 使用存储在 Marimo 环境中的密钥进行的 API 调用 |
| Outbound data transfer | Network monitoring | 来自 Marimo 主机的异常外发流量 |
**调查命令:**
```
# 检查活动的 WebSocket 连接
ss -tnp | grep
# 审查进程树是否存在异常 Shell
ps aux --forest | grep -A5 marimo
# 检查 .env 或凭证文件是否被近期访问
stat .env
stat ~/.aws/credentials
# 审查云提供商活动日志是否存在未授权访问
aws cloudtrail lookup-events --lookup-attributes AttributeKey=AccessKeyId,AttributeValue=
# 检查是否存在未授权的出站连接
netstat -tnp | grep ESTABLISHED | grep -v 127.0.0.1
```
## 修复
**立即操作(现在就做):**
1. **升级到 Marimo 0.23.0 或更高版本**(`pip install --upgrade marimo`)
2. **限制 Marimo 实例的网络访问**(通过防火墙规则仅绑定到 localhost 或受信任 IP)
3. **检查未授权的连接** 在服务器日志中
**短期(本周内):**
4. **轮换所有凭据**(AWS 密钥、API 令牌、数据库密码、云服务账户),这些凭据可能被 Marimo 环境访问
5. **审计云提供商活动日志**,查找使用可能已泄露凭据进行的未授权 API 调用
6. **检查 `.env` 文件和环境变量**,查找可能已暴露的敏感数据
7. **检查持久化机制**(未授权的 SSH 密钥、cron 作业、修改的启动脚本)
**长期:**
8. **不要直接将笔记本环境暴露到互联网**(使用 VPN 或 SSH 隧道)
9. **将 AI/ML 开发环境视为高安全资产**(它们包含云凭据并具备代码执行能力)
10. **将笔记本服务器纳入定期漏洞扫描计划**
11. **实施网络监控**,对笔记本服务器实例设置异常连接告警
## 参考
- [The Hacker News — Marimo RCE Flaw CVE-2026-39987 Exploited Within 10 Hours](https://thehackernews.com/2026/04/marimo-rce-flaw-cve-2026-39987.html)
- [SecurityWeek — Critical Marimo Flaw Exploited Hours After Public Disclosure](https://www.securityweek.com/critical-marimo-flaw-exploited-hours-after-public-disclosure/)
- [BleepingComputer — Critical Marimo Pre-Auth RCE Flaw Now Under Active Exploitation](https://www.bleepingcomputer.com/news/security/critical-marimo-pre-auth-rce-flaw-now-under-active-exploitation/)
- [Security Affairs — CVE-2026-39987: Marimo RCE Exploited in Hours After Disclosure](https://securityaffairs.com/190623/hacking/cve-2026-39987-marimo-rce-exploited-in-hours-after-disclosure.html)
- [CSA Labs — Marimo Pre-Auth RCE: AI Development Toolchain Under Attack](https://labs.cloudsecurityalliance.org/research/csa-research-note-marimo-rce-cve-2026-39987-ai-toolchain-202/)
- [GBHackers — Marimo RCE Vulnerability Exploited Within 10 Hours](https://gbhackers.com/marimo-rce-vulnerability-exploited/)
- [InfoWorld — Critical Flaw in Marimo Python Notebook Exploited Within 10 Hours](https://www.infoworld.com/article/4157823/critical-flaw-in-marimo-python-notebook-exploited-within-10-hours-of-disclosure-2.html)
## 作者
**Kerem Oruç** — Cybersecurity Engineer
- GitHub: [@keraattin](https://github.com/keraattin)
- Twitter: [@keraattin](https://twitter.com/keraattin)
标签:0day, AI/ML, AI工具链攻击, AWS凭证窃取, CVE, CVSS 9.3, CWE-306, Marimo, Nmap, NSE, PTY Shell, Python Notebook, Python扫描器, RCE, /terminal/ws, Websocket, 修复版本0.23.0, 在野利用, 安全, 快速披露, 数字签名, 数据科学, 未授权访问, 检测脚本, 漏洞, 编程工具, 网络安全, 虚拟驱动器, 资源验证, 超时处理, 远程代码执行, 逆向工具, 隐私保护, 预认证