i8c-stream-3.9
changed/i8c-stream-3.9/python3x-pip-20.2.4-8.module+el8.9.0+19644+d68f775d
parent
b3eb2e79c8
commit
d5f71ccee4
@ -0,0 +1,42 @@
|
||||
From 6d2dcef3427b96c36ddfebf217f774a2c5ecad38 Mon Sep 17 00:00:00 2001
|
||||
From: Lumir Balhar <lbalhar@redhat.com>
|
||||
Date: Wed, 30 Jun 2021 09:27:07 +0200
|
||||
Subject: [PATCH] CVE-2021-33503
|
||||
|
||||
---
|
||||
src/pip/_vendor/urllib3/util/url.py | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/pip/_vendor/urllib3/util/url.py b/src/pip/_vendor/urllib3/util/url.py
|
||||
index 5fe37a7..addaeb7 100644
|
||||
--- a/src/pip/_vendor/urllib3/util/url.py
|
||||
+++ b/src/pip/_vendor/urllib3/util/url.py
|
||||
@@ -63,12 +63,12 @@ IPV6_ADDRZ_RE = re.compile("^" + IPV6_ADDRZ_PAT + "$")
|
||||
BRACELESS_IPV6_ADDRZ_RE = re.compile("^" + IPV6_ADDRZ_PAT[2:-2] + "$")
|
||||
ZONE_ID_RE = re.compile("(" + ZONE_ID_PAT + r")\]$")
|
||||
|
||||
-SUBAUTHORITY_PAT = (u"^(?:(.*)@)?(%s|%s|%s)(?::([0-9]{0,5}))?$") % (
|
||||
+_HOST_PORT_PAT = ("^(%s|%s|%s)(?::([0-9]{0,5}))?$") % (
|
||||
REG_NAME_PAT,
|
||||
IPV4_PAT,
|
||||
IPV6_ADDRZ_PAT,
|
||||
)
|
||||
-SUBAUTHORITY_RE = re.compile(SUBAUTHORITY_PAT, re.UNICODE | re.DOTALL)
|
||||
+_HOST_PORT_RE = re.compile(_HOST_PORT_PAT, re.UNICODE | re.DOTALL)
|
||||
|
||||
UNRESERVED_CHARS = set(
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-~"
|
||||
@@ -374,7 +374,9 @@ def parse_url(url):
|
||||
scheme = scheme.lower()
|
||||
|
||||
if authority:
|
||||
- auth, host, port = SUBAUTHORITY_RE.match(authority).groups()
|
||||
+ auth, _, host_port = authority.rpartition("@")
|
||||
+ auth = auth or None
|
||||
+ host, port = _HOST_PORT_RE.match(host_port).groups()
|
||||
if auth and normalize_uri:
|
||||
auth = _encode_invalid_chars(auth, USERINFO_CHARS)
|
||||
if port == "":
|
||||
--
|
||||
2.31.1
|
||||
|
@ -0,0 +1,34 @@
|
||||
From d135e45152a88b896b1d3e8770d5d59f694c2419 Mon Sep 17 00:00:00 2001
|
||||
From: Lumir Balhar <lbalhar@redhat.com>
|
||||
Date: Tue, 8 Jun 2021 10:08:49 +0200
|
||||
Subject: [PATCH] CVE-2021-3572
|
||||
|
||||
---
|
||||
src/pip/_internal/vcs/git.py | 10 ++++++++--
|
||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/pip/_internal/vcs/git.py b/src/pip/_internal/vcs/git.py
|
||||
index a9c7fb6..b38625e 100644
|
||||
--- a/src/pip/_internal/vcs/git.py
|
||||
+++ b/src/pip/_internal/vcs/git.py
|
||||
@@ -142,9 +142,15 @@ class Git(VersionControl):
|
||||
pass
|
||||
|
||||
refs = {}
|
||||
- for line in output.strip().splitlines():
|
||||
+ # NOTE: We do not use splitlines here since that would split on other
|
||||
+ # unicode separators, which can be maliciously used to install a
|
||||
+ # different revision.
|
||||
+ for line in output.strip().split("\n"):
|
||||
+ line = line.rstrip("\r")
|
||||
+ if not line:
|
||||
+ continue
|
||||
try:
|
||||
- sha, ref = line.split()
|
||||
+ sha, ref = line.split(" ", maxsplit=2)
|
||||
except ValueError:
|
||||
# Include the offending line to simplify troubleshooting if
|
||||
# this error ever occurs.
|
||||
--
|
||||
2.31.1
|
||||
|
@ -0,0 +1,78 @@
|
||||
Minimal patch for pip
|
||||
|
||||
diff -rU3 pip-orig/src/pip/_internal/utils/unpacking.py pip/src/pip/_internal/utils/unpacking.py
|
||||
--- pip-orig/src/pip/_internal/utils/unpacking.py 2022-11-05 16:25:43.000000000 +0100
|
||||
+++ pip/src/pip/_internal/utils/unpacking.py 2023-08-08 13:17:47.705613554 +0200
|
||||
@@ -184,6 +184,13 @@
|
||||
raise InstallationError(
|
||||
message.format(filename, path, location)
|
||||
)
|
||||
+
|
||||
+ # Call the `data` filter for its side effect (raising exception)
|
||||
+ try:
|
||||
+ tarfile.data_filter(member.replace(name=fn), location)
|
||||
+ except tarfile.LinkOutsideDestinationError:
|
||||
+ pass
|
||||
+
|
||||
if member.isdir():
|
||||
ensure_dir(path)
|
||||
elif member.issym():
|
||||
|
||||
|
||||
Test from https://github.com/pypa/pip/pull/12214
|
||||
|
||||
diff -rU3 pip-orig/tests/unit/test_utils_unpacking.py pip/tests/unit/test_utils_unpacking.py
|
||||
--- pip-orig/tests/unit/test_utils_unpacking.py 2022-11-05 16:25:43.000000000 +0100
|
||||
+++ pip/tests/unit/test_utils_unpacking.py 2023-08-08 13:17:35.151540108 +0200
|
||||
@@ -171,6 +171,23 @@
|
||||
test_tar = self.make_tar_file('test_tar.tar', files)
|
||||
untar_file(test_tar, self.tempdir)
|
||||
|
||||
+ def test_unpack_tar_filter(self) -> None:
|
||||
+ """
|
||||
+ Test that the tarfile.data_filter is used to disallow dangerous
|
||||
+ behaviour (PEP-721)
|
||||
+ """
|
||||
+ test_tar = os.path.join(self.tempdir, "test_tar_filter.tar")
|
||||
+ with tarfile.open(test_tar, "w") as mytar:
|
||||
+ file_tarinfo = tarfile.TarInfo("bad-link")
|
||||
+ file_tarinfo.type = tarfile.SYMTYPE
|
||||
+ file_tarinfo.linkname = "../../../../pwn"
|
||||
+ mytar.addfile(file_tarinfo, io.BytesIO(b""))
|
||||
+ with pytest.raises(InstallationError) as e:
|
||||
+ untar_file(test_tar, self.tempdir)
|
||||
+
|
||||
+ assert "is outside the destination" in str(e.value)
|
||||
+
|
||||
+
|
||||
|
||||
@pytest.mark.parametrize('args, expected', [
|
||||
# Test the second containing the first.
|
||||
|
||||
|
||||
Patch for vendored distlib from https://github.com/pypa/distlib/pull/201
|
||||
|
||||
diff --git a/distlib/util.py b/distlib/util.py
|
||||
index e0622e4..4349d0b 100644
|
||||
--- a/src/pip/_vendor/distlib/util.py
|
||||
+++ b/src/pip/_vendor/distlib/util.py
|
||||
@@ -1249,6 +1249,19 @@ def check_path(path):
|
||||
for tarinfo in archive.getmembers():
|
||||
if not isinstance(tarinfo.name, text_type):
|
||||
tarinfo.name = tarinfo.name.decode('utf-8')
|
||||
+
|
||||
+ # Limit extraction of dangerous items, if this Python
|
||||
+ # allows it easily. If not, just trust the input.
|
||||
+ # See: https://docs.python.org/3/library/tarfile.html#extraction-filters
|
||||
+ def extraction_filter(member, path):
|
||||
+ """Run tarfile.tar_fillter, but raise the expected ValueError"""
|
||||
+ # This is only called if the current Python has tarfile filters
|
||||
+ try:
|
||||
+ return tarfile.tar_filter(member, path)
|
||||
+ except tarfile.FilterError as exc:
|
||||
+ raise ValueError(str(exc))
|
||||
+ archive.extraction_filter = extraction_filter
|
||||
+
|
||||
archive.extractall(dest_dir)
|
||||
|
||||
finally:
|
Loading…
Reference in new issue