Package: release.debian.org Severity: normal Tags: bookworm X-Debbugs-Cc: phpseclib@packages.debian.org, team@security.debian.org Control: affects -1 + src:phpseclib User: release.debian.org@packages.debian.org Usertags: pu Hi, I’d like to see CVE-2024-27354 and CVE-2024-27355 addressed in the next point release. We agreed with the security team that these issues are not worth a DSA. This update also fixes an issue in dependency loading similar to CVE-2024-24821 as fixed in composer/DSA-5632-1. [ Checklist ] [x] *all* changes are documented in the d/changelog [x] I reviewed all changes and I approve them [x] attach debdiff against the package in stable [x] the issue is verified as fixed in unstable TIA for considering. Cheers, taffit
diff -Nru phpseclib-1.0.20/debian/changelog phpseclib-1.0.20/debian/changelog
--- phpseclib-1.0.20/debian/changelog 2023-12-31 11:37:21.000000000 +0100
+++ phpseclib-1.0.20/debian/changelog 2024-02-26 22:58:32.000000000 +0100
@@ -1,3 +1,13 @@
+phpseclib (1.0.20-1+deb12u2) bookworm; urgency=medium
+
+ * Backport upstream fixes
+ - BigInteger: put guardrails on isPrime() and randomPrime() [CVE-2024-27354]
+ - ASN1: limit OID length [CVE-2024-27355]
+ - BigInteger: fix getLength()
+ * Force system dependencies loading
+
+ -- David Prévot <taffit@debian.org> Mon, 26 Feb 2024 22:58:32 +0100
+
phpseclib (1.0.20-1+deb12u1) bookworm-security; urgency=medium
* Track Bookworm
diff -Nru phpseclib-1.0.20/debian/patches/0011-BigInteger-put-guardrails-on-isPrime-and-randomPrime.patch phpseclib-1.0.20/debian/patches/0011-BigInteger-put-guardrails-on-isPrime-and-randomPrime.patch
--- phpseclib-1.0.20/debian/patches/0011-BigInteger-put-guardrails-on-isPrime-and-randomPrime.patch 1970-01-01 01:00:00.000000000 +0100
+++ phpseclib-1.0.20/debian/patches/0011-BigInteger-put-guardrails-on-isPrime-and-randomPrime.patch 2024-02-26 22:58:32.000000000 +0100
@@ -0,0 +1,76 @@
+From: terrafrost <terrafrost@gmail.com>
+Date: Fri, 23 Feb 2024 08:57:22 -0600
+Subject: BigInteger: put guardrails on isPrime() and randomPrime()
+
+Origin: upstream, https://github.com/phpseclib/phpseclib/commit/ad5dbdf2129f5e0fb644637770b7f33de8ca8575
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2024-27354
+---
+ phpseclib/Math/BigInteger.php | 41 ++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 40 insertions(+), 1 deletion(-)
+
+diff --git a/phpseclib/Math/BigInteger.php b/phpseclib/Math/BigInteger.php
+index 961e6ca..5f6b8f3 100644
+--- a/phpseclib/Math/BigInteger.php
++++ b/phpseclib/Math/BigInteger.php
+@@ -746,6 +746,33 @@ class Math_BigInteger
+ return $result;
+ }
+
++ /**
++ * Return the size of a BigInteger in bits
++ *
++ * @return int
++ */
++ function getLength()
++ {
++ if (MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL) {
++ return strlen($this->toBits());
++ }
++
++ $max = count($this->value) - 1;
++ return $max != -1 ?
++ $max * MATH_BIGINTEGER_BASE + ceil(log($a->value[$max] + 1, 2)) :
++ 0;
++ }
++
++ /**
++ * Return the size of a BigInteger in bytes
++ *
++ * @return int
++ */
++ function getLengthInBytes()
++ {
++ return ceil($this->getLength() / 8);
++ }
++
+ /**
+ * Copy an object
+ *
+@@ -3283,6 +3310,11 @@ class Math_BigInteger
+ $min = $temp;
+ }
+
++ $length = $max->getLength();
++ if ($length > 8196) {
++ user_error('Generation of random prime numbers larger than 8196 has been disabled');
++ }
++
+ static $one, $two;
+ if (!isset($one)) {
+ $one = new Math_BigInteger(1);
+@@ -3390,7 +3422,14 @@ class Math_BigInteger
+ */
+ function isPrime($t = false)
+ {
+- $length = strlen($this->toBytes());
++ $length = $this->getLength();
++ // OpenSSL limits RSA keys to 16384 bits. The length of an RSA key is equal to the length of the modulo, which is
++ // produced by multiplying the primes p and q by one another. The largest number two 8196 bit primes can produce is
++ // a 16384 bit number so, basically, 8196 bit primes are the largest OpenSSL will generate and if that's the largest
++ // that it'll generate it also stands to reason that that's the largest you'll be able to test primality on
++ if ($length > 8196) {
++ user_error('Primality testing is not supported for numbers larger than 8196 bits');
++ }
+
+ if (!$t) {
+ // see HAC 4.49 "Note (controlling the error probability)"
Les fichiers binaires /tmp/iyz_ted7Do/phpseclib-1.0.20/debian/patches/0012-ASN1-limit-OID-length.patch et /tmp/6XyXWtF89o/phpseclib-1.0.20/debian/patches/0012-ASN1-limit-OID-length.patch sont différents
diff -Nru phpseclib-1.0.20/debian/patches/0013-BigInteger-fix-getLength.patch phpseclib-1.0.20/debian/patches/0013-BigInteger-fix-getLength.patch
--- phpseclib-1.0.20/debian/patches/0013-BigInteger-fix-getLength.patch 1970-01-01 01:00:00.000000000 +0100
+++ phpseclib-1.0.20/debian/patches/0013-BigInteger-fix-getLength.patch 2024-02-26 22:58:32.000000000 +0100
@@ -0,0 +1,31 @@
+From: terrafrost <terrafrost@gmail.com>
+Date: Sat, 24 Feb 2024 14:15:49 -0600
+Subject: BigInteger: fix getLength()
+
+Origin: upstream, https://github.com/phpseclib/phpseclib/commit/c55b75199ec8d12cec6eadf6da99da4a3712fe56
+---
+ phpseclib/Math/BigInteger.php | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/phpseclib/Math/BigInteger.php b/phpseclib/Math/BigInteger.php
+index 5f6b8f3..e4fb187 100644
+--- a/phpseclib/Math/BigInteger.php
++++ b/phpseclib/Math/BigInteger.php
+@@ -759,7 +759,7 @@ class Math_BigInteger
+
+ $max = count($this->value) - 1;
+ return $max != -1 ?
+- $max * MATH_BIGINTEGER_BASE + ceil(log($a->value[$max] + 1, 2)) :
++ $max * MATH_BIGINTEGER_BASE + intval(ceil(log($this->value[$max] + 1, 2))) :
+ 0;
+ }
+
+@@ -770,7 +770,7 @@ class Math_BigInteger
+ */
+ function getLengthInBytes()
+ {
+- return ceil($this->getLength() / 8);
++ return (int) ceil($this->getLength() / 8);
+ }
+
+ /**
diff -Nru phpseclib-1.0.20/debian/patches/series phpseclib-1.0.20/debian/patches/series
--- phpseclib-1.0.20/debian/patches/series 2023-12-31 11:37:21.000000000 +0100
+++ phpseclib-1.0.20/debian/patches/series 2024-02-26 22:58:32.000000000 +0100
@@ -8,3 +8,6 @@
0008-backport-enhancements-from-the-2.0-branch.patch
0009-SSH2-add-support-for-RFC8308.patch
0010-SSH2-implement-terrapin-attack-countermeasures.patch
+0011-BigInteger-put-guardrails-on-isPrime-and-randomPrime.patch
+0012-ASN1-limit-OID-length.patch
+0013-BigInteger-fix-getLength.patch
diff -Nru phpseclib-1.0.20/debian/pkg-php-tools-autoloaders phpseclib-1.0.20/debian/pkg-php-tools-autoloaders
--- phpseclib-1.0.20/debian/pkg-php-tools-autoloaders 2023-12-31 11:37:21.000000000 +0100
+++ phpseclib-1.0.20/debian/pkg-php-tools-autoloaders 2024-02-26 22:58:32.000000000 +0100
@@ -1 +1,2 @@
phpseclib phpseclib phpseclib.autoloader.php
+pear-pear PHP_Compat none
diff -Nru phpseclib-1.0.20/debian/source/include-binaries phpseclib-1.0.20/debian/source/include-binaries
--- phpseclib-1.0.20/debian/source/include-binaries 1970-01-01 01:00:00.000000000 +0100
+++ phpseclib-1.0.20/debian/source/include-binaries 2024-02-26 22:58:32.000000000 +0100
@@ -0,0 +1 @@
+debian/patches/0012-ASN1-limit-OID-length.patch
Attachment:
signature.asc
Description: PGP signature