Compare commits

...

10 Commits

Author SHA1 Message Date
openeuler-ci-bot
2f5d29e969
!41 Fix CVE-2024-52804
From: @yajieli 
Reviewed-by: @lyn1001 
Signed-off-by: @lyn1001
2024-11-28 08:10:12 +00:00
liyajie
af3591c9b2 Fix CVE-2024-52804 2024-11-26 21:49:56 +08:00
openeuler-ci-bot
f686c1c814
!26 Upgrade python-tornad version to 6.3.3
From: @wen-minjuan 
Reviewed-by: @lyn1001 
Signed-off-by: @lyn1001
2023-10-13 09:04:00 +00:00
wen-minjuan
fadc9d6de4 Upgrade version to 6.3.3-1 2023-10-13 16:24:31 +08:00
openeuler-ci-bot
238326ea1d
!25 Upgrade version to 6.3.2
From: @ysliuci 
Reviewed-by: @caodongxia 
Signed-off-by: @caodongxia
2023-07-31 03:46:40 +00:00
ysliu
291296c25f Upgrade version to 6.3.2 2023-07-13 16:34:33 +08:00
openeuler-ci-bot
635bea07ad
!22 [sync] PR-18: Fix CVE-2023-28370
From: @openeuler-sync-bot 
Reviewed-by: @lyn1001 
Signed-off-by: @lyn1001
2023-06-16 06:03:05 +00:00
starlet-dx
9ca6f4bcfd Fix CVE-2023-28370
(cherry picked from commit 3aa701180fb44fba66ac80b1137b798faa4032f9)
2023-06-16 11:05:36 +08:00
openeuler-ci-bot
4b9514f727 !8 upgrade version to 6.1 for python-tornado
From: @yaozc701
Reviewed-by: 
Signed-off-by:
2021-07-29 11:59:21 +00:00
yaozc701
412e0d36ba upgrade version to 6.1 2021-07-27 20:40:04 +08:00
6 changed files with 210 additions and 43 deletions

138
CVE-2024-52804.patch Normal file
View File

