phpseclib has a variable-time HMAC comparison in SSH2::get_binary_packet() using != instead of hash_equals()
Key facts
- Attack vector
- Network
- Privileges required
- None
- User interaction
- None
- Attack complexity
- High
- Impact type
- Information disclosure
- Confidentiality · integrity · availability
- Low · None · None
- Fix status
- Fixed
Attack profile from CVSS 3.1 · CNA. Fix status from CNA and GitHub. Impact type from CWE-208.
Summary
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.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- Poc
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| phpseclib | phpseclib | 0.1.1 to before 1.0.28; 2.0.0 to before 2.0.53; 3.0.0 to before 3.0.51 | 1.0.28, 2.0.53, 3.0.51 | Patch available | CNA |
| — | phpseclib/phpseclib (Packagist) | 0.1.1 to before 1.0.28 | 1.0.28 | Patch available | GHSA-r854-jrxh-36qx |
| — | phpseclib/phpseclib (Packagist) | 2.0.0 to before 2.0.53 | 2.0.53 | Patch available | GHSA-r854-jrxh-36qx |
| — | phpseclib/phpseclib (Packagist) | 3.0.0 to before 3.0.51 | 3.0.51 | Patch available | GHSA-r854-jrxh-36qx |
- phpseclib Vendorphpseclib Affected 0.1.1 to before 1.0.28; 2.0.0 to before 2.0.53; 3.0.0 to before 3.0.51 Fixed in 1.0.28, 2.0.53, 3.0.51 Patch available CNA
- phpseclib/phpseclib (Packagist) Vendor— Affected 0.1.1 to before 1.0.28 Fixed in 1.0.28 Patch available GHSA-r854-jrxh-36qx
- phpseclib/phpseclib (Packagist) Vendor— Affected 2.0.0 to before 2.0.53 Fixed in 2.0.53 Patch available GHSA-r854-jrxh-36qx
- phpseclib/phpseclib (Packagist) Vendor— Affected 3.0.0 to before 3.0.51 Fixed in 3.0.51 Patch available GHSA-r854-jrxh-36qx
CPE configurations NVD · 1
| CPE | Versions | Role | Vendor |
|---|---|---|---|
| cpe:2.3:a:phpseclib:phpseclib:*:*:*:*:*:*:*:* | up to 1.0.27; 2.0.0 to before 2.0.53; 3.0.0 to before 3.0.51 | Vulnerable | phpseclib |
- cpe:2.3:a:phpseclib:phpseclib:*:*:*:*:*:*:*:* Versions up to 1.0.27; 2.0.0 to before 2.0.53; 3.0.0 to before 3.0.51 Vulnerable ·phpseclib
Remediation
- Fix · CNA phpseclib (phpseclib) Fixed in 1.0.28, 2.0.53, 3.0.51
- Fix · GHSA-r854-jrxh-36qx phpseclib/phpseclib (Packagist) Fixed in 1.0.28 Advisory →
- Fix · GHSA-r854-jrxh-36qx phpseclib/phpseclib (Packagist) Fixed in 2.0.53 Advisory →
- Fix · GHSA-r854-jrxh-36qx phpseclib/phpseclib (Packagist) Fixed in 3.0.51 Advisory →
Vendor assessments
Timeline
- 2026-10-02 Threatist record created from CVE-2026-40194
- 2026-10-03 Alias added: GHSA-r854-jrxh-36qx
References
Advisory 2
More Phpseclib vulnerabilities
- TI-2026-40135 Server-side request forgery in phpseclib CVSS 3.1MEDIUM 5.8
- TI-2023-29213 In phpseclib before 1.0.22, 2.x before 2.0.46, and 3.x before 3.0.33, some characters in… CVSS 3.1HIGH 7.5
- TI-2024-18192 An issue was discovered in phpseclib 1.x before 1.0.23, 2.x before 2.0.47, and 3.x before… CVSS 3.1HIGH 7.5
- TI-2024-18191 An issue was discovered in phpseclib 1.x before 1.0.23, 2.x before 2.0.47, and 3.x before… CVSS 3.1HIGH 7.5
- TI-2023-12272 Math/PrimeField.php in phpseclib 3.x before 3.0.19 has an infinite loop with composite primefields. CVSS 3.1HIGH 7.5
- TI-2026-25383 phpseclib's AES-CBC unpadding susceptible to padding oracle timing attack CVSS 4.0HIGH 8.2
Sources
- CVE-2026-40194 · CVE Program
- CVE-2026-40194 · NVD
- FIRST EPSS
- GHSA-r854-jrxh-36qx · GitHub Advisory Database · CC BY 4.0
- CVE-2026-40194 · Red Hat security data · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences