Every CVE Search/ Get API key

CVE-2026-40194

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

3.7 LowFix available

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.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
High
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
Low
Integrity
None
Availability
None

Exploit likelihood

0.37%Up 0.4 points since Apr 11, 2026
90%50%10%1%

What each source reports

CVE List Score used 3.7

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

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.

Record
CVE-2026-40194
CVSS 3.1
3.7 LowCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-208
Updated
2026-11-02
EUVDEUVD-2026-21597 3.7

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.

Record
EUVD-2026-21597
CVSS 3.1
3.7 LowCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-r854-jrxh-36qx 3.7

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

phpseclib SSH2: Variable-time comparison in HMAC verification

Summary

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.

The finding is Low severity (defense-in-depth), not Critical. Practical exploitation over the network is prevented by SSH's disconnect-on-MAC-failure behavior combined with per-connection session keys. The fix is a one-liner: replace != with hash_equals(), which the codebase already uses in 9 other places.

  • Target: phpseclib/phpseclib
  • File: phpseclib/Net/SSH2.php
  • Lines (master e819a163c): 3405 and 3410
  • CWE: CWE-208 (Observable Timing Discrepancy)
  • CVSS v3.1: 3.7 — CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
  • Severity: Low (cryptographic hygiene / defense-in-depth)
  • Affected branches: master, 3.0, 2.0, 1.0 (all supported versions)

Root cause

phpseclib/Net/SSH2.php lines 3399-3415 (master at e819a163c):

if ($this->hmac_check instanceof Hash) {
    $reconstructed = !$this->hmac_check_etm ?
        pack('Na*', $packet->packet_length, $packet->plain) :
        substr($packet->raw, 0, -$this->hmac_size);
    if (($this->hmac_check->getHash() & "\xFF\xFF\xFF\xFF") == 'umac') {
        $this->hmac_check->setNonce("\0\0\0\0" . pack('N', $this->get_seq_no));
        if ($hmac != $this->hmac_check->hash($reconstructed)) {                     // <-- line 3405
            $this->disconnect_helper(DisconnectReason::MAC_ERROR);
            throw new ConnectionClosedException('Invalid UMAC');
        }
    } else {
        if ($hmac != $this->hmac_check->hash(pack('Na*', $this->get_seq_no, $reconstructed))) {  // <-- line 3410
            $this->disconnect_helper(DisconnectReason::MAC_ERROR);
            throw new ConnectionClosedException('Invalid HMAC');
        }
    }
}

Both $hmac (read from the socket via Strings::pop($raw, $this->hmac_size) at line 3348) and the computed hash are equal-length binary strings. PHP's != operator on equal-length strings dispatches to zend_binary_strcmp() which internally calls memcmp(). Modern libc memcmp short-circuits on the first differing byte, producing a timing signal that scales linearly with the number of matching leading bytes.

The same bug exists on every supported branch

| Branch | File | Line(s) | Expression | |---|---|---|---| | master (@ e819a163c) | phpseclib/Net/SSH2.php | 3405, 3410 | $hmac != $this->hmac_check->hash(...) | | 3.0 | phpseclib/Net/SSH2.php | 3741, 3746 | $hmac != $this->hmac_check->hash(...) | | 2.0 | phpseclib/Net/SSH2.php | 3796 | $hmac != $this->hmac_check->hash(...) | | 1.0 | phpseclib/Net/SSH2.php | 3810 | $hmac != $this->hmac_check->hash(...) |

Verified with git show <branch>:phpseclib/Net/SSH2.php.

Reachability

The HMAC verification path at lines 3399-3415 is reached on every received SSH packet when the negotiated cipher is not AEAD — i.e., any of:

  • aes128-cbc, aes192-cbc, aes256-cbc
  • aes128-ctr, aes192-ctr, aes256-ctr
  • 3des-cbc, 3des-ctr
  • blowfish-cbc, blowfish-ctr
  • twofish-*-cbc, twofish-*-ctr
  • arcfour, arcfour128, arcfour256

combined with any non-AEAD MAC (hmac-sha2-256, hmac-sha2-512, hmac-sha1, hmac-sha1-96, hmac-md5, hmac-md5-96, umac-64, umac-128, and their -etm variants — full list at getSupportedMACAlgorithms() around line 4754).