@ -0,0 +1,138 @@
From d5ba4a1695fbf7c6a3e54313262639b198291533 Mon Sep 17 00:00:00 2001
From: Ben Darnell <ben@bendarnell.com>
Date: Thu, 21 Nov 2024 14:48:05 -0500
Subject: [PATCH] httputil: Fix quadratic performance of cookie parsing
Maliciously-crafted cookies can cause Tornado to
spend an unreasonable amount of CPU time and block
the event loop.
This change replaces the quadratic algorithm with
a more efficient one. The implementation is copied
from the Python 3.13 standard library (the
previous one was from Python 3.5).
Fixes CVE-2024-52804
See CVE-2024-7592 for a similar vulnerability in cpython.
Thanks to github.com/kexinoh for the report.
---
tornado/httputil.py | 38 ++++++++---------------------
tornado/test/httputil_test.py | 46 +++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+), 28 deletions(-)
diff --git a/tornado/httputil.py b/tornado/httputil.py
index 9ce992d82b..ebdc8059c1 100644
--- a/tornado/httputil.py
+++ b/tornado/httputil.py
@@ -1057,15 +1057,20 @@ def qs_to_qsl(qs: Dict[str, List[AnyStr]]) -> Iterable[Tuple[str, AnyStr]]:
yield (k, v)
-_OctalPatt = re.compile(r"\\[0-3][0-7][0-7]")
-_QuotePatt = re.compile(r"[\\].")
-_nulljoin = "".join
+_unquote_sub = re.compile(r"\\(?:([0-3][0-7][0-7])|(.))").sub
+
+
+def _unquote_replace(m: re.Match) -> str:
+ if m[1]:
+ return chr(int(m[1], 8))
+ else:
+ return m[2]
def _unquote_cookie(s: str) -> str:
"""Handle double quotes and escaping in cookie values.
- This method is copied verbatim from the Python 3.5 standard
+ This method is copied verbatim from the Python 3.13 standard
library (http.cookies._unquote) so we don't have to depend on
non-public interfaces.
"""
@@ -1086,30 +1091,7 @@ def _unquote_cookie(s: str) -> str:
# \012 --> \n
# \" --> "
#
- i = 0
- n = len(s)
- res = []
- while 0 <= i < n:
- o_match = _OctalPatt.search(s, i)
- q_match = _QuotePatt.search(s, i)
- if not o_match and not q_match: # Neither matched
- res.append(s[i:])
- break
- # else:
- j = k = -1
- if o_match:
- j = o_match.start(0)
- if q_match:
- k = q_match.start(0)
- if q_match and (not o_match or k < j): # QuotePatt matched
- res.append(s[i:k])
- res.append(s[k + 1])
- i = k + 2
- else: # OctalPatt matched
- res.append(s[i:j])
- res.append(chr(int(s[j + 1 : j + 4], 8)))
- i = j + 4
- return _nulljoin(res)
+ return _unquote_sub(_unquote_replace, s)
def parse_cookie(cookie: str) -> Dict[str, str]:
diff --git a/tornado/test/httputil_test.py b/tornado/test/httputil_test.py
index 6d618839e0..975900aa9c 100644
--- a/tornado/test/httputil_test.py
+++ b/tornado/test/httputil_test.py
@@ -560,3 +560,49 @@ def test_invalid_cookies(self):
self.assertEqual(
parse_cookie(" = b ; ; = ; c = ; "), {"": "b", "c": ""}
)
+
+ def test_unquote(self):
+ # Copied from
+ # https://github.com/python/cpython/blob/dc7a2b6522ec7af41282bc34f405bee9b306d611/Lib/test/test_http_cookies.py#L62
+ cases = [
+ (r'a="b=\""', 'b="'),
+ (r'a="b=\\"', "b=\\"),
+ (r'a="b=\="', "b=="),
+ (r'a="b=\n"', "b=n"),
+ (r'a="b=\042"', 'b="'),
+ (r'a="b=\134"', "b=\\"),
+ (r'a="b=\377"', "b=\xff"),
+ (r'a="b=\400"', "b=400"),
+ (r'a="b=\42"', "b=42"),
+ (r'a="b=\\042"', "b=\\042"),
+ (r'a="b=\\134"', "b=\\134"),
+ (r'a="b=\\\""', 'b=\\"'),
+ (r'a="b=\\\042"', 'b=\\"'),
+ (r'a="b=\134\""', 'b=\\"'),
+ (r'a="b=\134\042"', 'b=\\"'),
+ ]
+ for encoded, decoded in cases:
+ with self.subTest(encoded):
+ c = parse_cookie(encoded)
+ self.assertEqual(c["a"], decoded)
+
+ def test_unquote_large(self):
+ # Adapted from
+ # https://github.com/python/cpython/blob/dc7a2b6522ec7af41282bc34f405bee9b306d611/Lib/test/test_http_cookies.py#L87
+ # Modified from that test because we handle semicolons differently from the stdlib.
+ #
+ # This is a performance regression test: prior to improvements in Tornado 6.4.2, this test
+ # would take over a minute with n= 100k. Now it runs in tens of milliseconds.
+ n = 100000
+ for encoded in r"\\", r"\134":
+ with self.subTest(encoded):
+ start = time.time()
+ data = 'a="b=' + encoded * n + '"'
+ value = parse_cookie(data)["a"]
+ end = time.time()
+ self.assertEqual(value[:3], "b=\\")
+ self.assertEqual(value[-3:], "\\\\\\")
+ self.assertEqual(len(value), n + 2)
+
+ # Very loose performance check to avoid false positives
+ self.assertLess(end - start, 1, "Test took too long")

View File

@ -1,13 +0,0 @@
diff --git a/tornado/test/runtests.py b/tornado/test/runtests.py
index d5bd769..e4f938d 100644
--- a/tornado/test/runtests.py
+++ b/tornado/test/runtests.py
@@ -137,6 +137,8 @@ def main():
# 2.7 and 3.2
warnings.filterwarnings("ignore", category=DeprecationWarning,
message="Please use assert.* instead")
+ warnings.filterwarnings("ignore", category=PendingDeprecationWarning,
+ message="Please use assert.* instead")
# Twisted 15.0.0 triggers some warnings on py3 with -bb.
warnings.filterwarnings("ignore", category=BytesWarning,
module=r"twisted\..*")

View File

