Compare commits

...

10 Commits

Author SHA1 Message Date
openeuler-ci-bot
c45a28666f
!21 [sync] PR-19: Fix CVE-2024-28102
From: @openeuler-sync-bot 
Reviewed-by: @cherry530 
Signed-off-by: @cherry530
2024-03-19 01:49:39 +00:00
starlet-dx
24bf999a26 Fix CVE-2024-28102
(cherry picked from commit ae0980184c1529bb57d2731cc68e0d6fc43dccfe)
2024-03-08 11:08:51 +08:00
openeuler-ci-bot
825ace9806
!14 Fix CVE-2023-6681
From: @starlet-dx 
Reviewed-by: @cherry530 
Signed-off-by: @cherry530
2023-12-29 01:46:03 +00:00
starlet-dx
a31b2cb002 Fix CVE-2023-6681 2023-12-29 09:36:08 +08:00
openeuler-ci-bot
5b0e28b82a
!8 Upgrade to latest release [python-jwcrypto -> 1.5.0]
From: @Jason_828e 
Reviewed-by: @yangzhao_kl 
Signed-off-by: @yangzhao_kl
2023-07-12 08:48:27 +00:00
chenzixuan
6dfc6f8a06 update version to 1.5.0 2023-07-04 20:50:58 +08:00
openeuler-ci-bot
c5aa482dc8
!7 Modify compliance irregularities
From: @lauk001 
Reviewed-by: @shinwell_hu 
Signed-off-by: @shinwell_hu
2022-12-19 12:48:24 +00:00
lauk001
25caefe3b9 Modifying the readme 2022-12-09 15:07:29 +08:00
openeuler-ci-bot
00fb86a101
!6 Update package
From: @liqiuyu123 
Reviewed-by: @yangzhao_kl 
Signed-off-by: @yangzhao_kl
2022-12-08 08:15:18 +00:00
liqiuyu123
4cb2018528 update version to 1.4.2 2022-12-02 14:15:50 +08:00
5 changed files with 167 additions and 6 deletions

67
CVE-2023-6681.patch Normal file
View File

@ -0,0 +1,67 @@
From d2655d370586cb830e49acfb450f87598da60be8 Mon Sep 17 00:00:00 2001
From: Simo Sorce <simo@redhat.com>
Date: Thu, 7 Dec 2023 12:49:07 -0500
Subject: [PATCH] Fix potential DoS issue with p2c header
Unbounded p2c headers may be used to cause an application that accept
PBES algorithms to spend alot of resources running PBKDF2 with a very
high number of iterations.
Clamp the default maximum to 16384 (double the default of 8192).
An application that wants to use more iterations will have to chenge the
jwa default max.
Fixes CVE-2023-6681
Signed-off-by: Simo Sorce <simo@redhat.com>
---
jwcrypto/jwa.py | 5 +++++
jwcrypto/tests.py | 12 ++++++++++++
2 files changed, 17 insertions(+)
diff --git a/jwcrypto/jwa.py b/jwcrypto/jwa.py
index de7a79f..ca4568e 100644
--- a/jwcrypto/jwa.py
+++ b/jwcrypto/jwa.py
@@ -28,6 +28,8 @@
# Implements RFC 7518 - JSON Web Algorithms (JWA)
+default_max_pbkdf2_iterations = 16384
+
class JWAAlgorithm(metaclass=ABCMeta):
@@ -588,6 +590,9 @@ def __init__(self):
self.aeskwmap = {128: _A128KW, 192: _A192KW, 256: _A256KW}
def _get_key(self, alg, key, p2s, p2c):
+ if p2c > default_max_pbkdf2_iterations:
+ raise ValueError('Invalid p2c value, too large')
+
if not isinstance(key, JWK):
# backwards compatibility for old interface
if isinstance(key, bytes):
diff --git a/jwcrypto/tests.py b/jwcrypto/tests.py
index 6069fab..bb2ff10 100644
--- a/jwcrypto/tests.py
+++ b/jwcrypto/tests.py
@@ -2099,6 +2099,18 @@ def test_pbes2_hs256_aeskw_custom_params(self):
key = jwk.JWK.from_password('password')
self.assertRaises(ValueError, enc.add_recipient, key)
+ # Test p2c iteration checks
+ maxiter = jwa.default_max_pbkdf2_iterations
+ p2cenc = jwe.JWE(plaintext='plain',
+ protected={"alg": "PBES2-HS256+A128KW",
+ "enc": "A256CBC-HS512",
+ "p2c": maxiter + 1,
+ "p2s": base64url_encode("A" * 16)})
+ with self.assertRaisesRegex(ValueError, 'too large'):
+ p2cenc.add_recipient(key)
+ jwa.default_max_pbkdf2_iterations += 2
+ p2cenc.add_recipient(key)
+
class JWATests(unittest.TestCase):
def test_jwa_create(self):

75
CVE-2024-28102.patch Normal file
View File