AEAD ciphers ([email protected], [email protected], [email protected]) go through a different path (lines 3353-3381) and do not reach the != comparison — their authentication tag is checked inside the AEAD implementation.

$this->hmac_check is set during key exchange at SSH2.php:1812:

if…
Record
GHSA-r854-jrxh-36qx
CVSS 3.1
3.7 LowCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-208
Updated
2026-11-02
NVD 3.7

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.

Record
CVE-2026-40194
CVSS 3.1
3.7 LowCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-208
Updated
2026-11-02
OSV 3.7

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

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.

Record
CVE-2026-40194
CVSS 3.1
3.7 LowCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-208
Updated
2026-11-02
OSVDEBIAN-CVE-2026-40194 3.7

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.

Record
DEBIAN-CVE-2026-40194
CVSS 3.1
3.7 LowCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
Updated
2026-11-02
Show 4 moreShow less
OSVGHSA-r854-jrxh-36qx 3.7

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

phpseclib SSH2: Variable-time comparison in HMAC verification

Summary

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.

The finding is Low severity (defense-in-depth), not Critical. Practical exploitation over the network is prevented by SSH's disconnect-on-MAC-failure behavior combined with per-connection session keys. The fix is a one-liner: replace != with hash_equals(), which the codebase already uses in 9 other places.

  • Target: phpseclib/phpseclib
  • File: phpseclib/Net/SSH2.php
  • Lines (master e819a163c): 3405 and 3410
  • CWE: CWE-208 (Observable Timing Discrepancy)
  • CVSS v3.1: 3.7 — CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
  • Severity: Low (cryptographic hygiene / defense-in-depth)
  • Affected branches: master, 3.0, 2.0, 1.0 (all supported versions)

Root cause

phpseclib/Net/SSH2.php lines 3399-3415 (master at e819a163c):

if ($this->hmac_check instanceof Hash) {
    $reconstructed = !$this->hmac_check_etm ?
        pack('Na*', $packet->packet_length, $packet->plain) :
        substr($packet->raw, 0, -$this->hmac_size);
    if (($this->hmac_check->getHash() & "\xFF\xFF\xFF\xFF") == 'umac') {
        $this->hmac_check->setNonce("\0\0\0\0" . pack('N', $this->get_seq_no));
        if ($hmac != $this->hmac_check->hash($reconstructed)) {                     // <-- line 3405
            $this->disconnect_helper(DisconnectReason::MAC_ERROR);
            throw new ConnectionClosedException('Invalid UMAC');
        }
    } else {
        if ($hmac != $this->hmac_check->hash(pack('Na*', $this->get_seq_no, $reconstructed))) {  // <-- line 3410
            $this->disconnect_helper(DisconnectReason::MAC_ERROR);
            throw new ConnectionClosedException('Invalid HMAC');
        }
    }
}

Both $hmac (read from the socket via Strings::pop($raw, $this->hmac_size) at line 3348) and the computed hash are equal-length binary strings. PHP's != operator on equal-length strings dispatches to zend_binary_strcmp() which internally calls memcmp(). Modern libc memcmp short-circuits on the first differing byte, producing a timing signal that scales linearly with the number of matching leading bytes.

The same bug exists on every supported branch

| Branch | File | Line(s) | Expression | |---|---|---|---| | master (@ e819a163c) | phpseclib/Net/SSH2.php | 3405, 3410 | $hmac != $this->hmac_check->hash(...) | | 3.0 | phpseclib/Net/SSH2.php | 3741, 3746 | $hmac != $this->hmac_check->hash(...) | | 2.0 | phpseclib/Net/SSH2.php | 3796 | $hmac != $this->hmac_check->hash(...) | | 1.0 | phpseclib/Net/SSH2.php | 3810 | $hmac != $this->hmac_check->hash(...) |

Verified with git show <branch>:phpseclib/Net/SSH2.php.

Reachability

