Skip to content

← Public intelligence

Packagist package

phalcon/cphalcon

Open actionable advisories and recorded vendor fixes. This public package view has no inventory attached and cannot establish whether your deployment is affected. A vendor fix never resolves your finding; verify your installed version and the source guidance.

Open advisories

3 actionable advisories, newest first. Withdrawn advisories and news are excluded. Coverage is partial.

  1. High, CVSS 8.7PackagistAmendedPublished

    Phalcon: Catastrophic backtracking (ReDoS) in the default Phalcon Router route lead to remote unauthenticated DoS

    CVE-2026-57584 · GHSA-x7rj-f32v-7jjg

    Affected
    • Packagist phalcon/cphalcon <= 5.14.2
    Fixed in
    5.15.0· Vendor fix available
    Issue
    Every Phalcon MVC application built with a default router (new Phalcon\Mvc\Router() or new Phalcon\Mvc\Router(true), which is the normal case) registers a built-in route whose compiled PCRE pattern is #^/([\w0-9\\-]+)/([\w0-9\.\]+)(/.)$#u. The trailing (/.) is a nested quantifier whose group body (/.) overlaps itself (. matches /, and there is no s/DOTALL flag), so when the final $ is forced to fail the engine explores roughly 2^(N/2) ways to split a run of N slashes, causing classic catastrophic backtracking. Phalcon\Mvc\Router::handle() runs on every request and matches this pattern against the attacker-controlled request URI, so a single short request can burn seconds-to-minutes of CPU per request. The same (/.) construct is also produced by the /:params placeholder (Phalcon\Mvc\Router\Route::compilePattern()) and by the CLI router (Phalcon\Cli\Router / Phalcon\Cli\Router\Route). Details The vulnerable pattern is emitted in four places, all carrying the same nested…

    Recommended action: Upgrade to 5.15.0 or later, then redeploy and verify.A vendor fix does not resolve your finding until you verify it in your own systems.

    Sources:osv.dev (1)github.com (2)Source checked Evidence →
  2. High, CVSS 8.2PackagistAmendedPublished

    Phalcon: Non-constant-time HMAC verification in Encryption\Crypt::decrypt (timing side-channel)

    CVE-2026-54736 · GHSA-8jqh-95g6-7jpj

    Affected
    • Packagist phalcon/cphalcon <= 5.14.0
    Fixed in
    5.14.1· Vendor fix available
    Issue
    Phalcon\Encryption\Crypt provides authenticated encryption: when useSigning is enabled (the default), encrypt() appends an HMAC tag and decrypt() verifies it before returning the plaintext. The verification compares the attacker-supplied tag against the freshly computed HMAC using PHP/Zephir identity comparison (!==), which the Zephir compiler lowers to !ZEPHIRISIDENTICAL(...) — a byte-wise memcmp that returns early on the first differing byte. The comparison time therefore depends on how many leading bytes of the supplied tag are correct, a classic MAC-verification timing side-channel. Every other secret/MAC comparison in the framework uses the constant-time hashequals() (zephirhashequals) — the CSRF token check (Security::checkToken) and the JWT signature check (Signer\Hmac::verify); Crypt::decrypt is the lone deviation. Details Vulnerable code phalcon/Encryption/Crypt.zep:246 (Zephir source): Generated C -- ext/phalcon/encryption/crypt.zep.c:364-367: ZEPHIRISIDENTICAL --…

    Recommended action: Upgrade to 5.14.1 or later, then redeploy and verify.A vendor fix does not resolve your finding until you verify it in your own systems.

    Sources:osv.dev (1)github.com (2)Source checked Evidence →
  3. Critical, CVSS 9.2PackagistAmendedPublished

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

    CVE-2026-59989 · GHSA-hrwp-4hh9-c8r8

    Affected
    • Packagist phalcon/cphalcon <= 5.15.0
    Fixed in
    5.16.0· Vendor fix available
    Issue
    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: funcArguments[1]["expr"]["value"] (the separator) and funcArguments[0]["expr"]["value"] (the piped array) are the raw values of the parsed template tokens.…

    Recommended action: Upgrade to 5.16.0 or later, then redeploy and verify.A vendor fix does not resolve your finding until you verify it in your own systems.

    Sources:osv.dev (1)github.com (2)Source checked Evidence →