dev-python/requests: fix CVE-2023-32681
BUG=b/336266224
TEST=presubmit
RELEASE_NOTE=Fixed CVE-2023-32681 in dev-python/requests.
cos-patch: security-moderate
Change-Id: I3d264cf1ac9fe467b6e20b842843c2b2efad1f8a
Reviewed-on: https://cos-review.googlesource.com/c/third_party/overlays/portage-stable/+/70679
Reviewed-by: Kevin Berry <kpberry@google.com>
Tested-by: Cusky Presubmit Bot <presubmit@cos-infra-prod.iam.gserviceaccount.com>
diff --git a/dev-python/requests/files/requests-2.24.0-CVE-2023-32681.patch b/dev-python/requests/files/requests-2.24.0-CVE-2023-32681.patch
new file mode 100644
index 0000000..14e45f8
--- /dev/null
+++ b/dev-python/requests/files/requests-2.24.0-CVE-2023-32681.patch
@@ -0,0 +1,59 @@
+From 7a334cc96ee16186e26943d7777bfbefddecaf08 Mon Sep 17 00:00:00 2001
+From: Nate Prewitt <nate.prewitt@gmail.com>
+Date: Mon, 22 May 2023 08:08:57 -0700
+Subject: [PATCH] Merge pull request from GHSA-j8r2-6x86-q33q
+
+---
+ requests/sessions.py | 4 +++-
+ tests/test_requests.py | 20 ++++++++++++++++++++
+ 2 files changed, 23 insertions(+), 1 deletion(-)
+
+diff --git a/requests/sessions.py b/requests/sessions.py
+index e8e2d609a78d..6e73925ae937 100644
+--- a/requests/sessions.py
++++ b/requests/sessions.py
+@@ -306,7 +306,9 @@ class SessionRedirectMixin(object):
+ except KeyError:
+ username, password = None, None
+
+- if username and password:
++ # urllib3 handles proxy authorization for us in the standard adapter.
++ # Avoid appending this to TLS tunneled requests where it may be leaked.
++ if not scheme.startswith('https') and username and password:
+ headers['Proxy-Authorization'] = _basic_auth_str(username, password)
+
+ return new_proxies
+diff --git a/tests/test_requests.py b/tests/test_requests.py
+index e730f7648b4d..66ee3f5fdd41 100644
+--- a/tests/test_requests.py
++++ b/tests/test_requests.py
+@@ -551,6 +551,26 @@ class TestRequests:
+ with pytest.raises(InvalidProxyURL):
+ requests.get(httpbin(), proxies={'http': 'http:///example.com:8080'})
+
++
++ @pytest.mark.parametrize(
++ "url,has_proxy_auth",
++ (
++ ('http://example.com', True),
++ ('https://example.com', False),
++ ),
++ )
++ def test_proxy_authorization_not_appended_to_https_request(self, url, has_proxy_auth):
++ session = requests.Session()
++ proxies = {
++ 'http': 'http://test:pass@localhost:8080',
++ 'https': 'http://test:pass@localhost:8090',
++ }
++ req = requests.Request('GET', url)
++ prep = req.prepare()
++ session.rebuild_proxies(prep, proxies)
++
++ assert ('Proxy-Authorization' in prep.headers) is has_proxy_auth
++
+ def test_basicauth_with_netrc(self, httpbin):
+ auth = ('user', 'pass')
+ wrong_auth = ('wronguser', 'wrongpass')
+--
+2.44.0.769.g3c40516874-goog
+
diff --git a/dev-python/requests/requests-2.24.0-r2.ebuild b/dev-python/requests/requests-2.24.0-r2.ebuild
new file mode 120000
index 0000000..e03dca5
--- /dev/null
+++ b/dev-python/requests/requests-2.24.0-r2.ebuild
@@ -0,0 +1 @@
+requests-2.24.0.ebuild
\ No newline at end of file
diff --git a/dev-python/requests/requests-2.24.0.ebuild b/dev-python/requests/requests-2.24.0.ebuild
index 544ed07..1088d69 100644
--- a/dev-python/requests/requests-2.24.0.ebuild
+++ b/dev-python/requests/requests-2.24.0.ebuild
@@ -38,6 +38,10 @@
)
"
+PATCHES=(
+ "${FILESDIR}/${PN}-2.24.0-CVE-2023-32681.patch"
+)
+
distutils_enable_tests pytest
src_prepare() {