The HMAC verification path at lines 3399-3415 is reached on every received SSH packet when the negotiated cipher is not AEAD — i.e., any of:

  • aes128-cbc, aes192-cbc, aes256-cbc
  • aes128-ctr, aes192-ctr, aes256-ctr
  • 3des-cbc, 3des-ctr
  • blowfish-cbc, blowfish-ctr
  • twofish-*-cbc, twofish-*-ctr
  • arcfour, arcfour128, arcfour256

combined with any non-AEAD MAC (hmac-sha2-256, hmac-sha2-512, hmac-sha1, hmac-sha1-96, hmac-md5, hmac-md5-96, umac-64, umac-128, and their -etm variants — full list at getSupportedMACAlgorithms() around line 4754).

AEAD ciphers ([email protected], [email protected], [email protected]) go through a different path (lines 3353-3381) and do not reach the != comparison — their authentication tag is checked inside the AEAD implementation.

$this->hmac_check is set during key exchange at SSH2.php:1812:

if…
Record
GHSA-r854-jrxh-36qx
CVSS 3.1
3.7 LowCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-208
Updated
2026-11-02
OSVUBUNTU-CVE-2026-40194 3.7

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.

Record
UBUNTU-CVE-2026-40194
CVSS 3.1
3.7 LowCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
Updated
2026-11-02
OSVCLSA-2026-1779410885 No score

TuxCare security update for phpseclib/phpseclib (1 CVE)

TuxCare rebuilt phpseclib/phpseclib to address 1 CVE. Fixed in 0.3.10-p2+tuxcare.

Record
CLSA-2026-1779410885
Updated
2026-11-02
OSVUSN-8830-1 No score

php-phpseclib vulnerabilities

It was discovered that phpseclib did not perform constant-time padding validation when using AES in CBC mode. A remote attacker could possibly use this issue to obtain sensitive information. (CVE-2026-32935)

It was discovered that phpseclib did not use a constant-time comparison when validating SSH packet authentication codes. A remote attacker could possibly use this issue to obtain sensitive information. (CVE-2026-40194)

It was discovered that phpseclib did not properly limit object identifier lengths when parsing ASN.1 data. An attacker could possibly use this issue to cause phpseclib to use excessive resources, leading to a denial of service. (CVE-2026-44167)

