Skip to content

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Jun 29, 2025

This PR contains the following updates:

Package Change Age Confidence
urllib3 (changelog) ==2.4.0 -> ==2.5.0 age confidence

GitHub Vulnerability Alerts

CVE-2025-50181

urllib3 handles redirects and retries using the same mechanism, which is controlled by the Retry object. The most common way to disable redirects is at the request level, as follows:

resp = urllib3.request("GET", "https://httpbin.org/redirect/1", redirect=False)
print(resp.status)

# 302

However, it is also possible to disable redirects, for all requests, by instantiating a PoolManager and specifying retries in a way that disable redirects:

import urllib3

http = urllib3.PoolManager(retries=0)  # should raise MaxRetryError on redirect
http = urllib3.PoolManager(retries=urllib3.Retry(redirect=0))  # equivalent to the above
http = urllib3.PoolManager(retries=False)  # should return the first response

resp = http.request("GET", "https://httpbin.org/redirect/1")

However, the retries parameter is currently ignored, which means all the above examples don't disable redirects.

Affected usages

Passing retries on PoolManager instantiation to disable redirects or restrict their number.

By default, requests and botocore users are not affected.

Impact

Redirects are often used to exploit SSRF vulnerabilities. An application attempting to mitigate SSRF or open redirect vulnerabilities by disabling redirects at the PoolManager level will remain vulnerable.

Remediation

You can remediate this vulnerability with the following steps:

  • Upgrade to a patched version of urllib3. If your organization would benefit from the continued support of urllib3 1.x, please contact sethmichaellarson@gmail.com to discuss sponsorship or contribution opportunities.
  • Disable redirects at the request() level instead of the PoolManager() level.

CVE-2025-50182

urllib3 supports being used in a Pyodide runtime utilizing the JavaScript Fetch API or falling back on XMLHttpRequest. This means you can use Python libraries to make HTTP requests from your browser or Node.js. Additionally, urllib3 provides a mechanism to control redirects.

However, the retries and redirect parameters are ignored with Pyodide; the runtime itself determines redirect behavior.

Affected usages

Any code which relies on urllib3 to control the number of redirects for an HTTP request in a Pyodide runtime.

Impact

Redirects are often used to exploit SSRF vulnerabilities. An application attempting to mitigate SSRF or open redirect vulnerabilities by disabling redirects may remain vulnerable if a Pyodide runtime redirect mechanism is unsuitable.

Remediation

If you use urllib3 in Node.js, upgrade to a patched version of urllib3.

Unfortunately, browsers provide no suitable way which urllib3 can use: XMLHttpRequest provides no control over redirects, the Fetch API returns opaqueredirect responses lacking data when redirects are controlled manually. Expect default browser behavior for redirects.


Release Notes

urllib3/urllib3 (urllib3)

v2.5.0

Compare Source

==================

