-
-
Notifications
You must be signed in to change notification settings - Fork 30.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
There was an unnecessary quadratic loop in idna decoding. This restores the behavior to linear. This also adds an early length check in IDNA decoding to outright reject huge inputs early on given the ultimate result is defined to be 63 or fewer characters.
- Loading branch information
Showing
3 changed files
with
45 additions
and
17 deletions.
There are no files selected for viewing
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
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
14 changes: 14 additions & 0 deletions
14
Misc/NEWS.d/next/Security/2022-11-04-09-29-36.gh-issue-98433.l76c5G.rst
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,14 @@ | ||
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. | ||
|
||
Individual labels within an IDNA encoded DNS name will now raise an error early | ||
during IDNA decoding if they are longer than 1024 unicode characters given that | ||
each decoded DNS label must be 63 or fewer characters and the entire decoded | ||
DNS name is limited to 255. Only an application presenting a hostname or label | ||
consisting primarily of :rfc:`3454` section 3.1 "Nothing" characters to be | ||
removed would run into of this new limit. See also :rfc:`5894` section 6 and | ||
:rfc:`3491`. |