Record
USN-8830-1
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
phpseclib/phpseclib
Packagist
2.0.0 up to 2.0.53
2.0.53
phpseclib/phpseclib
Packagist
3.0.0 up to 3.0.51
3.0.51
phpseclib/phpseclib
Packagist
0.1.1 up to 1.0.28
1.0.28
phpseclib/phpseclib
TuxCare:Packagist
0.3.10 up to 0.3.10-p2+tuxcare, plus listed versions
0.3.10-p1+tuxcare
0.3.10-p2+tuxcare
php-phpseclib
Debian:12
before 2.0.42-1+deb12u4, plus listed versions
2.0.42-12.0.42-1+deb12u12.0.42-1+deb12u22.0.42-1+deb12u3
2.0.42-1+deb12u4
php-phpseclib
Debian:13
before 2.0.48-3+deb13u2, plus listed versions
2.0.48-32.0.48-3+deb13u1
2.0.48-3+deb13u2
php-phpseclib
Debian:14
before 2.0.53-1, plus listed versions
2.0.48-32.0.49-12.0.50-12.0.51-12.0.52-1
2.0.53-1
php-phpseclib3
Debian:12
before 3.0.19-1+deb12u5, plus listed versions
3.0.19-13.0.19-1+deb12u13.0.19-1+deb12u23.0.19-1+deb12u33.0.19-1+deb12u4
3.0.19-1+deb12u5
php-phpseclib3
Debian:13
before 3.0.43-2+deb13u2, plus listed versions
3.0.43-23.0.43-2+deb13u1
3.0.43-2+deb13u2
php-phpseclib3
Debian:14
before 3.0.51-1, plus listed versions
3.0.43-23.0.44-13.0.44-23.0.45-13.0.46-1
Show 5 moreShow less
3.0.46-23.0.47-13.0.48-13.0.49-13.0.50-1
3.0.51-1
Show 31 moreShow less
Affected packages
PackageAffectedFixed
phpseclib
Debian:12
before 1.0.20-1+deb12u4, plus listed versions
1.0.20-11.0.20-1+deb12u11.0.20-1+deb12u21.0.20-1+deb12u3
1.0.20-1+deb12u4
phpseclib
Debian:13
before 1.0.23-6+deb13u2, plus listed versions
1.0.23-61.0.23-6+deb13u1
1.0.23-6+deb13u2
phpseclib/phpseclib
Packagist
0.1.1 up to 1.0.28, plus listed versions
0.3.00.3.10.3.100.3.50.3.6
Show 31 moreShow less
0.3.70.3.80.3.91.0.01.0.11.0.101.0.111.0.121.0.131.0.141.0.151.0.161.0.171.0.181.0.191.0.21.0.201.0.211.0.221.0.231.0.241.0.251.0.261.0.271.0.31.0.41.0.51.0.61.0.71.0.81.0.9
1.0.28
phpseclib/phpseclib
Packagist
2.0.0 up to 2.0.53, plus listed versions
2.0.12.0.102.0.112.0.122.0.13
Show 45 moreShow less
2.0.142.0.152.0.162.0.172.0.182.0.192.0.22.0.202.0.212.0.222.0.232.0.242.0.252.0.262.0.272.0.282.0.292.0.32.0.302.0.312.0.322.0.332.0.342.0.352.0.362.0.372.0.382.0.392.0.42.0.402.0.412.0.422.0.432.0.442.0.452.0.462.0.472.0.482.0.492.0.52.0.502.0.512.0.522.0.62.0.7
2.0.53
phpseclib/phpseclib
Packagist
3.0.0 up to 3.0.51, plus listed versions
3.0.13.0.103.0.113.0.123.0.13
Show 36 moreShow less
3.0.143.0.153.0.163.0.173.0.183.0.193.0.23.0.203.0.213.0.223.0.233.0.33.0.333.0.343.0.353.0.363.0.373.0.383.0.393.0.43.0.403.0.413.0.423.0.433.0.443.0.453.0.463.0.473.0.483.0.493.0.53.0.503.0.63.0.73.0.83.0.9
3.0.51
php-phpseclib
Ubuntu:Pro:16.04:LTS
before 2.0.1-1ubuntu0.1~esm1, plus listed versions
2.0.1-12.0.1-1build1
2.0.1-1ubuntu0.1~esm1
phpseclib
Ubuntu:Pro:16.04:LTS
All versions, plus listed versions
0.3.10-31.0.0-21.0.0-31.0.1-11.0.1-31.0.1-3ubuntu0.11.0.1-3ubuntu0.1+esm1
None known
php-phpseclib
Ubuntu:Pro:18.04:LTS
before 2.0.9-1ubuntu0.1~esm3, plus listed versions
2.0.6-12.0.7-12.0.9-12.0.9-1ubuntu0.1~esm2
2.0.9-1ubuntu0.1~esm3
phpseclib
Ubuntu:Pro:18.04:LTS
All versions, plus listed versions
1.0.7-11.0.8-11.0.9-11.0.9-1ubuntu0.1~esm11.0.9-1ubuntu0.1~esm2
None known
php-phpseclib
Ubuntu:Pro:20.04:LTS
before 2.0.23-2ubuntu0.1~esm3, plus listed versions
2.0.21-22.0.23-22.0.23-2ubuntu0.1~esm2
2.0.23-2ubuntu0.1~esm3
phpseclib
Ubuntu:Pro:20.04:LTS
All versions, plus listed versions
1.0.16-21.0.18-21.0.18-2ubuntu0.1~esm11.0.18-2ubuntu0.1~esm2
None known
php-phpseclib
Ubuntu:Pro:22.04:LTS
before 2.0.36-1ubuntu0.1~esm3, plus listed versions
2.0.30-2ubuntu12.0.34-12.0.35-12.0.36-12.0.36-1ubuntu0.1~esm2
2.0.36-1ubuntu0.1~esm3
php-phpseclib3
Ubuntu:Pro:22.04:LTS
All versions, plus listed versions
3.0.9-13.0.10-13.0.12-23.0.13-13.0.13-1ubuntu0.1~esm1
None known
phpseclib
Ubuntu:22.04:LTS
All versions, plus listed versions
1.0.19-3ubuntu21.0.19-3ubuntu31.0.20-11.0.20-1ubuntu0.1~esm11.0.20-1+deb12u3build0.22.04.1
None known
php-phpseclib3
Ubuntu:24.04:LTS
All versions, plus listed versions
3.0.21-23.0.33-13.0.34-13.0.35-13.0.37-1
None known
php-phpseclib
Ubuntu:Pro:24.04:LTS
before 2.0.47-1ubuntu0.1~esm1, plus listed versions
2.0.44-12.0.45-12.0.46-12.0.47-1
2.0.47-1ubuntu0.1~esm1
phpseclib
Ubuntu:Pro:24.04:LTS
All versions, plus listed versions
1.0.21-21.0.22-11.0.23-11.0.23-1ubuntu0.1~esm1
None known
php-phpseclib
Ubuntu:25.10
All versions, plus listed versions
2.0.48-3
None known
php-phpseclib3
Ubuntu:25.10
All versions, plus listed versions
3.0.43-2
None known
phpseclib
Ubuntu:25.10
All versions, plus listed versions
1.0.23-6
None known
php-phpseclib3
Ubuntu:26.10
All versions, plus listed versions
3.0.49-1ubuntu13.0.57-1
None known
phpseclib
Ubuntu:26.10
All versions, plus listed versions
1.0.24-11.0.29-11.0.30-1
None known
php-phpseclib3
Ubuntu:26.04:LTS
All versions, plus listed versions
3.0.43-23.0.44-13.0.47-13.0.49-13.0.49-1ubuntu1
None known
php-phpseclib
Ubuntu:Pro:26.04:LTS
before 2.0.51-1ubuntu0.1~esm1, plus listed versions
2.0.48-32.0.49-12.0.51-1
2.0.51-1ubuntu0.1~esm1
phpseclib
Ubuntu:Pro:26.04:LTS
All versions, plus listed versions
1.0.23-61.0.24-11.0.24-1ubuntu0.1~esm1
None known
php-phpseclib
Ubuntu:Pro:16.04:LTS
From an advisory covering 3 CVEs
before 2.0.1-1ubuntu0.1~esm1, plus listed versions
2.0.1-12.0.1-1build1
2.0.1-1ubuntu0.1~esm1
php-phpseclib
Ubuntu:Pro:18.04:LTS
From an advisory covering 3 CVEs
before 2.0.9-1ubuntu0.1~esm3, plus listed versions
2.0.6-12.0.7-12.0.9-12.0.9-1ubuntu0.1~esm2
2.0.9-1ubuntu0.1~esm3
php-phpseclib
Ubuntu:Pro:20.04:LTS
From an advisory covering 3 CVEs
before 2.0.23-2ubuntu0.1~esm3, plus listed versions
2.0.21-22.0.23-22.0.23-2ubuntu0.1~esm2
2.0.23-2ubuntu0.1~esm3
php-phpseclib
Ubuntu:Pro:22.04:LTS
From an advisory covering 3 CVEs
before 2.0.36-1ubuntu0.1~esm3, plus listed versions
2.0.30-2ubuntu12.0.34-12.0.35-12.0.36-12.0.36-1ubuntu0.1~esm2
2.0.36-1ubuntu0.1~esm3
php-phpseclib
Ubuntu:Pro:24.04:LTS
From an advisory covering 3 CVEs
before 2.0.47-1ubuntu0.1~esm1, plus listed versions
2.0.44-12.0.45-12.0.46-12.0.47-1
2.0.47-1ubuntu0.1~esm1
php-phpseclib
Ubuntu:Pro:26.04:LTS
From an advisory covering 3 CVEs
before 2.0.51-1ubuntu0.1~esm1, plus listed versions
2.0.48-32.0.49-12.0.51-1
2.0.51-1ubuntu0.1~esm1

History

History
RecordedChangedSources
affected, facts
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-40194 is a low vulnerability (CVSS 3.7) in Phpseclib, published April 10, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.37%, the 30th percentile. Fixed in phpseclib/phpseclib 2.0.53.

References

Show 9 moreShow less
This page doesn't list everything

Left out here: 2 versions and the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open