Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Dec 10, 2025

urllib3 < 2.6.0 streaming API can fully decompress highly compressed data in a single operation, causing excessive CPU and memory consumption (CWE-409) when handling untrusted sources.

Changes

  • Updated venv_requirements.txt: urllib3~=2.5.0urllib3~=2.6.0

The patched version avoids decompressing data beyond the requested chunk size, preventing resource exhaustion attacks via compression bombs.

Original prompt

This section details on the original issue you should resolve

<issue_title>urllib3 streaming API improperly handles highly compressed data</issue_title>
<issue_description>urllib3 streaming API improperly handles highly compressed data #14
Open Opened 4 days ago on urllib3 (pip) · venv_requirements.txt
Dependabot can't update vulnerable dependencies without a lockfile
The currently installed version can't be determined.

To resolve the issue add a supported lockfile (Pipfile.lock, pyproject.lock or poetry.lock).

Package
Affected versions
Patched version
urllib3
(pip)

= 1.0, < 2.6.0
2.6.0
Impact
urllib3's streaming API is designed for the efficient handling of large HTTP responses by reading the content in chunks, rather than loading the entire response body into memory at once.

When streaming a compressed response, urllib3 can perform decoding or decompression based on the HTTP Content-Encoding header (e.g., gzip, deflate, br, or zstd). The library must read compressed data from the network and decompress it until the requested chunk size is met. Any resulting decompressed data that exceeds the requested amount is held in an internal buffer for the next read operation.

The decompression logic could cause urllib3 to fully decode a small amount of highly compressed data in a single operation. This can result in excessive resource consumption (high CPU usage and massive memory allocation for the decompressed data; CWE-409) on the client side, even if the application only requested a small chunk of data.

Affected usages
Applications and libraries using urllib3 version 2.5.0 and earlier to stream large compressed responses or content from untrusted sources.

stream(), read(amt=256), read1(amt=256), read_chunked(amt=256), readinto(b) are examples of urllib3.HTTPResponse method calls using the affected logic unless decoding is disabled explicitly.

Remediation
Upgrade to at least urllib3 v2.6.0 in which the library avoids decompressing data that exceeds the requested amount.

If your environment contains a package facilitating the Brotli encoding, upgrade to at least Brotli 1.2.0 or brotlicffi 1.2.0.0 too. These versions are enforced by the urllib3[brotli] extra in the patched versions of urllib3.

Credits
The issue was reported by @Cycloctane.
Supplemental information was provided by @stamparm during a security audit performed by 7ASecurity and facilitated by OSTIF.</issue_description>

Comments on the Issue (you are @copilot in this section)


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI changed the title [WIP] Fix urllib3 streaming API for highly compressed data Update urllib3 to 2.6.0 to fix streaming API decompression vulnerability Dec 10, 2025
Copilot AI requested a review from bernalde December 10, 2025 00:38
@bernalde bernalde marked this pull request as ready for review December 11, 2025 00:22
@bernalde bernalde merged commit 61074f9 into main Dec 11, 2025
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

urllib3 streaming API improperly handles highly compressed data

2 participants