@ -0,0 +1,75 @@
From 90477a3b6e73da69740e00b8161f53fea19b831f Mon Sep 17 00:00:00 2001
From: Simo Sorce <simo@redhat.com>
Date: Tue, 5 Mar 2024 16:57:17 -0500
Subject: [PATCH] Address potential DoS with high compression ratio
Fixes CVE-2024-28102
Signed-off-by: Simo Sorce <simo@redhat.com>
---
jwcrypto/jwe.py | 7 +++++++
jwcrypto/tests.py | 26 ++++++++++++++++++++++++++
2 files changed, 33 insertions(+)
diff --git a/jwcrypto/jwe.py b/jwcrypto/jwe.py
index 9412881..5df500b 100644
--- a/jwcrypto/jwe.py
+++ b/jwcrypto/jwe.py
@@ -10,6 +10,9 @@
from jwcrypto.jwa import JWA
from jwcrypto.jwk import JWKSet
+# Limit the amount of data we are willing to decompress by default.
+default_max_compressed_size = 256 * 1024
+
# RFC 7516 - 4.1
# name: (description, supported?)
@@ -422,6 +425,10 @@ def _decrypt(self, key, ppe):
compress = jh.get('zip', None)
if compress == 'DEF':
+ if len(data) > default_max_compressed_size:
+ raise InvalidJWEData(
+ 'Compressed data exceeds maximum allowed'
+ 'size' + f' ({default_max_compressed_size})')
self.plaintext = zlib.decompress(data, -zlib.MAX_WBITS)
elif compress is None:
self.plaintext = data
diff --git a/jwcrypto/tests.py b/jwcrypto/tests.py
index bb2ff10..59049f8 100644
--- a/jwcrypto/tests.py
+++ b/jwcrypto/tests.py
@@ -2111,6 +2111,32 @@ def test_pbes2_hs256_aeskw_custom_params(self):
jwa.default_max_pbkdf2_iterations += 2
p2cenc.add_recipient(key)
+ def test_jwe_decompression_max(self):
+ key = jwk.JWK(kty='oct', k=base64url_encode(b'A' * (128 // 8)))
+ payload = '{"u": "' + "u" * 400000000 + '", "uu":"' \
+ + "u" * 400000000 + '"}'
+ protected_header = {
+ "alg": "A128KW",
+ "enc": "A128GCM",
+ "typ": "JWE",
+ "zip": "DEF",
+ }
+ enc = jwe.JWE(payload.encode('utf-8'),
+ recipient=key,
+ protected=protected_header).serialize(compact=True)
+ with self.assertRaises(jwe.InvalidJWEData):
+ check = jwe.JWE()
+ check.deserialize(enc)
+ check.decrypt(key)
+
+ defmax = jwe.default_max_compressed_size
+ jwe.default_max_compressed_size = 1000000000
+ # ensure we can eraise the limit and decrypt
+ check = jwe.JWE()
+ check.deserialize(enc)
+ check.decrypt(key)
+ jwe.default_max_compressed_size = defmax
+
class JWATests(unittest.TestCase):
def test_jwa_create(self):

Binary file not shown.

BIN
jwcrypto-1.5.0.tar.gz Normal file

Binary file not shown.

View File

@ -1,11 +1,15 @@
%global _empty_manifest_terminate_build 0
Name: python-jwcrypto
Version: 1.3.1
Release: 1
Version: 1.5.0
Release: 3
Summary: Implementation of JOSE Web standards
License: LGPLv3+
License: LGPL-3.0-or-later
URL: https://github.com/latchset/jwcrypto
Source0: https://files.pythonhosted.org/packages/7c/e9/340e49ec79bcc80b822b87c3bb6de5336bef611c2f11e2c638a1d055e9f8/jwcrypto-1.3.1.tar.gz
Source0: https://files.pythonhosted.org/packages/ed/72/b9289ee27d228fc7cae5c83d1c640de2a7cc0621805aa839ba239d6ef8fc/jwcrypto-1.5.0.tar.gz
# https://github.com/latchset/jwcrypto/commit/d2655d370586cb830e49acfb450f87598da60be8
Patch0: CVE-2023-6681.patch
# https://github.com/latchset/jwcrypto/commit/90477a3b6e73da69740e00b8161f53fea19b831f
Patch1: CVE-2024-28102.patch
BuildArch: noarch
@ -14,7 +18,7 @@ Implements JWK, JWS, JWE specifications with python-cryptography
%package -n python3-jwcrypto
Summary: Implementation of JOSE Web standards
Provides: python-jwcrypto
Provides: python-jwcrypto = %{version}-%{release}
BuildRequires: python3-devel
BuildRequires: python3-setuptools
%description -n python3-jwcrypto
@ -27,7 +31,7 @@ Provides: python3-jwcrypto-doc
Implements JWK, JWS, JWE specifications with python-cryptography
%prep
%autosetup -n jwcrypto-1.3.1
%autosetup -n jwcrypto-%{version} -p1
%build
%py3_build
@ -67,6 +71,21 @@ mv %{buildroot}/doclist.lst .
%{_docdir}/*
%changelog
* Fri Mar 08 2024 yaoxin <yao_xin001@hoperun.com> - 1.5.0-3
- Fix CVE-2024-28102
* Fri Dec 29 2023 yaoxin <yao_xin001@hoperun.com> - 1.5.0-2
- Fix CVE-2023-6681
* Tue Jul 04 2023 chenzixuan <chenzixuan@kylinos.cn> - 1.5.0-1
- Update package to version 1.5.0
* Fri Dec 09 2022 liukuo <liukuo@kylinos.cn> - 1.4.2-2
- License compliance rectification
* Fri Dec 02 2022 liqiuyu <liqiuyu@kylinos.cn> - 1.4.2-1
- Update package to version 1.4.2
* Tue Aug 02 2022 liqiuyu <liqiuyu@kylinos.cn> - 1.3.1-1
- Upgrade to version 1.3.1