CVE-2026-59989: Phalcon Volt compiler `join` filter compile-time PHP code injection (SSTI leads to RCE)
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. Learn more about Dependency Scanning →