{
  "affected": [
    {
      "ranges": [
        {
          "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"
          },
          "events": [
            {
              "introduced": "a8e70cbaa54234d466afdbf6d15d7af1751ce3eb"
            },
            {
              "fixed": "8e2adfd761c11421ff4f4b694b4d0db78f3b4355"
            },
            {
              "introduced": "a74aa9efbe61430fcb60157c8e025a48ec8ff604"
            },
            {
              "fixed": "2d1a664b940b9b8f367185307dc010d11a2790f3"
            },
            {
              "introduced": "fe62c85e0203503231d489af95d0ac053b7d3575"
            },
            {
              "fixed": "d59c94077f9c9915abb51ddb52ce85188ece1748"
            }
          ],
          "repo": "https://github.com/phpseclib/phpseclib",
          "type": "GIT"
        }
      ]
    }
  ],
  "aliases": [
    "GHSA-r854-jrxh-36qx"
  ],
  "database_specific": {
    "cna_assigner": "GitHub_M",
    "cwe_ids": [
      "CWE-208"
    ],
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/40xxx/CVE-2026-40194.json"
  },
  "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.",
  "id": "CVE-2026-40194",
  "modified": "2026-08-12T03:51:29.639018776Z",
  "published": "2026-04-10T20:24:06.696Z",
  "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"
    }
  ],
  "schema_version": "1.9.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N",
      "type": "CVSS_V3"
    }
  ],
  "summary": "phpseclib has a variable-time HMAC comparison in SSH2::get_binary_packet() using != instead of hash_equals()"
}