|
|
- From 391511ccaaf0050970dfbe95bf2df1bcf6c33440 Mon Sep 17 00:00:00 2001
- From: "Miss Islington (bot)"
- <31488909+miss-islington@users.noreply.github.com>
- Date: Wed, 17 Jul 2019 10:02:05 -0700
- Subject: [PATCH] bpo-37461: Fix infinite loop in parsing of specially crafted
- email headers (GH-14794)
-
- * bpo-37461: Fix infinite loop in parsing of specially crafted email headers.
-
- Some crafted email header would cause the get_parameter method to run in an
- infinite loop causing a DoS attack surface when parsing those headers. This
- patch fixes that by making sure the DQUOTE character is handled to prevent
- going into an infinite loop.
- (cherry picked from commit a4a994bd3e619cbaff97610a1cee8ffa87c672f5)
-
- Co-authored-by: Abhilash Raj <maxking@users.noreply.github.com>
- ---
- Lib/email/_header_value_parser.py | 3 +++
- Lib/test/test_email/test__header_value_parser.py | 7 +++++++
- .../next/Security/2019-07-16-08-11-00.bpo-37461.1Ahz7O.rst | 2 ++
- 3 files changed, 12 insertions(+)
- create mode 100644 Misc/NEWS.d/next/Security/2019-07-16-08-11-00.bpo-37461.1Ahz7O.rst
-
- --- a/Lib/email/_header_value_parser.py
- +++ b/Lib/email/_header_value_parser.py
- @@ -2387,6 +2387,9 @@ def get_parameter(value):
- while value:
- if value[0] in WSP:
- token, value = get_fws(value)
- + elif value[0] == '"':
- + token = ValueTerminal('"', 'DQUOTE')
- + value = value[1:]
- else:
- token, value = get_qcontent(value)
- v.append(token)
- --- a/Lib/test/test_email/test__header_value_parser.py
- +++ b/Lib/test/test_email/test__header_value_parser.py
- @@ -2621,6 +2621,13 @@ class Test_parse_mime_parameters(TestPar
- # Defects are apparent missing *0*, and two 'out of sequence'.
- [errors.InvalidHeaderDefect]*3),
-
- + # bpo-37461: Check that we don't go into an infinite loop.
- + 'extra_dquote': (
- + 'r*="\'a\'\\"',
- + ' r="\\""',
- + 'r*=\'a\'"',
- + [('r', '"')],
- + [errors.InvalidHeaderDefect]*2),
- }
-
- @parameterize
- --- /dev/null
- +++ b/Misc/NEWS.d/next/Security/2019-07-16-08-11-00.bpo-37461.1Ahz7O.rst
- @@ -0,0 +1,2 @@
- +Fix an inifite loop when parsing specially crafted email headers. Patch by
- +Abhilash Raj.
|