CVE-2026-40194 PUBLISHED

phpseclib has a variable-time HMAC comparison in SSH2::get_binary_packet() using != instead of hash_equals()

Assigner: GitHub_M
Reserved: 09.04.2026 Published: 10.04.2026 Updated: 10.04.2026

phpseclib is a PHP secure communications library. 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.

Metrics

CVSS Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
CVSS Score: 3.7

Product Status

Vendor phpseclib
Product phpseclib
Versions
  • Version < 1.0.28 is affected
  • Version >= 2.0.0, < 2.0.53 is affected
  • Version >= 3.0.0, < 3.0.51 is affected

References

Problem Types

  • CWE-208: Observable Timing Discrepancy CWE