From 3d7acde1833f7b78140feb0d2a349875c531d7a9 Mon Sep 17 00:00:00 2001 From: terrafrost Date: Sun, 26 May 2019 03:10:43 -0500 Subject: [PATCH 1/4] Tests/X509: add unit test for long tags --- tests/Unit/File/X509/X509Test.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/Unit/File/X509/X509Test.php b/tests/Unit/File/X509/X509Test.php index 61362d11..6600872b 100644 --- a/tests/Unit/File/X509/X509Test.php +++ b/tests/Unit/File/X509/X509Test.php @@ -672,4 +672,22 @@ IOkKcGQRCMha8X2e7GmlpdWC1ycenlbN0nbVeSv3JUMcafC4+Q== $this->assertFalse($x509->validateDate('Nov 22, 2018')); $this->assertTrue($x509->validateDate('Nov 22, 2012')); } + + public function testLongTag() + { + $x509 = new File_X509(); + $r = $x509->loadX509('-----BEGIN CERTIFICATE----- +MIIBjDCCATGgAwIBAgIJAJSiNCIEEiyyMAoGCCqGSM49BAMCMA0xCzAJBgNVBAMM +AkNBMB4XDTE5MDUwOTAzMTUzMFoXDTE5MDYwODAzMTUzMFowDTELMAkGA1UEAwwC +Q0FNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUU4K0R0TDM0Syt0 +RzZGR3o2QXJ2QzlySnlmN1Y5N09wY3ZWeG1IbjRXQStXc0E2L0dxLzZ1cUFBdG5Y +RDZOQUxsRVVSVFZCcmlvNjB4L0xZN1ZoTmx0UT09o1kwVzAgBgNVHQ4BAf8EFgQU +25GbjmtucxjEGkWrB2R6AB6/yrkwIgYDVR0jAQH/BBgwFoAU25GbjmtucxjEGkWr +B2R6AB6/yrkwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAgNJADBGAiEA6ZB6 ++KlUM1ZXFrxtDxLWqp51myWDulWjnK6cl7b5AVgCIQCRdthTn8JlN5bRSnJ6qiCk +A9bhRA0cVk7bAEU2c44CYg== +-----END CERTIFICATE-----'); + + $this->assertInternalType('array', $r); + } } From 70c0a0ddf4311464eedef0011ed7b1f971a68de4 Mon Sep 17 00:00:00 2001 From: terrafrost Date: Sun, 26 May 2019 03:18:06 -0500 Subject: [PATCH 2/4] ASN1: correctly handle long tags --- phpseclib/File/ASN1.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/phpseclib/File/ASN1.php b/phpseclib/File/ASN1.php index d76306f9..abab574a 100644 --- a/phpseclib/File/ASN1.php +++ b/phpseclib/File/ASN1.php @@ -326,9 +326,10 @@ class File_ASN1 $tag = 0; // process septets (since the eighth bit is ignored, it's not an octet) do { - $loop = ord($encoded[0]) >> 7; + $temp = ord($encoded[$encoded_pos++]); + $loop = $temp >> 7; $tag <<= 7; - $tag |= ord($encoded[$encoded_pos++]) & 0x7F; + $tag |= $temp & 0x7F; $start++; } while ($loop); } From 9e31808f617ab3db74d2917249ee79c625d419af Mon Sep 17 00:00:00 2001 From: terrafrost Date: Sun, 26 May 2019 10:28:21 -0500 Subject: [PATCH 3/4] Tests/X509: fix for last unit test --- tests/Unit/File/X509/X509Test.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/Unit/File/X509/X509Test.php b/tests/Unit/File/X509/X509Test.php index 6600872b..60509a68 100644 --- a/tests/Unit/File/X509/X509Test.php +++ b/tests/Unit/File/X509/X509Test.php @@ -673,10 +673,11 @@ IOkKcGQRCMha8X2e7GmlpdWC1ycenlbN0nbVeSv3JUMcafC4+Q== $this->assertTrue($x509->validateDate('Nov 22, 2012')); } - public function testLongTag() + public function testLongTagOnBadCert() { + // the problem with this cert is that it'd cause an infinite loop $x509 = new File_X509(); - $r = $x509->loadX509('-----BEGIN CERTIFICATE----- + $r = @$x509->loadX509('-----BEGIN CERTIFICATE----- MIIBjDCCATGgAwIBAgIJAJSiNCIEEiyyMAoGCCqGSM49BAMCMA0xCzAJBgNVBAMM AkNBMB4XDTE5MDUwOTAzMTUzMFoXDTE5MDYwODAzMTUzMFowDTELMAkGA1UEAwwC Q0FNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUU4K0R0TDM0Syt0 @@ -688,6 +689,6 @@ B2R6AB6/yrkwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAgNJADBGAiEA6ZB6 A9bhRA0cVk7bAEU2c44CYg== -----END CERTIFICATE-----'); - $this->assertInternalType('array', $r); + $this->assertFalse($r); } } From 6fa2174fff7ffdc6aab63ea1c75a4108910ac1ac Mon Sep 17 00:00:00 2001 From: terrafrost Date: Sun, 26 May 2019 10:29:15 -0500 Subject: [PATCH 4/4] Tests/X509: update unit test to work on 2.0 --- tests/Unit/File/X509/X509Test.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Unit/File/X509/X509Test.php b/tests/Unit/File/X509/X509Test.php index fe267d18..d655a392 100644 --- a/tests/Unit/File/X509/X509Test.php +++ b/tests/Unit/File/X509/X509Test.php @@ -740,7 +740,7 @@ IOkKcGQRCMha8X2e7GmlpdWC1ycenlbN0nbVeSv3JUMcafC4+Q== public function testLongTagOnBadCert() { // the problem with this cert is that it'd cause an infinite loop - $x509 = new File_X509(); + $x509 = new X509(); $r = @$x509->loadX509('-----BEGIN CERTIFICATE----- MIIBjDCCATGgAwIBAgIJAJSiNCIEEiyyMAoGCCqGSM49BAMCMA0xCzAJBgNVBAMM AkNBMB4XDTE5MDUwOTAzMTUzMFoXDTE5MDYwODAzMTUzMFowDTELMAkGA1UEAwwC