Phalcon disclosed and fixed a high-severity vulnerability in the Volt template compiler that allowed compile-time PHP code injection through the join filter, later tracked as CVE-2026-59989. In affected cphalcon versions earlier than 5.16.0, Phalcon\Mvc\View\Engine\Volt\Compiler::resolveFilter() inserted raw separator and array token values directly into generated PHP instead of safely compiling them with expression(). A crafted separator containing a quote could break out of the generated join() call, inject arbitrary PHP into the compiled template cache, and execute when Phalcon\Mvc\View\Engine\Volt::render() loaded the view, creating an SSTI-to-RCE path in environments where attackers can influence Volt template source.
The fix shipped in Phalcon Framework v5.16.0 and updates the compiler to emit both join arguments through expression(), with accompanying tests and changelog entries in the related pull request and commit history. The same release also included other security-relevant hardening, including fixes for catastrophic backtracking in router pattern compilation, infinite recursion during ORM hydration via model setters, improper $_REQUEST blacklist handling in Phalcon\Support\Debug, and stricter callback handling in Phalcon\Tag\Select::selectField(). The Volt issue is particularly significant for multi-tenant CMS, dashboard, and templating scenarios because successful exploitation could lead to arbitrary code execution in the web server process.

See affected versions and whether adversaries are exploiting it.
7 events from the most recent confirmed update back to the earliest known activity.
The CVE record for the Phalcon Volt join filter vulnerability was newly received by GitHub Security Advisories as CVE-2026-59989. The advisory identifies the issue as affecting cphalcon versions earlier than 5.16.0 and references the fixing commit, pull request, and release.
The fix work associated with the Volt join filter issue was merged into master, with commit b9e8cc9 merged after review and passing checks. The pull request history shows the change was developed, reviewed, and tracked as part of the Phalcon v5 release workflow.
Phalcon 5.16.0 fixed cloneResultMap() so model setters are no longer called unconditionally during ORM hydration, preventing cases where setters that perform ORM queries could recurse infinitely. The release also added the orm.call_setters_on_hydration setting, defaulting to false, to make hydration-time setter execution opt-in.
The 5.16.0 release fixed Phalcon\Mvc\Router\Route::compilePattern() and Phalcon\Cli\Router\Route::compilePattern() so :params no longer expands to the nested quantifier (/.*)*, which could cause exponential-time processing on crafted URIs. Phalcon changed the trailing group compilation to (/.*)? to preserve parameter capture while restoring linear-time matching.
Phalcon released version 5.16.0 with a fix for a Volt compiler vulnerability in resolveFilter() where the join filter spliced raw arguments into generated PHP, enabling compile-time PHP code injection when rendered. The fix changed both join arguments to be emitted through expression() instead of concatenating raw token values.
A later mention on the pull request linked the Phalcon fix to an Argus threat intelligence entry for CVE-2026-59989. The mention described the issue as compile-time PHP code injection in the Volt compiler with possible SSTI-to-RCE impact.
The repository project workflow moved the tracked fix work from Implemented to Released in the Phalcon v5 project. This marked the change as released in project tracking after its June merge.
Vulnerabilities, threat actors, malware, products, organizations, and breaches Mallory has linked to this story.
See whether adversaries are exploiting this yet, and where the affected versions run in your environment.
5 references tracked. Mallory keeps watching after this page renders.
cvefeed.io
Open sourcecvereports.com
Open sourcegithub.com
Open sourcegithub.com
Open sourcegithub.com
Open sourceMap indicators from this story to your assets and identify affected systems in minutes.
Every observed campaign, victim, and pivot linked to actors named in this story.
Malware, exploits, and IOCs connected to the activity described here.
YARA, Sigma, and Snort rules deployed to your SIEM as soon as they’re published.
Get matching new stories delivered to your team as they break — not the next morning.
Ask questions about this story and take action on the answers.