phpseclib/phpseclib security advisory
CVE-2026-40194: Phpseclib has a variable-time HMAC comparison in SSH2::get_binary_packet() using != instead of hash_equals()
CVE-2026-40194 is a low-severity user enumeration vulnerability in the PHP package phpseclib/phpseclib (CVSS 3.7), published 10 April 2026. It is fixed in 1.0.28, 2.0.53 and 3.0.51, one per release line; earlier versions on each line are affected. It can be exploited without an account.
low 3.7 published 2026-04-10 · updated 2026-06-17
- Affected versions
- >= 0.1.1, < 1.0.28
>= 2.0.0, < 2.0.53
>= 3.0.0, < 3.0.51 - Fixed in
- 1.0.28, 2.0.53, 3.0.51
- Newest release
- 4.0.3
- Severity
- Low · CVSS 3.7
- Type
- User enumeration
CWE-208 - Exploited in the wild
- Not on the CISA KEV list
checked 2026-11-04
Is your phpseclib/phpseclib version affected?
Who can exploit CVE-2026-40194
- Access: No account. Anyone who can send a request to an app that uses the affected code.
- Conditions: It only works under specific conditions the attacker does not fully control (CVSS rates the attack as high complexity).
CVSS vector (scored by GitHub): CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
How to fix CVE-2026-40194 in phpseclib/phpseclib
- Find the installed version:
composer show phpseclib/phpseclib. If you never required it yourself,composer why phpseclib/phpseclibshows which package pulls it in. - Update it:
composer update phpseclib/phpseclib --with-all-dependencies. You need the fixed version for your release line (1.0.28, 2.0.53 and 3.0.51). - If Composer will not go that high, your composer.json constraint is holding it back. Widen it (for example
"phpseclib/phpseclib": "^3.0.51"if you can take that version), or upgrade the package that requires it. - Run
composer audit. It reads the same advisory data and should no longer list CVE-2026-40194. - Commit composer.lock and deploy it. On the server, run
composer install --no-devfrom the lock file, notcomposer update.
If you cannot upgrade yet
- Rate-limit login and password-reset endpoints and return the same response for unknown and known users.
- If your app does not use the affected feature, note that in your audit, but still plan the upgrade.
The CVE-2026-40194 advisory
phpseclib is a PHP secure communications library. Starting in 0.1.1 and prior to 3.0.51, 2.0.53, and 1.0.28, phpseclib\Net\SSH2::get_binary_packet() uses PHP's != operator to compare a received SSH packet HMAC against the locally computed HMAC. != on equal-length binary strings in PHP uses memcmp(), which short-circuits on the first differing byte. This is a real variable-time comparison (CWE-208), proven by scaling benchmarks. This vulnerability is fixed in 3.0.51, 2.0.53, and 1.0.28.
References
- GitHub advisory GHSA-r854-jrxh-36qx github.com
- Fix commit ffe48b6 github.com
- Release 1.0.28 github.com
- Release 2.0.53 github.com
- Release 3.0.51 github.com
Other phpseclib/phpseclib advisories
- medium CVE-2026-84308: Phpseclib — non-constant-time X25519 scalar multiplication permits full private-key recovery 2026-09-08
- medium CVE-2026-55599: Phpseclib: X.509 certificate validation sends attacker-controlled outbound requests (server-side request forgery) via Authority… 2026-06-16
- high CVE-2026-44167: Phpseclib has a CVE-2024-27355 mitigation bypass — OID amplification DoS in ASN1::decodeOID() 2026-05-05
- high CVE-2026-32935: Phpseclib's AES-CBC unpadding susceptible to padding oracle timing attack 2026-03-19
- high CVE-2023-52892: Name confusion in x509 Subject Alternative Name fields 2024-06-28
- high CVE-2024-27354: Phpseclib a large prime can cause a denial of service 2024-03-02
Related
Need help patching or upgrading? Laskyr does PHP and Laravel security fixes and upgrades. Tell us what you run and we reply with a plan and a price.
Ask about a fixWhere this data comes from
- Affected and fixed versions: the Packagist security advisories API (GitHub Advisory Database and FriendsOfPHP), the same data
composer audituses. Synced 2026-11-03. - Description, score, weakness and references: NIST National Vulnerability Database (NVD), checked 2026-11-04. This product uses data from the NVD API but is not endorsed or certified by the NVD.
- Exploited-in-the-wild status: the CISA Known Exploited Vulnerabilities catalog, checked 2026-11-04.
- Compiled by Daniel Lasek at Laskyr from the sources above. The summary, “who can exploit it”, “how to fix it” and hardening sections are our plain-English reading of the record and are generated from it. The quoted description is the record's own text. Spot an error? Tell us.