-
Notifications
You must be signed in to change notification settings - Fork 506
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix CVE-2022-45061, referenced as python/cpython#98433 patch taken from python/cpython@064ec20 Signed-off-by: Omkar <omkarpatil10.93@gmail.com> Signed-off-by: Steve Sakoman <steve@sakoman.com>
- Loading branch information
1 parent
e2db40c
commit 4498ca9
Showing
2 changed files
with
101 additions
and
0 deletions.
There are no files selected for viewing
100 changes: 100 additions & 0 deletions
100
meta/recipes-devtools/python/files/CVE-2022-45061.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
From 064ec20bf7a181ba5fa961aaa12973812aa6ca5d Mon Sep 17 00:00:00 2001 | ||
From: "Miss Islington (bot)" | ||
<31488909+miss-islington@users.noreply.github.com> | ||
Date: Mon, 7 Nov 2022 18:57:10 -0800 | ||
Subject: [PATCH] [3.11] gh-98433: Fix quadratic time idna decoding. (GH-99092) | ||
(GH-99222) | ||
|
||
There was an unnecessary quadratic loop in idna decoding. This restores | ||
the behavior to linear. | ||
|
||
(cherry picked from commit d315722564927c7202dd6e111dc79eaf14240b0d) | ||
|
||
(cherry picked from commit a6f6c3a3d6f2b580f2d87885c9b8a9350ad7bf15) | ||
|
||
Co-authored-by: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | ||
Co-authored-by: Gregory P. Smith <greg@krypto.org> | ||
|
||
CVE: CVE-2022-45061 | ||
Upstream-Status: Backport [https://github.com/python/cpython/pull/99231/commits/064ec20bf7a181ba5fa961aaa12973812aa6ca5d] | ||
Signed-off-by: Omkar Patil <Omkar.Patil@kpit.com> | ||
|
||
--- | ||
Lib/encodings/idna.py | 32 +++++++++---------- | ||
Lib/test/test_codecs.py | 6 ++++ | ||
...2-11-04-09-29-36.gh-issue-98433.l76c5G.rst | 6 ++++ | ||
3 files changed, 27 insertions(+), 17 deletions(-) | ||
create mode 100644 Misc/NEWS.d/next/Security/2022-11-04-09-29-36.gh-issue-98433.l76c5G.rst | ||
|
||
diff --git a/Lib/encodings/idna.py b/Lib/encodings/idna.py | ||
index ea4058512fe3..bf98f513366b 100644 | ||
--- a/Lib/encodings/idna.py | ||
+++ b/Lib/encodings/idna.py | ||
@@ -39,23 +39,21 @@ def nameprep(label): | ||
|
||
# Check bidi | ||
RandAL = [stringprep.in_table_d1(x) for x in label] | ||
- for c in RandAL: | ||
- if c: | ||
- # There is a RandAL char in the string. Must perform further | ||
- # tests: | ||
- # 1) The characters in section 5.8 MUST be prohibited. | ||
- # This is table C.8, which was already checked | ||
- # 2) If a string contains any RandALCat character, the string | ||
- # MUST NOT contain any LCat character. | ||
- if any(stringprep.in_table_d2(x) for x in label): | ||
- raise UnicodeError("Violation of BIDI requirement 2") | ||
- | ||
- # 3) If a string contains any RandALCat character, a | ||
- # RandALCat character MUST be the first character of the | ||
- # string, and a RandALCat character MUST be the last | ||
- # character of the string. | ||
- if not RandAL[0] or not RandAL[-1]: | ||
- raise UnicodeError("Violation of BIDI requirement 3") | ||
+ if any(RandAL): | ||
+ # There is a RandAL char in the string. Must perform further | ||
+ # tests: | ||
+ # 1) The characters in section 5.8 MUST be prohibited. | ||
+ # This is table C.8, which was already checked | ||
+ # 2) If a string contains any RandALCat character, the string | ||
+ # MUST NOT contain any LCat character. | ||
+ if any(stringprep.in_table_d2(x) for x in label): | ||
+ raise UnicodeError("Violation of BIDI requirement 2") | ||
+ # 3) If a string contains any RandALCat character, a | ||
+ # RandALCat character MUST be the first character of the | ||
+ # string, and a RandALCat character MUST be the last | ||
+ # character of the string. | ||
+ if not RandAL[0] or not RandAL[-1]: | ||
+ raise UnicodeError("Violation of BIDI requirement 3") | ||
|
||
return label | ||
|
||
diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py | ||
index d1faf0126c1e..37ade7d80d02 100644 | ||
--- a/Lib/test/test_codecs.py | ||
+++ b/Lib/test/test_codecs.py | ||
@@ -1532,6 +1532,12 @@ def test_builtin_encode(self): | ||
self.assertEqual("pyth\xf6n.org".encode("idna"), b"xn--pythn-mua.org") | ||
self.assertEqual("pyth\xf6n.org.".encode("idna"), b"xn--pythn-mua.org.") | ||
|
||
+ def test_builtin_decode_length_limit(self): | ||
+ with self.assertRaisesRegex(UnicodeError, "too long"): | ||
+ (b"xn--016c"+b"a"*1100).decode("idna") | ||
+ with self.assertRaisesRegex(UnicodeError, "too long"): | ||
+ (b"xn--016c"+b"a"*70).decode("idna") | ||
+ | ||
def test_stream(self): | ||
r = codecs.getreader("idna")(io.BytesIO(b"abc")) | ||
r.read(3) | ||
diff --git a/Misc/NEWS.d/next/Security/2022-11-04-09-29-36.gh-issue-98433.l76c5G.rst b/Misc/NEWS.d/next/Security/2022-11-04-09-29-36.gh-issue-98433.l76c5G.rst | ||
new file mode 100644 | ||
index 000000000000..5185fac2e29d | ||
--- /dev/null | ||
+++ b/Misc/NEWS.d/next/Security/2022-11-04-09-29-36.gh-issue-98433.l76c5G.rst | ||
@@ -0,0 +1,6 @@ | ||
+The IDNA codec decoder used on DNS hostnames by :mod:`socket` or :mod:`asyncio` | ||
+related name resolution functions no longer involves a quadratic algorithm. | ||
+This prevents a potential CPU denial of service if an out-of-spec excessive | ||
+length hostname involving bidirectional characters were decoded. Some protocols | ||
+such as :mod:`urllib` http ``3xx`` redirects potentially allow for an attacker | ||
+to supply such a name. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters