[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1065263: bookworm-pu: package php-phpseclib/2.0.42-1+deb12u2



Package: release.debian.org
Severity: normal
Tags: bookworm
X-Debbugs-Cc: php-phpseclib@packages.debian.org, team@security.debian.org
Control: affects -1 + src:php-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.

[ 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 php-phpseclib-2.0.42/debian/changelog php-phpseclib-2.0.42/debian/changelog
--- php-phpseclib-2.0.42/debian/changelog	2023-12-31 11:49:50.000000000 +0100
+++ php-phpseclib-2.0.42/debian/changelog	2024-02-26 23:23:19.000000000 +0100
@@ -1,3 +1,15 @@
+php-phpseclib (2.0.42-1+deb12u2) bookworm; urgency=medium
+
+  * Backport upstream fixes
+    - BigInteger: put guardrails on isPrime() and randomPrime() [CVE-2024-27354]
+    - BigInteger: rm visibility modifiers from static variables
+    - ASN1: limit OID length [CVE-2024-27355]
+    - Tests: updates for phpseclib 2.0
+    - BigInteger: phpseclib 2.0 updates
+    - BigInteger: fix getLength()
+
+ -- David Prévot <taffit@debian.org>  Mon, 26 Feb 2024 23:23:19 +0100
+
 php-phpseclib (2.0.42-1+deb12u1) bookworm-security; urgency=medium
 
   * Track bookworm
diff -Nru php-phpseclib-2.0.42/debian/patches/0010-BigInteger-put-guardrails-on-isPrime-and-randomPrime.patch php-phpseclib-2.0.42/debian/patches/0010-BigInteger-put-guardrails-on-isPrime-and-randomPrime.patch
--- php-phpseclib-2.0.42/debian/patches/0010-BigInteger-put-guardrails-on-isPrime-and-randomPrime.patch	1970-01-01 01:00:00.000000000 +0100
+++ php-phpseclib-2.0.42/debian/patches/0010-BigInteger-put-guardrails-on-isPrime-and-randomPrime.patch	2024-02-26 23:23:19.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 81b69ac..fd9cd57 100644
+--- a/phpseclib/Math/BigInteger.php
++++ b/phpseclib/Math/BigInteger.php
+@@ -729,6 +729,33 @@ class 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
+      *
+@@ -3237,6 +3264,11 @@ class 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 static(1);
+@@ -3344,7 +3376,14 @@ class 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)"
diff -Nru php-phpseclib-2.0.42/debian/patches/0011-BigInteger-rm-visibility-modifiers-from-static-varia.patch php-phpseclib-2.0.42/debian/patches/0011-BigInteger-rm-visibility-modifiers-from-static-varia.patch
--- php-phpseclib-2.0.42/debian/patches/0011-BigInteger-rm-visibility-modifiers-from-static-varia.patch	1970-01-01 01:00:00.000000000 +0100
+++ php-phpseclib-2.0.42/debian/patches/0011-BigInteger-rm-visibility-modifiers-from-static-varia.patch	2024-02-26 23:23:19.000000000 +0100
@@ -0,0 +1,48 @@
+From: terrafrost <terrafrost@gmail.com>
+Date: Fri, 23 Feb 2024 21:55:47 -0600
+Subject: BigInteger: rm visibility modifiers from static variables
+
+the non static variables don't have privacy modifiers so idk that
+the static ones ought to either. phpseclib 3.0 uses privacy
+modifiers but not the 2.0 branch
+
+Origin: upstream, https://github.com/phpseclib/phpseclib/commit/2124f399b430f67c3e51211a6e5db6dee8f2cec4
+---
+ phpseclib/Math/BigInteger.php | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/phpseclib/Math/BigInteger.php b/phpseclib/Math/BigInteger.php
+index fd9cd57..be07d58 100644
+--- a/phpseclib/Math/BigInteger.php
++++ b/phpseclib/Math/BigInteger.php
+@@ -163,23 +163,23 @@ class BigInteger
+      *
+      * @see __construct()
+      */
+-    protected static $base;
+-    protected static $baseFull;
+-    protected static $maxDigit;
+-    protected static $msb;
++    static $base;
++    static $baseFull;
++    static $maxDigit;
++    static $msb;
+ 
+     /**
+      * $max10 in greatest $max10Len satisfying
+      * $max10 = 10**$max10Len <= 2**$base.
+      */
+-    protected static $max10;
++    static $max10;
+ 
+     /**
+      * $max10Len in greatest $max10Len satisfying
+      * $max10 = 10**$max10Len <= 2**$base.
+      */
+-    protected static $max10Len;
+-    protected static $maxDigit2;
++    static $max10Len;
++    static $maxDigit2;
+     /**#@-*/
+ 
+     /**
Les fichiers binaires /tmp/8iiFsWVWe6/php-phpseclib-2.0.42/debian/patches/0012-ASN1-limit-OID-length.patch et /tmp/SZVh_IU5jt/php-phpseclib-2.0.42/debian/patches/0012-ASN1-limit-OID-length.patch sont différents
diff -Nru php-phpseclib-2.0.42/debian/patches/0013-Tests-updates-for-phpseclib-2.0.patch php-phpseclib-2.0.42/debian/patches/0013-Tests-updates-for-phpseclib-2.0.patch
--- php-phpseclib-2.0.42/debian/patches/0013-Tests-updates-for-phpseclib-2.0.patch	1970-01-01 01:00:00.000000000 +0100
+++ php-phpseclib-2.0.42/debian/patches/0013-Tests-updates-for-phpseclib-2.0.patch	2024-02-26 23:23:19.000000000 +0100
@@ -0,0 +1,22 @@
+From: terrafrost <terrafrost@gmail.com>
+Date: Sat, 24 Feb 2024 13:26:33 -0600
+Subject: Tests: updates for phpseclib 2.0
+
+Origin: upstream, https://github.com/phpseclib/phpseclib/commit/0777e700b966b68287081cdb83e89834b846f84a
+---
+ tests/Unit/File/ASN1Test.php | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/Unit/File/ASN1Test.php b/tests/Unit/File/ASN1Test.php
+index 486809a..0d255a1 100644
+--- a/tests/Unit/File/ASN1Test.php
++++ b/tests/Unit/File/ASN1Test.php
+@@ -453,7 +453,7 @@ class Unit_File_ASN1Test extends PhpseclibTestCase
+     {
+         $cert = file_get_contents(dirname(__FILE__) . '/ASN1/mal-cert-02.der');
+ 
+-        $asn1 = new File_ASN1();
++        $asn1 = new ASN1();
+         //$this->setExpectedException('PHPUnit_Framework_Error_Notice');
+         $decoded = $asn1->decodeBER($cert);
+         $this->assertFalse($decoded[0]);
diff -Nru php-phpseclib-2.0.42/debian/patches/0014-BigInteger-phpseclib-2.0-updates.patch php-phpseclib-2.0.42/debian/patches/0014-BigInteger-phpseclib-2.0-updates.patch
--- php-phpseclib-2.0.42/debian/patches/0014-BigInteger-phpseclib-2.0-updates.patch	1970-01-01 01:00:00.000000000 +0100
+++ php-phpseclib-2.0.42/debian/patches/0014-BigInteger-phpseclib-2.0-updates.patch	2024-02-26 23:23:19.000000000 +0100
@@ -0,0 +1,29 @@
+From: terrafrost <terrafrost@gmail.com>
+Date: Sat, 24 Feb 2024 13:29:02 -0600
+Subject: BigInteger: phpseclib 2.0 updates
+
+Origin: upstream, https://github.com/phpseclib/phpseclib/commit/2870c8fab3f132d2ed40a66c97a36fe5ab625698
+---
+ 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 be07d58..bb92c6e 100644
+--- a/phpseclib/Math/BigInteger.php
++++ b/phpseclib/Math/BigInteger.php
+@@ -736,13 +736,13 @@ class BigInteger
+      */
+     function getLength()
+     {
+-        if (MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL) {
++        if (MATH_BIGINTEGER_MODE != self::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)) :
++            $max * self::$base + ceil(log($a->value[$max] + 1, 2)) :
+             0;
+     }
+ 
diff -Nru php-phpseclib-2.0.42/debian/patches/0015-BigInteger-fix-getLength.patch php-phpseclib-2.0.42/debian/patches/0015-BigInteger-fix-getLength.patch
--- php-phpseclib-2.0.42/debian/patches/0015-BigInteger-fix-getLength.patch	1970-01-01 01:00:00.000000000 +0100
+++ php-phpseclib-2.0.42/debian/patches/0015-BigInteger-fix-getLength.patch	2024-02-26 23:23:19.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: backport, 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 bb92c6e..7747a95 100644
+--- a/phpseclib/Math/BigInteger.php
++++ b/phpseclib/Math/BigInteger.php
+@@ -742,7 +742,7 @@ class BigInteger
+ 
+         $max = count($this->value) - 1;
+         return $max != -1 ?
+-            $max * self::$base + ceil(log($a->value[$max] + 1, 2)) :
++            $max * self::$base + intval(ceil(log($this->value[$max] + 1, 2))) :
+             0;
+     }
+ 
+@@ -753,7 +753,7 @@ class BigInteger
+      */
+     function getLengthInBytes()
+     {
+-        return ceil($this->getLength() / 8);
++        return (int) ceil($this->getLength() / 8);
+     }
+ 
+     /**
diff -Nru php-phpseclib-2.0.42/debian/patches/series php-phpseclib-2.0.42/debian/patches/series
--- php-phpseclib-2.0.42/debian/patches/series	2023-12-31 11:49:50.000000000 +0100
+++ php-phpseclib-2.0.42/debian/patches/series	2024-02-26 23:23:19.000000000 +0100
@@ -7,3 +7,9 @@
 0007-Skip-test-failing-on-s390x-architecture.patch
 0008-SSH2-add-support-for-RFC8308.patch
 0009-SSH2-implement-terrapin-attack-countermeasures.patch
+0010-BigInteger-put-guardrails-on-isPrime-and-randomPrime.patch
+0011-BigInteger-rm-visibility-modifiers-from-static-varia.patch
+0012-ASN1-limit-OID-length.patch
+0013-Tests-updates-for-phpseclib-2.0.patch
+0014-BigInteger-phpseclib-2.0-updates.patch
+0015-BigInteger-fix-getLength.patch
diff -Nru php-phpseclib-2.0.42/debian/source/include-binaries php-phpseclib-2.0.42/debian/source/include-binaries
--- php-phpseclib-2.0.42/debian/source/include-binaries	1970-01-01 01:00:00.000000000 +0100
+++ php-phpseclib-2.0.42/debian/source/include-binaries	2024-02-26 23:23:19.000000000 +0100
@@ -0,0 +1 @@
+debian/patches/0012-ASN1-limit-OID-length.patch

Attachment: signature.asc
Description: PGP signature


Reply to: