CVE-2026-59989: Phalcon Volt compiler `join` filter compile-time PHP code injection (SSTI leads to RCE)
(updated )
The Volt template compiler in Phalcon generates the PHP for the join filter by string-concatenating the filter’s raw template-literal argument bytes with no escaping. The separator literal is dropped verbatim between two single quotes the compiler emits, and the piped array argument is emitted completely bare. A Volt template whose join arguments are attacker-influenced can therefore break out of the generated join('…') call and inject arbitrary PHP into the compiled template. Volt writes that compiled template to a cache file and require()s it at render time, so the injected PHP executes i.e. compile-time PHP code injection (server-side template injection -> remote code execution) for any application that compiles attacker-controlled Volt source.
References
- github.com/advisories/GHSA-hrwp-4hh9-c8r8
- github.com/phalcon/cphalcon/commit/e434061be3b7161930476c1368c868badc71e1bd
- github.com/phalcon/cphalcon/pull/17217
- github.com/phalcon/cphalcon/releases/tag/v5.16.0
- github.com/phalcon/cphalcon/security/advisories/GHSA-hrwp-4hh9-c8r8
- nvd.nist.gov/vuln/detail/CVE-2026-59989
Code Behaviors & Features
Detect and mitigate CVE-2026-59989 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Dependency Scanning using SBOM also detects vulnerabilities from proprietary advisories that this site does not include. Learn more about Dependency Scanning using SBOM →