CVE-2026-84308
phpseclib — non-constant-time X25519 scalar multiplication permits full private-key recovery
phpseclib is a PHP secure communications library. Prior to 3.0.57 and 4.0.1, pure-PHP X25519 scalar multiplication in phpseclib/Math/PrimeField/Integer.php performs data-dependent conditional modular reductions in add() and subtract(). During the Montgomery ladder in phpseclib/Crypt/EC/BaseCurves/Montgomery.php, the reduction behavior of each step depends on the secret scalar prefix, creating per-step timing and libgmp call-count observations that can reveal a reused 251-bit clamped private scalar. The phpseclib/Crypt/EC/Formats/Keys/MontgomeryPrivate.php derivation path invokes the pure-PHP multiplication without a native-engine check, while phpseclib/Crypt/EC/Formats/Keys/PKCS8.php reaches it when ext-sodium is unavailable. Exploitation requires a reused or long-lived X25519 private key, knowledge of the corresponding public key, execution of the pure-PHP path, and a local observer capable of resolving individual ladder steps or libgmp entry-point calls. Ephemeral X25519 keys, including phpseclib's normal SSH exchange path, are not affected. Recovery of the scalar permanently compromises operations that reuse that key. This issue is fixed in versions 3.0.57 and 4.0.1.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- High
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
6.3
phpseclib — non-constant-time X25519 scalar multiplication permits full private-key recovery
phpseclib is a PHP secure communications library. Prior to 3.0.57 and 4.0.1, pure-PHP X25519 scalar multiplication in phpseclib/Math/PrimeField/Integer.php performs data-dependent conditional modular reductions in add() and subtract(). During the Montgomery ladder in phpseclib/Crypt/EC/BaseCurves/Montgomery.php, the reduction behavior of each step depends on the secret scalar prefix, creating per-step timing and libgmp call-count observations that can reveal a reused 251-bit clamped private scalar. The phpseclib/Crypt/EC/Formats/Keys/MontgomeryPrivate.php derivation path invokes the pure-PHP multiplication without a native-engine check, while phpseclib/Crypt/EC/Formats/Keys/PKCS8.php reaches it when ext-sodium is unavailable. Exploitation requires a reused or long-lived X25519 private key, knowledge of the corresponding public key, execution of the pure-PHP path, and a local observer capable of resolving individual ladder steps or libgmp entry-point calls. Ephemeral X25519 keys, including phpseclib's normal SSH exchange path, are not affected. Recovery of the scalar permanently compromises operations that reuse that key. This issue is fixed in versions 3.0.57 and 4.0.1.
- Record
CVE-2026-84308- CVSS 3.1
- 6.3 Medium
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-208, CWE-385
- Updated
- 2026-11-02
EUVDEUVD-2026-69576
6.3
phpseclib is a PHP secure communications library. Prior to 3.0.57 and 4.0.1, pure-PHP X25519 scalar multiplication in phpseclib/Math/PrimeField/Integer.php performs data-dependent conditional modular reductions in add() and subtract(). During the Montgomery ladder in phpseclib/Crypt/EC/BaseCurves/Montgomery.php, the reduction behavior of each step depends on the secret scalar prefix, creating per-step timing and libgmp call-count observations that can reveal a reused 251-bit clamped private scalar. The phpseclib/Crypt/EC/Formats/Keys/MontgomeryPrivate.php derivation path invokes the pure-PHP multiplication without a native-engine check, while phpseclib/Crypt/EC/Formats/Keys/PKCS8.php reaches it when ext-sodium is unavailable. Exploitation requires a reused or long-lived X25519 private key, knowledge of the corresponding public key, execution of the pure-PHP path, and a local observer capable of resolving individual ladder steps or libgmp entry-point calls. Ephemeral X25519 keys, including phpseclib's normal SSH exchange path, are not affected. Recovery of the scalar permanently compromises operations that reuse that key. This issue is fixed in versions 3.0.57 and 4.0.1.
- Record
EUVD-2026-69576- CVSS 3.1
- 6.3 Medium
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-q97c-8qh3-fpc6
6.3
phpseclib — non-constant-time X25519 scalar multiplication permits full private-key recovery
The pure-PHP X25519 scalar multiplication in phpseclib is not constant-time. Field addition and subtraction each perform a data-dependent conditional modular reduction, so the cost of each Montgomery-ladder step is a linear function of that step's reduction count which is a quantity determined by the secret scalar's prefix.
An observer with per-ladder-step resolution recovers the 251-bit clamped private scalar. This is a per-step leak, not an aggregate one: an instrumented code proof-of-concept recovers 20/20 test keys from 32 observed operations, and an observer that counts libgmp calls instead of timing them recovers a key from a single operation.
This is not a low-order-input issue. Recovery works with the RFC 7748 base point u = 9, with no attacker-chosen input at all. Rejecting low-order public values does not close it.
2. Affected component
Confirmed on phpseclib 3.0.56 (338 files under phpseclib/,sha256(sorted(relpath NUL file_sha256 LF)) = cc7250b611f520e809131aab0931503457c44d8cbfb10d535251c6fec5f62a2b).
The code appears unchanged across the 3.0 series wherever Curve25519 is supported, please confirm the affected range.
| file:line | role |
|---|---|
| Math/PrimeField/Integer.php:189 | add() — conditional subtract($modulo) when the sum ≥ p |
| Math/PrimeField/Integer.php:207 | subtract() — conditional add($modulo) when the result is negative |
| Crypt/EC/BaseCurves/Montgomery.php:229–234 | ladder branch on the secret bit, selecting argument order of doubleAndAddPoint |
| Crypt/EC/Formats/Keys/MontgomeryPrivate.php:66 | multiplyPoint(getBasePoint(), dA) — no engine check of any kind |
| Crypt/EC/Formats/Keys/PKCS8.php:194–200 | the same derivation, correctly gated on ext-sodium — the pattern MontgomeryPrivate is missing |
3. Technical description
Operation counts in the ladder are already constant — 10 field multiplications, 4 additions and 4 subtractions per step, 2560 multiplications per 256-step ladder. Operand values are not. Each PrimeField\Integer::add() / subtract() takes a data-dependent branch costing ~0.85–1.0 µs on the GMP engine, against a ~32 µs step period, so per-step cost is α + β·c where c is that step's conditional-reduction count. Measured across 20 keys: R² = 0.91–0.98, β = 838–920 ns.
c depends on the whole scalar prefix, not on the current bit, so per-step thresholding is useless — it saturates at ~93% per bit for u = p−1 and at chance for u = 9, and recovers 0/20 keys either way, because the bit string is a prefix-XOR in which one flipped step inverts the entire tail. Conditioning on the prefix removes the ambiguity: a beam search replays both branches from each candidate ladder state, reads off the exact c for each, and scores against the observation. The victim's public key adjudicates the small residual search.
Two facts bound the problem and are worth stating precisely, because they determine whether a fix is needed at all:
- Aggregate observation is provably useless. The adjacent-bit transition count
T(k)has exact entropyH(T) = 4.0357bits over clamped scalars, so a noiseless transition-count oracle still leaves ~2^247 candidates. The summed reduction countΣcis richer (~6.6–6.9 bits) and still leaves ~2^244. Any measurement that collapses the call to one number is safe. Per-step measurement is not. - The libgmp call counts are exactly determined. Per ladder step,
__gmpz_add = 4 + csub,__gmpz_sub = 4 + cadd,__gmpz_mul = __gmpz_mod = 10. Verified by differencing gdb breakpoint counts against phpseclib's owndoubleAndAddPoint— 27/27 steps exact, extended independently to 64/64 and 38/38 by our two reviewers. An observer that only counts these calls needs no timing, no calibration and no repetition.
Results, 20 keys × 3 sampling seeds, 800 traces per path collected from 800 distinct PHP processes (so the observations are…
- Record
GHSA-q97c-8qh3-fpc6- CVSS 3.1
- 6.3 Medium
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-208, CWE-385
- Updated
- 2026-11-02
NVD
6.3
phpseclib is a PHP secure communications library. Prior to 3.0.57 and 4.0.1, pure-PHP X25519 scalar multiplication in phpseclib/Math/PrimeField/Integer.php performs data-dependent conditional modular reductions in add() and subtract(). During the Montgomery ladder in phpseclib/Crypt/EC/BaseCurves/Montgomery.php, the reduction behavior of each step depends on the secret scalar prefix, creating per-step timing and libgmp call-count observations that can reveal a reused 251-bit clamped private scalar. The phpseclib/Crypt/EC/Formats/Keys/MontgomeryPrivate.php derivation path invokes the pure-PHP multiplication without a native-engine check, while phpseclib/Crypt/EC/Formats/Keys/PKCS8.php reaches it when ext-sodium is unavailable. Exploitation requires a reused or long-lived X25519 private key, knowledge of the corresponding public key, execution of the pure-PHP path, and a local observer capable of resolving individual ladder steps or libgmp entry-point calls. Ephemeral X25519 keys, including phpseclib's normal SSH exchange path, are not affected. Recovery of the scalar permanently compromises operations that reuse that key. This issue is fixed in versions 3.0.57 and 4.0.1.
- Record
CVE-2026-84308- CVSS 3.1
- 6.3 Medium
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-208, CWE-385
- Updated
- 2026-11-02
OSV
6.3
phpseclib — non-constant-time X25519 scalar multiplication permits full private-key recovery
phpseclib is a PHP secure communications library. Prior to 3.0.57 and 4.0.1, pure-PHP X25519 scalar multiplication in phpseclib/Math/PrimeField/Integer.php performs data-dependent conditional modular reductions in add() and subtract(). During the Montgomery ladder in phpseclib/Crypt/EC/BaseCurves/Montgomery.php, the reduction behavior of each step depends on the secret scalar prefix, creating per-step timing and libgmp call-count observations that can reveal a reused 251-bit clamped private scalar. The phpseclib/Crypt/EC/Formats/Keys/MontgomeryPrivate.php derivation path invokes the pure-PHP multiplication without a native-engine check, while phpseclib/Crypt/EC/Formats/Keys/PKCS8.php reaches it when ext-sodium is unavailable. Exploitation requires a reused or long-lived X25519 private key, knowledge of the corresponding public key, execution of the pure-PHP path, and a local observer capable of resolving individual ladder steps or libgmp entry-point calls. Ephemeral X25519 keys, including phpseclib's normal SSH exchange path, are not affected. Recovery of the scalar permanently compromises operations that reuse that key. This issue is fixed in versions 3.0.57 and 4.0.1.
- Record
CVE-2026-84308- CVSS 3.1
- 6.3 Medium
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-208, CWE-385
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-84308
6.3
phpseclib is a PHP secure communications library. Prior to 3.0.57 and 4.0.1, pure-PHP X25519 scalar multiplication in phpseclib/Math/PrimeField/Integer.php performs data-dependent conditional modular reductions in add() and subtract(). During the Montgomery ladder in phpseclib/Crypt/EC/BaseCurves/Montgomery.php, the reduction behavior of each step depends on the secret scalar prefix, creating per-step timing and libgmp call-count observations that can reveal a reused 251-bit clamped private scalar. The phpseclib/Crypt/EC/Formats/Keys/MontgomeryPrivate.php derivation path invokes the pure-PHP multiplication without a native-engine check, while phpseclib/Crypt/EC/Formats/Keys/PKCS8.php reaches it when ext-sodium is unavailable. Exploitation requires a reused or long-lived X25519 private key, knowledge of the corresponding public key, execution of the pure-PHP path, and a local observer capable of resolving individual ladder steps or libgmp entry-point calls. Ephemeral X25519 keys, including phpseclib's normal SSH exchange path, are not affected. Recovery of the scalar permanently compromises operations that reuse that key. This issue is fixed in versions 3.0.57 and 4.0.1.
- Record
DEBIAN-CVE-2026-84308- CVSS 3.1
- 6.3 Medium
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-02
OSVGHSA-q97c-8qh3-fpc6
6.3
phpseclib — non-constant-time X25519 scalar multiplication permits full private-key recovery
The pure-PHP X25519 scalar multiplication in phpseclib is not constant-time. Field addition and subtraction each perform a data-dependent conditional modular reduction, so the cost of each Montgomery-ladder step is a linear function of that step's reduction count which is a quantity determined by the secret scalar's prefix.
An observer with per-ladder-step resolution recovers the 251-bit clamped private scalar. This is a per-step leak, not an aggregate one: an instrumented code proof-of-concept recovers 20/20 test keys from 32 observed operations, and an observer that counts libgmp calls instead of timing them recovers a key from a single operation.
This is not a low-order-input issue. Recovery works with the RFC 7748 base point u = 9, with no attacker-chosen input at all. Rejecting low-order public values does not close it.
2. Affected component
Confirmed on phpseclib 3.0.56 (338 files under phpseclib/,sha256(sorted(relpath NUL file_sha256 LF)) = cc7250b611f520e809131aab0931503457c44d8cbfb10d535251c6fec5f62a2b).
The code appears unchanged across the 3.0 series wherever Curve25519 is supported, please confirm the affected range.
| file:line | role |
|---|---|
| Math/PrimeField/Integer.php:189 | add() — conditional subtract($modulo) when the sum ≥ p |
| Math/PrimeField/Integer.php:207 | subtract() — conditional add($modulo) when the result is negative |
| Crypt/EC/BaseCurves/Montgomery.php:229–234 | ladder branch on the secret bit, selecting argument order of doubleAndAddPoint |
| Crypt/EC/Formats/Keys/MontgomeryPrivate.php:66 | multiplyPoint(getBasePoint(), dA) — no engine check of any kind |
| Crypt/EC/Formats/Keys/PKCS8.php:194–200 | the same derivation, correctly gated on ext-sodium — the pattern MontgomeryPrivate is missing |
3. Technical description
Operation counts in the ladder are already constant — 10 field multiplications, 4 additions and 4 subtractions per step, 2560 multiplications per 256-step ladder. Operand values are not. Each PrimeField\Integer::add() / subtract() takes a data-dependent branch costing ~0.85–1.0 µs on the GMP engine, against a ~32 µs step period, so per-step cost is α + β·c where c is that step's conditional-reduction count. Measured across 20 keys: R² = 0.91–0.98, β = 838–920 ns.
c depends on the whole scalar prefix, not on the current bit, so per-step thresholding is useless — it saturates at ~93% per bit for u = p−1 and at chance for u = 9, and recovers 0/20 keys either way, because the bit string is a prefix-XOR in which one flipped step inverts the entire tail. Conditioning on the prefix removes the ambiguity: a beam search replays both branches from each candidate ladder state, reads off the exact c for each, and scores against the observation. The victim's public key adjudicates the small residual search.
Two facts bound the problem and are worth stating precisely, because they determine whether a fix is needed at all:
- Aggregate observation is provably useless. The adjacent-bit transition count
T(k)has exact entropyH(T) = 4.0357bits over clamped scalars, so a noiseless transition-count oracle still leaves ~2^247 candidates. The summed reduction countΣcis richer (~6.6–6.9 bits) and still leaves ~2^244. Any measurement that collapses the call to one number is safe. Per-step measurement is not. - The libgmp call counts are exactly determined. Per ladder step,
__gmpz_add = 4 + csub,__gmpz_sub = 4 + cadd,__gmpz_mul = __gmpz_mod = 10. Verified by differencing gdb breakpoint counts against phpseclib's owndoubleAndAddPoint— 27/27 steps exact, extended independently to 64/64 and 38/38 by our two reviewers. An observer that only counts these calls needs no timing, no calibration and no repetition.
Results, 20 keys × 3 sampling seeds, 800 traces per path collected from 800 distinct PHP processes (so the observations are…
- Record
GHSA-q97c-8qh3-fpc6- CVSS 3.1
- 6.3 Medium
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-208, CWE-385
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-84308
6.3
phpseclib is a PHP secure communications library. Prior to 3.0.57 and 4.0.1, pure-PHP X25519 scalar multiplication in phpseclib/Math/PrimeField/Integer.php performs data-dependent conditional modular reductions in add() and subtract(). During the Montgomery ladder in phpseclib/Crypt/EC/BaseCurves/Montgomery.php, the reduction behavior of each step depends on the secret scalar prefix, creating per-step timing and libgmp call-count observations that can reveal a reused 251-bit clamped private scalar. The phpseclib/Crypt/EC/Formats/Keys/MontgomeryPrivate.php derivation path invokes the pure-PHP multiplication without a native-engine check, while phpseclib/Crypt/EC/Formats/Keys/PKCS8.php reaches it when ext-sodium is unavailable. Exploitation requires a reused or long-lived X25519 private key, knowledge of the corresponding public key, execution of the pure-PHP path, and a local observer capable of resolving individual ladder steps or libgmp entry-point calls. Ephemeral X25519 keys, including phpseclib's normal SSH exchange path, are not affected. Recovery of the scalar permanently compromises operations that reuse that key. This issue is fixed in versions 3.0.57 and 4.0.1.
- Record
UBUNTU-CVE-2026-84308- CVSS 3.1
- 6.3 Medium
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
phpseclib/phpseclibPackagist |
before 3.0.57 | 3.0.57 |
phpseclib/phpseclibPackagist |
4.0.0 up to 4.0.1 | 4.0.1 |
php-phpseclib3Debian:12 |
All versions, plus listed versions 3.0.19-13.0.19-1+deb12u13.0.19-1+deb12u23.0.19-1+deb12u33.0.19-1+deb12u4 Show 33 moreShow less3.0.19-1+deb12u63.0.20-13.0.21-13.0.21-23.0.22-13.0.23-13.0.33-13.0.34-13.0.35-13.0.36-13.0.37-13.0.38-13.0.39-13.0.41-13.0.42-13.0.43-13.0.43-23.0.44-13.0.44-23.0.45-13.0.46-13.0.46-23.0.47-13.0.48-13.0.49-13.0.50-13.0.51-13.0.52-13.0.52-23.0.53-13.0.55-13.0.56-13.0.57-1 |
None known |
php-phpseclib3Debian:13 |
All versions, plus listed versions 3.0.43-23.0.43-2+deb13u13.0.43-2+deb13u33.0.44-13.0.44-2 Show 14 moreShow less3.0.45-13.0.46-13.0.46-23.0.47-13.0.48-13.0.49-13.0.50-13.0.51-13.0.52-13.0.52-23.0.53-13.0.55-13.0.56-13.0.57-1 |
None known |
php-phpseclib3Debian:14 |
before 3.0.57-1, plus listed versions 3.0.43-23.0.44-13.0.44-23.0.45-13.0.46-1 Show 11 moreShow less3.0.46-23.0.47-13.0.48-13.0.49-13.0.50-13.0.51-13.0.52-13.0.52-23.0.53-13.0.55-13.0.56-1 |
3.0.57-1 |
php-phpseclib4Debian:14 |
before 4.0.1-1, plus listed versions 4.0.0-1 |
4.0.1-1 |
phpseclib/phpseclibPackagist |
before 3.0.57, plus listed versions 0.3.00.3.10.3.100.3.50.3.6 Show 45 moreShow less0.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.281.0.291.0.31.0.301.0.41.0.51.0.61.0.71.0.81.0.92.0.02.0.12.0.102.0.112.0.122.0.132.0.142.0.152.0.162.0.172.0.18 |
3.0.57 |
php-phpseclibUbuntu:Pro:16.04:LTS |
All versions, plus listed versions 2.0.1-12.0.1-1build12.0.1-1ubuntu0.1~esm12.0.1-1ubuntu0.1~esm2 |
None known |
phpseclibUbuntu: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-phpseclibUbuntu:Pro:18.04:LTS |
All versions, plus listed versions 2.0.6-12.0.7-12.0.9-12.0.9-1ubuntu0.1~esm22.0.9-1ubuntu0.1~esm3 |
None known |
Show 15 moreShow less
| Package | Affected | Fixed |
|---|---|---|
phpseclibUbuntu: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-phpseclibUbuntu:Pro:20.04:LTS |
All versions, plus listed versions 2.0.21-22.0.23-22.0.23-2ubuntu0.1~esm22.0.23-2ubuntu0.1~esm3 |
None known |
phpseclibUbuntu: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-phpseclibUbuntu:Pro:22.04:LTS |
All versions, plus listed versions 2.0.30-2ubuntu12.0.34-12.0.35-12.0.36-12.0.36-1ubuntu0.1~esm22.0.36-1ubuntu0.1~esm3 |
None known |
php-phpseclib3Ubuntu: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 |
phpseclibUbuntu: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-phpseclib3Ubuntu: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-phpseclibUbuntu:Pro:24.04:LTS |
All versions, plus listed versions 2.0.44-12.0.45-12.0.46-12.0.47-12.0.47-1ubuntu0.1~esm1 |
None known |
phpseclibUbuntu: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-phpseclibUbuntu:26.10 |
All versions, plus listed versions 2.0.51-12.0.54-12.0.55-1 |
None known |
php-phpseclib3Ubuntu:26.10 |
All versions, plus listed versions 3.0.49-1ubuntu13.0.57-1 |
None known |
phpseclibUbuntu:26.10 |
All versions, plus listed versions 1.0.24-11.0.29-11.0.30-1 |
None known |
php-phpseclib3Ubuntu: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-phpseclibUbuntu:Pro:26.04:LTS |
All versions, plus listed versions 2.0.48-32.0.49-12.0.51-12.0.51-1ubuntu0.1~esm1 |
None known |
phpseclibUbuntu:Pro:26.04:LTS |
All versions, plus listed versions 1.0.23-61.0.24-11.0.24-1ubuntu0.1~esm1 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-84308 is a medium vulnerability (CVSS 6.3) in Phpseclib, published September 1, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.33%, the 25th percentile. Fixed in phpseclib/phpseclib 3.0.57.
References
github.com/phpseclib/phpseclib/security/advisories/GHSA-q97c-8qh3-fpc6
github.com/phpseclib/phpseclib/commit/fb56bc5bb9009b54a6c26b31aeec8ed944f17373
github.com/phpseclib/phpseclib/releases/tag/3.0.57
github.com/phpseclib/phpseclib/releases/tag/4.0.1
nvd.nist.gov/vuln/detail/CVE-2026-84308
github.com/advisories/GHSA-q97c-8qh3-fpc6
Left out here: 93 versions and the rest of 2 source descriptions. The JSON record has them.