fix CVE-2024-22195

(cherry picked from commit 1e44895e838031c49e0ea54085a166e4ee93a147)
This commit is contained in:
JackWei 2024-01-23 15:07:12 +08:00 committed by openeuler-sync-bot
parent c1d732f720
commit 3b68907ff0
2 changed files with 89 additions and 41 deletions

View File

@ -0,0 +1,81 @@
From 8bb6ba37f691137655a44c2f5fa4096bcc7e81b0 Mon Sep 17 00:00:00 2001
From: Calum Hutton <calum.hutton@snyk.io>
Date: Thu, 26 Oct 2023 12:08:53 +0100
Subject: [PATCH] xmlattr filter disallows keys with spaces
Reference:https://github.com/pallets/jinja/commit/7dd3680e6eea0d77fde024763657aa4d884ddb23
Conflict:remove CHANGES.rst adpat _space_re
---
Jinja2-2.11.2/src/jinja2/filters.py | 24 ++++++++++++++++++------
Jinja2-2.11.2/tests/test_filters.py | 6 ++++++
2 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/Jinja2-2.11.2/src/jinja2/filters.py b/Jinja2-2.11.2/src/jinja2/filters.py
index 9741567..3230539 100644
--- a/Jinja2-2.11.2/src/jinja2/filters.py
+++ b/Jinja2-2.11.2/src/jinja2/filters.py
@@ -204,13 +204,15 @@ def do_lower(s):
"""Convert a value to lowercase."""
return soft_unicode(s).lower()
+_space_re = re.compile(r"\s", flags=re.ASCII)
@evalcontextfilter
def do_xmlattr(_eval_ctx, d, autospace=True):
"""Create an SGML/XML attribute string based on the items in a dict.
All values that are neither `none` nor `undefined` are automatically
escaped:
-
+ If any key contains a space, this fails with a ``ValueError``. Values that
+ are neither ``none`` nor ``undefined`` are automatically escaped.
.. sourcecode:: html+jinja
<ul{{ {'class': 'my_list', 'missing': none,
@@ -228,12 +230,22 @@ def do_xmlattr(_eval_ctx, d, autospace=True):
As you can see it automatically prepends a space in front of the item
if the filter returned something unless the second parameter is false.
+
+ .. versionchanged:: 3.1.3
+ Keys with spaces are not allowed.
"""
- rv = u" ".join(
- u'%s="%s"' % (escape(key), escape(value))
- for key, value in iteritems(d)
- if value is not None and not isinstance(value, Undefined)
- )
+ items = []
+
+ for key, value in d.items():
+ if value is None or isinstance(value, Undefined):
+ continue
+
+ if _space_re.search(key) is not None:
+ raise ValueError(f"Spaces are not allowed in attributes: '{key}'")
+
+ items.append(f'{escape(key)}="{escape(value)}"')
+
+ rv = " ".join(items)
if autospace and rv:
rv = u" " + rv
if _eval_ctx.autoescape:
diff --git a/Jinja2-2.11.2/tests/test_filters.py b/Jinja2-2.11.2/tests/test_filters.py
index 388c346..6e697f3 100644
--- a/Jinja2-2.11.2/tests/test_filters.py
+++ b/Jinja2-2.11.2/tests/test_filters.py
@@ -440,6 +440,12 @@ class TestFilter(object):
assert 'bar="23"' in out
assert 'blub:blub="&lt;?&gt;"' in out
+ def test_xmlattr_key_with_spaces(self, env):
+ with pytest.raises(ValueError, match="Spaces are not allowed"):
+ env.from_string(
+ "{{ {'src=1 onerror=alert(1)': 'my_class'}|xmlattr }}"
+ ).render()
+
def test_sort1(self, env):
tmpl = env.from_string("{{ [2, 3, 1]|sort }}|{{ [2, 3, 1]|sort(true) }}")
assert tmpl.render() == "[1, 2, 3]|[3, 2, 1]"
--
2.33.0

View File

