criticalVulnerability

GHSA-vj3m-2g9h-vm4p

Multiple RCE vectors were found in Grav CMS. Three are critical, two are high. **1. Unsafe unserialize() in JobQueue — direct RCE gadget (Critical)** `system/src/Grav/Common/Scheduler/JobQueue.php:465` calls `unserialize(base64_decode(...))` without restricting `allowed_classes`. The `Job` class has `call_user_func_array($this->command, $this->args)` in its execution path, which is a direct gadget chain — inject a serialized `Job` with `command = 'system'` and `args = ['whoami']`. The same codebase actually has a `Serializable` trait that correctly restricts classes, so this inconsistency stands out. **2. Unsafe unserialize() in FileCache — arbitrary class instantiation (Critical)** `system/src/Grav/Framework/Cache/Adapter/FileCache.php:75` does `unserialize($value, ['allowed_classes' => true])`. That `true` allows instantiation of any class. If an attacker can write to the cache directory (via any file write primitive), they get object injection → RCE. **3. Unsafe unserialize() in Session (High)** `system/src/Grav/Common/Session.php:116` — same `allowed_classes => true` pattern on session data. Lower severity since session storage is typically more restricted. **4. Command injection in git clone (Critical)** `system/src/Grav/Console/Cli/InstallCommand.php:150` — only `$this->destination` uses `escapeshellarg()`. The `$data['branch']`, `$data['url']`, and `$data['path']` variables go directly into the shell command without escaping. Admin-accessible via plugin/theme installation. **5. SSTI blocklist bypass (High)** `system/src/Grav/Common/Security.php:267-286` — `cleanDangerousTwig()` blocks `twig_array_map` and `twig_array_filter` but not `twig_array_reduce`. Also missing `file_get_contents` and `fwrite` from the dangerous function blocklist. An attacker who can inject Twig templates can bypass the security filter. All five are independently exploitable. The unserialize issues are the most concerning since they don't require admin access if there's any

Properties

ghsa_id
GHSA-vj3m-2g9h-vm4p
severity
critical
summary
Grav has multiple RCE vectors: unsafe unserialize (x3), command injection in git clone, SSTI blocklist bypass
cve_id
GHSA-vj3m-2g9h-vm4p
is_ghsa_only
true
ghsa_published
2026-05-05T21:29:02Z
source_url
https://github.com/advisories/GHSA-vj3m-2g9h-vm4p
ghsa_updated
2026-05-05T21:29:03Z

Related Entities (5)

HAS_WEAKNESS (2)

[Weakness]Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')
[Weakness]Deserialization of Untrusted Data

REPORTED_BY (1)

[Source]GitHub Advisory Database

VULNERABLE_TO (1)

[Software]composer/getgrav/grav

AFFECTS (1)

[Software]composer/getgrav/grav

Explore deeper with Ninja Signal's threat intelligence graph

GHSA-vj3m-2g9h-vm4p — Ninja Signal Threat Intelligence | Ninja Signal