Features

  • Added support for the compression.zstd module that is new in Python 3.14.
    See PEP 784 <https://peps.python.org/pep-0784/>_ for more information. (#&#8203;3610 <https://github.com/urllib3/urllib3/issues/3610>__)
  • Added support for version 0.5 of hatch-vcs (#&#8203;3612 <https://github.com/urllib3/urllib3/issues/3612>__)

Bugfixes

  • Fixed a security issue where restricting the maximum number of followed
    redirects at the urllib3.PoolManager level via the retries parameter
    did not work.
  • Made the Node.js runtime respect redirect parameters such as retries
    and redirects.
  • Raised exception for HTTPResponse.shutdown on a connection already released to the pool. (#&#8203;3581 <https://github.com/urllib3/urllib3/issues/3581>__)
  • Fixed incorrect CONNECT statement when using an IPv6 proxy with connection_from_host. Previously would not be wrapped in []. (#&#8203;3615 <https://github.com/urllib3/urllib3/issues/3615>__)

Configuration

📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
Copy link
Contributor Author

renovate bot commented Jun 29, 2025

⚠️ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: Pipfile.lock
Command failed: pipenv lock
Creating a virtualenv for this project
Pipfile: /tmp/renovate/repos/github/saucelabs-training/demo-python/Pipfile
Using /usr/local/bin/python3.14.0 to create virtualenv...
created virtual environment CPython3.14.0.final.0-64 in 428ms
  creator 
CPython3Posix(dest=/runner/cache/others/virtualenvs/demo-python-pkXjvlzF, 
clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, via=copy, 
app_data_dir=/tmp/containerbase/cache/.local/share/virtualenv)
    added seed packages: pip==25.3
  activators 
BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator
,PythonActivator

✔ Successfully created virtual environment!
Virtualenv location: /runner/cache/others/virtualenvs/demo-python-pkXjvlzF
Locking  dependencies...
CRITICAL:pipenv.patched.pip._internal.resolution.resolvelib.factory:Ignored the 
following versions that require a different python version: 6.4.0 
Requires-Python <3.12,>=3.8; 6.4.0rc1 Requires-Python <3.12,>=3.8; 6.5.0 
Requires-Python <3.12,>=3.8; 6.5.0rc1 Requires-Python <3.12,>=3.8; 6.6.0 
Requires-Python <=3.12,>=3.8; 6.6.1 Requires-Python <3.13,>=3.8; 6.7.0 
Requires-Python <3.14,>=3.8; 6.7.0rc1 Requires-Python <3.14,>=3.8; 6.7.1 
Requires-Python <3.14,>=3.8
CRITICAL:pipenv.patched.pip._internal.resolution.resolvelib.factory:Could not 
find a version that satisfies the requirement 
robotframework-seleniumlibrary==6.7.1 (from versions: 2.9.2, 3.0.0a2, 3.0.0b1, 
3.0.0b3, 3.0.0rc1, 3.0.0rc2, 3.0.0, 3.0.1, 3.1.0a1, 3.1.0a2, 3.1.0, 3.1.1, 
3.2.0rc1, 3.2.0, 3.3.0, 3.3.1, 4.0.0a1, 4.0.0a2, 4.0.0b1, 4.0.0rc1, 4.0.0, 
4.1.0rc1, 4.1.0, 4.2.0rc1, 4.2.0, 4.3.0rc1, 4.3.0, 4.4.0rc1, 4.4.0rc2, 4.4.0rc3,
4.4.0, 4.5.0rc1, 4.5.0rc2, 4.5.0, 5.0.0a1, 5.0.0a2, 5.0.0a3, 5.0.0b1, 5.0.0, 
5.0.1, 5.1.0, 5.1.1, 5.1.2, 5.1.3, 6.0.0rc1, 6.0.0, 6.1.0rc1, 6.1.0, 6.1.1rc1, 
6.1.1, 6.1.2rc1, 6.1.2, 6.1.3b1, 6.1.3, 6.2.0rc1, 6.2.0, 6.3.0rc1, 6.3.0rc2, 
6.3.0, 6.8.0)
[ResolutionFailure]:   File 
"/opt/containerbase/tools/pipenv/2025.0.4/3.14.0/lib/python3.14/site-packages/pi
penv/resolver.py", line 451, in main
[ResolutionFailure]:       _main(
[ResolutionFailure]:       ~~~~~^
[ResolutionFailure]:       parsed.pre,
[ResolutionFailure]:       ^^^^^^^^^^^
[ResolutionFailure]:       ...<7 lines>...
[ResolutionFailure]:       category=parsed.category,
[ResolutionFailure]:       ^^^^^^^^^^^^^^^^^^^^^^^^^
[ResolutionFailure]:       )
[ResolutionFailure]:       ^
[ResolutionFailure]:   File 
"/opt/containerbase/tools/pipenv/2025.0.4/3.14.0/lib/python3.14/site-packages/pi
penv/resolver.py", line 436, in _main
[ResolutionFailure]:       resolve_packages(
[ResolutionFailure]:       ~~~~~~~~~~~~~~~~^
[ResolutionFailure]:       pre, clear, verbose, system, write, requirements_dir,
packages, category
[ResolutionFailure]:       
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[ResolutionFailure]:       )
[ResolutionFailure]:       ^
[ResolutionFailure]:   File 
"/opt/containerbase/tools/pipenv/2025.0.4/3.14.0/lib/python3.14/site-packages/pi
penv/resolver.py", line 400, in resolve_packages
[ResolutionFailure]:       results, resolver = resolve_deps(
[ResolutionFailure]:       ~~~~~~~~~~~~^
[ResolutionFailure]:       packages,
[ResolutionFailure]:       ^^^^^^^^^
[ResolutionFailure]:       ...<7 lines>...
[ResolutionFailure]:       req_dir=requirements_dir,
[ResolutionFailure]:       ^^^^^^^^^^^^^^^^^^^^^^^^^
[ResolutionFailure]:       )
[ResolutionFailure]:       ^
[ResolutionFailure]:   File 
"/opt/containerbase/tools/pipenv/2025.0.4/3.14.0/lib/python3.14/site-packages/pi
penv/utils/resolver.py", line 1083, in resolve_deps
[ResolutionFailure]:       results, hashes, internal_resolver = 
actually_resolve_deps(
[ResolutionFailure]:       ~~~~~~~~~~~~~~~~~~~~~^
[ResolutionFailure]:       deps,
[ResolutionFailure]:       ^^^^^
[ResolutionFailure]:       ...<7 lines>...
[ResolutionFailure]:       req_dir=req_dir,
[ResolutionFailure]:       ^^^^^^^^^^^^^^^^
[ResolutionFailure]:       )
[ResolutionFailure]:       ^
[ResolutionFailure]:   File 
"/opt/containerbase/tools/pipenv/2025.0.4/3.14.0/lib/python3.14/site-packages/pi
penv/utils/resolver.py", line 811, in actually_resolve_deps
[ResolutionFailure]:       resolver.resolve()
[ResolutionFailure]:       ~~~~~~~~~~~~~~~~^^
[ResolutionFailure]:   File 
"/opt/containerbase/tools/pipenv/2025.0.4/3.14.0/lib/python3.14/site-packages/pi
penv/utils/resolver.py", line 471, in resolve
[ResolutionFailure]:       raise ResolutionFailure(message=e)
Your dependencies could not be resolved. You likely have a mismatch in your 
sub-dependencies.
You can use $ pipenv run pip install <requirement_name> to bypass this 
mechanism, then run $ pipenv graph to inspect the versions actually installed in
the virtualenv.
Hint: try $ pipenv lock --pre if it is a pre-release dependency.
ERROR: No matching distribution found for robotframework-seleniumlibrary==6.7.1

Your dependencies could not be resolved. You likely have a mismatch in your 
sub-dependencies.
You can use $ pipenv run pip install <requirement_name> to bypass this 
mechanism, then run $ pipenv graph to inspect the versions actually installed in
the virtualenv.
Hint: try $ pipenv lock --pre if it is a pre-release dependency.
ERROR: Failed to lock Pipfile.lock!

@renovate renovate bot force-pushed the renovate/pypi-urllib3-vulnerability branch from 5842ba0 to 02a7bbd Compare October 30, 2025 14:50
@renovate renovate bot changed the title Update dependency urllib3 to v2.5.0 [SECURITY] Update dependency urllib3 to v2.5.0 [SECURITY] - autoclosed Oct 30, 2025
@renovate renovate bot closed this Oct 30, 2025
@renovate renovate bot deleted the renovate/pypi-urllib3-vulnerability branch October 30, 2025 15:06
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.

0 participants