@ -2,13 +2,14 @@
Name: python-jinja2 Name: python-jinja2
Version: 2.11.2 Version: 2.11.2
Release: 3 Release: 4
Summary: A full-featured template engine for Python Summary: A full-featured template engine for Python
License: BSD License: BSD
URL: http://jinja.pocoo.org/ URL: http://jinja.pocoo.org/
Source0: https://files.pythonhosted.org/packages/source/J/Jinja2/Jinja2-%{version}.tar.gz Source0: https://files.pythonhosted.org/packages/source/J/Jinja2/Jinja2-%{version}.tar.gz
Patch6000: backport-CVE-2020-28493.patch Patch6000: backport-CVE-2020-28493.patch
Patch6001: backport-CVE-2024-22195.patch
Patch9000: huawei-replace-instances-of-the-older-style-tmpdir-fixture.patch Patch9000: huawei-replace-instances-of-the-older-style-tmpdir-fixture.patch
@ -20,19 +21,6 @@ templating system but extends it with an expressive language that gives template
a more powerful set of tools. On top of that it adds sandboxed execution and optional a more powerful set of tools. On top of that it adds sandboxed execution and optional
automatic escaping for applications where security is important. automatic escaping for applications where security is important.
%if %{with python2}
%package -n python2-jinja2
Summary: General purpose template engine for python2
BuildRequires: python2-markupsafe python2-babel
BuildRequires: python2-pytest python2-devel python2-setuptools
Requires: python2-babel python2-markupsafe python2-setuptools
%{?python_provide:%python_provide python2-jinja2}
%description -n python2-jinja2
This package is the python2 version of python-jinja2.
%endif
%package -n python3-jinja2 %package -n python3-jinja2
Summary: General purpose template engine for python3 Summary: General purpose template engine for python3
@ -55,49 +43,22 @@ sed -i 's|\r$||g' Jinja2-%{version}/LICENSE.rst
cp -a Jinja2-%{version} python3 cp -a Jinja2-%{version} python3
%build %build
%if %{with python2}
pushd Jinja2-%{version}
%py2_build
popd
%endif
pushd python3 pushd python3
%py3_build %py3_build
popd popd
%install %install
%if %{with python2}
pushd Jinja2-%{version}
%py2_install
#valid on python above 3.6, if not removed, installation will fail
rm %{buildroot}%{python2_sitelib}/jinja2/asyncsupport.py
rm %{buildroot}%{python2_sitelib}/jinja2/asyncfilters.py
popd
%endif
pushd python3 pushd python3
%py3_install %py3_install
popd popd
%check %check
%if %{with python2}
pushd Jinja2-%{version}
PYTHONPATH=$(pwd)/src %{__python2} -m pytest tests
popd
%endif
pushd python3 pushd python3
PYTHONPATH=$(pwd)/src %{__python3} -m pytest tests PYTHONPATH=$(pwd)/src %{__python3} -m pytest tests
popd popd
%if %{with python2}
%files -n python2-jinja2
%license Jinja2-%{version}/LICENSE.rst
%{python2_sitelib}/jinja2
%{python2_sitelib}/Jinja2*-info
%endif
%files -n python3-jinja2 %files -n python3-jinja2
%license Jinja2-%{version}/LICENSE.rst %license Jinja2-%{version}/LICENSE.rst
%{python3_sitelib}/jinja2 %{python3_sitelib}/jinja2
@ -108,6 +69,12 @@ popd
%doc Jinja2-%{version}/ext Jinja2-%{version}/examples %doc Jinja2-%{version}/ext Jinja2-%{version}/examples
%changelog %changelog
* Mon Jan 22 2024 weihaohao <weihaohao2@huawei.com> - 2.11.2-4
Type:CVE
CVE:CVE-2024-22195
SUG:NA
DESC:fix CVE-2024-22195,remove python2
* Sat Feb 18 2023 zhuofeng <zhuofeng2@huawei.com> - 2.11.2-3 * Sat Feb 18 2023 zhuofeng <zhuofeng2@huawei.com> - 2.11.2-3
- Type:bugfix - Type:bugfix
- CVE:NA - CVE:NA