From: Yoann Congal <yoann.congal@smile.fr>
To: adarsh.jagadish.kamini@est.tech,
openembedded-core@lists.openembedded.org
Subject: Re: [OE-core][scarthgap][PATCH v2] Backport fix for CVE-2026-21441 Python3 urllib3
Date: Wed, 28 Jan 2026 11:04:23 +0100 [thread overview]
Message-ID: <83bc71ce-ec0e-4189-a986-059d752e4d51@smile.fr> (raw)
In-Reply-To: <20260127154214.97186-1-adarsh.jagadish.kamini@est.tech>
Le 27/01/2026 à 16:42, adarsh.jagadish.kamini via lists.openembedded.org
a écrit :
> From: Adarsh Jagadish Kamini <adarsh.jagadish.kamini@est.tech>
>
> Include the patch linked in the NVD report : https://nvd.nist.gov/vuln/detail/CVE-2026-21441
> Signed-off-by: Adarsh Jagadish Kamini <adarsh.jagadish.kamini@est.tech>
This patch looks like it is needed on master as well. Can you wait for
it to merge there before sending a backport request?
Thanks!
> ---
> .../python3-urllib3/CVE-2026-21441.patch | 105 ++++++++++++++++++
> .../python/python3-urllib3_2.2.2.bb | 1 +
> 2 files changed, 106 insertions(+)
> create mode 100644 meta/recipes-devtools/python/python3-urllib3/CVE-2026-21441.patch
>
> diff --git a/meta/recipes-devtools/python/python3-urllib3/CVE-2026-21441.patch b/meta/recipes-devtools/python/python3-urllib3/CVE-2026-21441.patch
> new file mode 100644
> index 0000000000..16af67af31
> --- /dev/null
> +++ b/meta/recipes-devtools/python/python3-urllib3/CVE-2026-21441.patch
> @@ -0,0 +1,105 @@
> +From 686d2bdd4affd3c86e605f54a72afe53c920f72f Mon Sep 17 00:00:00 2001
> +From: Illia Volochii <illia.volochii@gmail.com>
> +Date: Wed, 7 Jan 2026 18:07:30 +0200
> +Subject: [PATCH] Backport fix CVE-2026-21441 python urllib3
> +
> +Original commit: 8864ac407bba8607950025e0979c4c69bc7abc7b
> +Original-author: Illia Volochii <illia.volochii@gmail.com>
> +
> +Bugfixes
> +--------
> +
> +- Fixed a high-severity security issue where decompression-bomb safeguards of
> + the streaming API were bypassed when HTTP redirects were followed.
> + (`GHSA-38jv-5279-wg99 <https://github.com/urllib3/urllib3/security/advisories/GHSA-38jv-5279-wg99>`__)
> +
> +* Stop decoding response content during redirects needlessly
> +
> +* Rename the new query parameter
> +
> +* Add a changelog entry
> +
> +Fixes CVE-2026-21441
> +CVE: CVE-2026-21441
> +
> +Upstream-Status: Backport [https://github.com/urllib3/urllib3/commit/8864ac407bba8607950025e0979c4c69bc7abc7b]
> +
> +Signed-off-by: Adarsh Jagadish Kamini <adarsh.jagadish.kamini@est.tech>
> +---
> + dummyserver/app.py | 8 +++++++-
> + src/urllib3/response.py | 6 +++++-
> + test/with_dummyserver/test_connectionpool.py | 19 +++++++++++++++++++
> + 3 files changed, 31 insertions(+), 2 deletions(-)
> +
> +diff --git a/dummyserver/app.py b/dummyserver/app.py
> +index 9fc9d1b7..c4978152 100644
> +--- a/dummyserver/app.py
> ++++ b/dummyserver/app.py
> +@@ -233,10 +233,16 @@ async def redirect() -> ResponseReturnValue:
> + values = await request.values
> + target = values.get("target", "/")
> + status = values.get("status", "303 See Other")
> ++ compressed = values.get("compressed") == "true"
> + status_code = status.split(" ")[0]
> +
> + headers = [("Location", target)]
> +- return await make_response("", status_code, headers)
> ++ if compressed:
> ++ headers.append(("Content-Encoding", "gzip"))
> ++ data = gzip.compress(b"foo")
> ++ else:
> ++ data = b""
> ++ return await make_response(data, status_code, headers)
> +
> +
> + @hypercorn_app.route("/redirect_after")
> +diff --git a/src/urllib3/response.py b/src/urllib3/response.py
> +index a0273d65..909da62b 100644
> +--- a/src/urllib3/response.py
> ++++ b/src/urllib3/response.py
> +@@ -646,7 +646,11 @@ class HTTPResponse(BaseHTTPResponse):
> + Unread data in the HTTPResponse connection blocks the connection from being released back to the pool.
> + """
> + try:
> +- self.read()
> ++ self.read(
> ++ # Do not spend resources decoding the content unless
> ++ # decoding has already been initiated.
> ++ decode_content=self._has_decoded_content,
> ++ )
> + except (HTTPError, OSError, BaseSSLError, HTTPException):
> + pass
> +
> +diff --git a/test/with_dummyserver/test_connectionpool.py b/test/with_dummyserver/test_connectionpool.py
> +index 4fbe6a4f..ebcdf9bf 100644
> +--- a/test/with_dummyserver/test_connectionpool.py
> ++++ b/test/with_dummyserver/test_connectionpool.py
> +@@ -480,6 +480,25 @@ class TestConnectionPool(HypercornDummyServerTestCase):
> + assert r.status == 200
> + assert r.data == b"Dummy server!"
> +
> ++ @mock.patch("urllib3.response.GzipDecoder.decompress")
> ++ def test_no_decoding_with_redirect_when_preload_disabled(
> ++ self, gzip_decompress: mock.MagicMock
> ++ ) -> None:
> ++ """
> ++ Test that urllib3 does not attempt to decode a gzipped redirect
> ++ response when `preload_content` is set to `False`.
> ++ """
> ++ with HTTPConnectionPool(self.host, self.port) as pool:
> ++ # Three requests are expected: two redirects and one final / 200 OK.
> ++ response = pool.request(
> ++ "GET",
> ++ "/redirect",
> ++ fields={"target": "/redirect?compressed=true", "compressed": "true"},
> ++ preload_content=False,
> ++ )
> ++ assert response.status == 200
> ++ gzip_decompress.assert_not_called()
> ++
> + def test_303_redirect_makes_request_lose_body(self) -> None:
> + with HTTPConnectionPool(self.host, self.port) as pool:
> + response = pool.request(
> +--
> +2.44.0
> +
> diff --git a/meta/recipes-devtools/python/python3-urllib3_2.2.2.bb b/meta/recipes-devtools/python/python3-urllib3_2.2.2.bb
> index 620927322a..f6ac8f89ca 100644
> --- a/meta/recipes-devtools/python/python3-urllib3_2.2.2.bb
> +++ b/meta/recipes-devtools/python/python3-urllib3_2.2.2.bb
> @@ -11,6 +11,7 @@ SRC_URI += " \
> file://CVE-2025-50181.patch \
> file://CVE-2025-66418.patch \
> file://CVE-2025-66471.patch \
> + file://CVE-2026-21441.patch \
> "
>
> RDEPENDS:${PN} += "\
>
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#230084): https://lists.openembedded.org/g/openembedded-core/message/230084
> Mute This Topic: https://lists.openembedded.org/mt/117504613/4316185
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [yoann.congal@smile.fr]
> -=-=-=-=-=-=-=-=-=-=-=-
>
--
Yoann Congal
Smile ECS
prev parent reply other threads:[~2026-01-28 10:04 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-27 15:42 [OE-core][scarthgap][PATCH v2] Backport fix for CVE-2026-21441 Python3 urllib3 adarsh.jagadish.kamini
2026-01-28 10:04 ` Yoann Congal [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=83bc71ce-ec0e-4189-a986-059d752e4d51@smile.fr \
--to=yoann.congal@smile.fr \
--cc=adarsh.jagadish.kamini@est.tech \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox