{"id":"CVE-2026-40194","summary":"phpseclib has a variable-time HMAC comparison in SSH2::get_binary_packet() using != instead of hash_equals()","details":"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.","aliases":["GHSA-r854-jrxh-36qx"],"modified":"2026-08-12T03:51:29.639018776Z","published":"2026-04-10T20:24:06.696Z","related":["CGA-wfcr-9xqv-qr38"],"database_specific":{"cwe_ids":["CWE-208"],"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/40xxx/CVE-2026-40194.json","cna_assigner":"GitHub_M"},"references":[{"type":"WEB","url":"https://github.com/phpseclib/phpseclib/releases/tag/1.0.28"},{"type":"WEB","url":"https://github.com/phpseclib/phpseclib/releases/tag/2.0.53"},{"type":"WEB","url":"https://github.com/phpseclib/phpseclib/releases/tag/3.0.51"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/40xxx/CVE-2026-40194.json"},{"type":"ADVISORY","url":"https://github.com/phpseclib/phpseclib/security/advisories/GHSA-r854-jrxh-36qx"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-40194"},{"type":"FIX","url":"https://github.com/phpseclib/phpseclib/commit/ffe48b6b1b1af6963327f0a5330e3aa004a194ac"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/phpseclib/phpseclib","events":[{"introduced":"a8e70cbaa54234d466afdbf6d15d7af1751ce3eb"},{"fixed":"8e2adfd761c11421ff4f4b694b4d0db78f3b4355"},{"introduced":"a74aa9efbe61430fcb60157c8e025a48ec8ff604"},{"fixed":"2d1a664b940b9b8f367185307dc010d11a2790f3"},{"introduced":"fe62c85e0203503231d489af95d0ac053b7d3575"},{"fixed":"d59c94077f9c9915abb51ddb52ce85188ece1748"}],"database_specific":{"extracted_events":[{"introduced":"0.1.1"},{"fixed":"1.0.28"},{"introduced":"2.0.0"},{"fixed":"2.0.53"},{"introduced":"3.0.0"},{"fixed":"3.0.51"}],"source":"AFFECTED_FIELD"}}],"versions":["2.0.52","1.0.27","3.0.50","3.0.49","2.0.51","1.0.26","2.0.50","1.0.25","3.0.48","2.0.49","1.0.24","3.0.47","3.0.46","3.0.45","3.0.44","3.0.43","2.0.48","3.0.42","3.0.41","3.0.40","3.0.39","3.0.38","2.0.47","1.0.23","3.0.37","3.0.36","1.0.22","2.0.46","3.0.35","3.0.34","3.0.33","3.0.23","2.0.45","3.0.22","3.0.21","1.0.21","2.0.44","3.0.20","2.0.43","2.0.42","3.0.19","2.0.41","3.0.18","2.0.40","3.0.17","2.0.39","3.0.16","2.0.38","3.0.15","3.0.14","2.0.37","3.0.13","2.0.36","1.0.20","2.0.35","3.0.12","3.0.11","2.0.34","3.0.10","2.0.33","3.0.9","2.0.32","3.0.8","2.0.31","3.0.7","3.0.6","3.0.5","3.0.4","3.0.3","3.0.2","3.0.1","2.0.30","3.0.0","2.0.29","2.0.28","1.0.19","2.0.27","2.0.26","2.0.25","2.0.24","1.0.18","2.0.23","1.0.17","2.0.22","2.0.21","2.0.20","2.0.19","2.0.18","1.0.16","2.0.17","2.0.16","2.0.15","1.0.15","2.0.14","1.0.14","2.0.13","1.0.13","2.0.12","1.0.12","1.0.11","2.0.11","2.0.10","1.0.10","1.0.9","2.0.9","2.0.7","1.0.8","2.0.6","1.0.7","2.0.5","1.0.6","2.0.4","1.0.5","1.0.4","2.0.3","1.0.1","2.0.0","0.3.8","0.3.7","0.3.6","0.3.0","0.2.2","0.2.1","0.2.0","0.1.5","0.1.2","0.1.1"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-40194.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N"}]}