@ -1,47 +1,94 @@
Name: python-tornado %global _empty_manifest_terminate_build 0
Version: 5.0.2 Name: python-tornado
Release: 7 Version: 6.3.3
Summary: a Python web framework and asynchronous networking library Release: 2
License: ASL 2.0 Summary: Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
URL: http://www.tornadoweb.org License: ASL 2.0
Source0: https://files.pythonhosted.org/packages/source/t/tornado/tornado-%{version}.tar.gz URL: http://www.tornadoweb.org/
Patch0: fix-erroneous-deprecation-warnings.patch Source0: https://files.pythonhosted.org/packages/source/t/tornado/tornado-%{version}.tar.gz
BuildRequires: python3-devel gcc Patch3000: CVE-2024-52804.patch
%description %description
Tornado is a Python web framework and asynchronous networking library, originally Tornado is an open source version of the scalable, non-blocking web server and tools.
developed at FriendFeed. By using non-blocking network I/O, Tornado can scale to
tens of thousands of open connections, making it ideal for long polling, WebSockets,
and other applications that require a long-lived connection to each user.
%package -n python3-tornado %package -n python3-tornado
Summary: a Python web framework and asynchronous networking library Summary: Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
Requires: python3-pycurl Provides: python-tornado
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-cffi
BuildRequires: python3-pycurl
BuildRequires: gcc
BuildRequires: gdb
%description -n python3-tornado %description -n python3-tornado
Tornado is a Python web framework and asynchronous networking library, originally Tornado is an open source version of the scalable, non-blocking web server and tools.
developed at FriendFeed. By using non-blocking network I/O, Tornado can scale to
tens of thousands of open connections, making it ideal for long polling, WebSockets, %package help
and other applications that require a long-lived connection to each user. Summary: Development documents and examples for tornado
Provides: python3-tornado-doc
%description help
Tornado is an open source version of the scalable, non-blocking web server and tools.
%prep %prep
%autosetup -n tornado-%{version} -p1 %autosetup -n tornado-%{version} -p1
%{__sed} -i.orig -e '/^#!\//, 1d' *py tornado/*.py tornado/*/*.py
%build %build
%py3_build %py3_build
%install %install
%py3_install %py3_install
install -d -m755 %{buildroot}/%{_pkgdocdir}
if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
pushd %{buildroot}
if [ -d usr/lib ]; then
find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/lib64 ]; then
find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/bin ]; then
find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/sbin ]; then
find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
fi
touch doclist.lst
if [ -d usr/share/man ]; then
find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
fi
popd
mv %{buildroot}/filelist.lst .
mv %{buildroot}/doclist.lst .
%files -n python3-tornado
%defattr(-,root,root) %files -n python3-tornado -f filelist.lst
%license LICENSE %dir %{python3_sitearch}/*
%doc README.rst
%{python3_sitearch}/* %files help -f doclist.lst
%{_docdir}/*
%changelog %changelog
* Tue Nov 26 2024 liyajie <liyajie15@h-partners.com> - 6.3.3-2
- Fix CVE-2024-52804
* Fri Oct 13 2023 wen-minjuan <mjwen@isoftstone.com> - 6.3.3-1
- Upgrade version to 6.3.3-1
* Thu Jul 13 2023 liuyongshuai <ysliuci@isoftstone.com> - 6.3.2-1
- Upgrade version to 6.3.2-1
* Fri Jun 16 2023 yaoxin <yao_xin001@hoperun.com> - 6.1-2
- Fix CVE-2023-28370
* Thu Jul 08 2021 yaozc701 <yaozc7@foxmail.com> - 6.1-1
- Upgrade version to 6.1
* Mon May 31 2021 huanghaitao <huanghaitao8@huawei.com> - 5.0.2-7 * Mon May 31 2021 huanghaitao <huanghaitao8@huawei.com> - 5.0.2-7
- Completing build dependencies - Completing build dependencies
@ -50,4 +97,3 @@ and other applications that require a long-lived connection to each user.
* Tue Dec 10 2019 openEuler Buildteam <buildteam@openeuler.org> - 5.0.2-5 * Tue Dec 10 2019 openEuler Buildteam <buildteam@openeuler.org> - 5.0.2-5
- Package init - Package init

View File

@ -1,4 +0,0 @@
version_control: github
src_repo: tornadoweb/tornado
tag_prefix: ^v
seperator: .

Binary file not shown.

BIN
tornado-6.3.3.tar.gz Normal file

Binary file not shown.