CVE-2026-54736: Phalcon: Non-constant-time HMAC verification in `Encryption\Crypt::decrypt` (timing side-channel)
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 !ZEPHIR_IS_IDENTICAL(...) — 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 hash_equals() (zephir_hash_equals) — the CSRF token check (Security::checkToken) and the JWT signature check (Signer\Hmac::verify); Crypt::decrypt is the lone deviation.
References
- github.com/advisories/GHSA-8jqh-95g6-7jpj
- github.com/phalcon/cphalcon/commit/ad53ab1b2e7ec59b3af92b0b37b8aaa099011137
- github.com/phalcon/cphalcon/issues/17090
- github.com/phalcon/cphalcon/pull/17091
- github.com/phalcon/cphalcon/releases/tag/v5.14.1
- github.com/phalcon/cphalcon/security/advisories/GHSA-8jqh-95g6-7jpj
- nvd.nist.gov/vuln/detail/CVE-2026-54736
Code Behaviors & Features
Detect and mitigate CVE-2026-54736 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 →