The Python requests library — with nearly 200 million downloads per week — powers HTTP communication in a vast majority of Python applications, from web scrapers and API clients to CI/CD pipelines and microservices. Underneath, it relies on urllib3 as its HTTP engine, which itself receives 196 million downloads per week. In 2025 and 2026, this foundational stack received a series of security patches addressing denial-of-service vulnerabilities, credential leakage, and SSRF risks. Two of these — CVE-2025-66471 (CVSS 8.9) and CVE-2026-21441 (CVSS 7.5) — form a decompression bomb chain that can crash Python applications processing responses from untrusted servers.
La bibliothèque Python requests — avec près de 200 millions de téléchargements par semaine — alimente la communication HTTP dans une grande majorité des applications Python, des scrapers aux clients API en passant par les pipelines CI/CD et les microservices. Dessous, elle s’appuie sur urllib3 comme moteur HTTP, lui-même téléchargé 196 millions de fois par semaine. En 2025 et 2026, cette pile fondamentale a reçu une série de correctifs de sécurité couvrant des vulnérabilités de déni de service, de fuite de credentials et de SSRF. Deux d’entre elles — CVE-2025-66471 (CVSS 8.9) et CVE-2026-21441 (CVSS 7.5) — forment une chaîne de bombes de décompression pouvant crasher les applications Python qui traitent des réponses de serveurs non fiables.
Why urllib3 and requests are everywhere in Python projects
Pourquoi urllib3 et requests sont partout dans les projets Python
The requests library is Python’s de facto HTTP client, present in virtually every Python project that communicates over HTTP. It wraps urllib3, which provides connection pooling, TLS handling, retry logic, and streaming decompression. The critical security implication: a vulnerability in urllib3 is a vulnerability in requests, and in every library that builds on top of either of them — including boto3/botocore (AWS SDK), pip itself, and hundreds of popular packages.
La bibliothèque requests est le client HTTP de facto de Python, présent dans pratiquement tout projet Python communiquant en HTTP. Elle encapsule urllib3, qui fournit le pooling de connexions, la gestion TLS, la logique de retry et la décompression en streaming. L’implication sécurité critique : une vulnérabilité dans urllib3 est une vulnérabilité dans requests, et dans toutes les bibliothèques qui s’appuient dessus — boto3/botocore (AWS SDK), pip lui-même, et des centaines de packages populaires.
This dependency chain means that even if you don’t use requests directly, you may be running a vulnerable version of urllib3 as a transitive dependency. Both packages ship with most Python distributions and are bundled in cloud functions, Docker images, and enterprise software like IBM Maximo, IBM Watson, and Red Hat OpenShift — which have all published security advisories for the 2025–2026 urllib3 CVEs.
Cette chaîne de dépendances signifie que même si vous n’utilisez pas requests directement, vous exécutez peut-être une version vulnérable de urllib3 comme dépendance transitive. Les deux packages sont livrés avec la plupart des distributions Python et sont embarqués dans les fonctions cloud, les images Docker et les logiciels d’entreprise comme IBM Maximo, IBM Watson et Red Hat OpenShift — qui ont tous publié des avis de sécurité pour les CVE urllib3 2025–2026.
The 2025–2026 urllib3 Decompression Bomb Chain: CVE-2025-66471 & CVE-2026-21441
La chaîne de bombes de décompression urllib3 2025–2026 : CVE-2025-66471 & CVE-2026-21441
Both CVEs target the same root weakness: urllib3’s failure to limit the amount of data produced when decompressing HTTP responses. The attack pattern — a "decompression bomb" — involves sending a tiny compressed payload (a few kilobytes) that expands to gigabytes of data when decompressed, exhausting the client’s memory and CPU. What makes these two CVEs particularly dangerous together is that the first fix was incomplete, and the second CVE exploits the remaining gap specifically in redirect scenarios.
Les deux CVE ciblent la même faiblesse fondamentale : l’échec de urllib3 à limiter la quantité de données produite lors de la décompression des réponses HTTP. Le modèle d’attaque — une « bombe de décompression » — consiste à envoyer une petite charge compressée (quelques kilo-octets) qui se développe en gigaoctets lors de la décompression, épuisant la mémoire et le CPU du client. Ce qui rend ces deux CVE particulièrement dangereuses ensemble, c’est que le premier correctif était incomplet, et la deuxième CVE exploite le reste de la faille spécifiquement dans les scénarios de redirection.
The streaming API in urllib3 did not limit the amount of data produced during decompression of HTTP response bodies. When an application reads chunks of compressed data using preload_content=False, the library decompresses until the requested chunk size is met — but without any cap on the total decompressed output. A malicious server can serve a highly compressed payload (e.g., a zip bomb with a 1000:1 ratio) causing excessive CPU usage and massive memory allocation. All versions from 1.0 up to 2.5.x are affected.
L’API de streaming de urllib3 ne limitait pas la quantité de données produite lors de la décompression des corps de réponses HTTP. Quand une application lit des morceaux de données compressées avec preload_content=False, la bibliothèque décompresse jusqu’à atteindre la taille de chunk demandée — sans aucun plafond sur la sortie totale décompressée. Un serveur malveillant peut servir une charge fortement compressée (ex. : une zip bomb avec un ratio 1000:1) provoquant une utilisation excessive du CPU et une allocation mémoire massive. Toutes les versions de 1.0 à 2.5.x sont affectées.
Sources: NVD, GitHub Advisory GHSA-2xpw-w6gg-jr37, SentinelOne, SUSE CVE-2025-66471
Even after the fix for CVE-2025-66471 landed in urllib3 2.6.0, a specific bypass remained: when following HTTP redirects with preload_content=False, the library would read the entire response body of the redirect to drain the connection, decompressing content before any read methods were called — and the configured read limits did not restrict the decompressed data. An attacker can serve a compressed bomb inside a 302 Redirect, triggering the vulnerability before the client even requests the destination. The fix in 2.6.3 ensures redirect responses are never decoded when streaming mode is active.
Même après que le correctif de CVE-2025-66471 a atterri dans urllib3 2.6.0, un contournement spécifique persistait : lors du suivi de redirections HTTP avec preload_content=False, la bibliothèque lisait le corps entier de la réponse de redirection pour vider la connexion, en décompressant le contenu avant même que les méthodes de lecture soient appelées — et les limites de lecture configurées ne restreignaient pas les données décompressées. Un attaquant peut servir une bombe compressée dans une 302 Redirect, déclenchant la vulnérabilité avant que le client ne demande même la destination. Le correctif de la v2.6.3 garantit que les réponses de redirection ne sont jamais décodées en mode streaming.
Sources: GitHub Advisory GHSA-38jv-5279-wg99, DEV Community CVE-2026-21441, GitLab Advisory, IBM Security Bulletin (watsonx.data), Red Hat RHSA-2026:9031, Fedora Advisory 2026-724d1b1044
The patch timeline shows how the incomplete fix created a second vulnerability window. Organizations running urllib3 versions between 2.6.0 and 2.6.2 believed they were protected from decompression bombs after patching for CVE-2025-66471, but remained vulnerable to CVE-2026-21441 via the redirect path.
La chronologie des correctifs montre comment le correctif incomplet a créé une deuxième fenêtre de vulnérabilité. Les organisations exécutant des versions urllib3 entre 2.6.0 et 2.6.2 croyaient être protégées contre les bombes de décompression après avoir appliqué le correctif de CVE-2025-66471, mais restaient vulnérables à CVE-2026-21441 via le chemin de redirection.
preload_content=False. All active Red Hat / IBM advisories point to this version.preload_content=False. Tous les avis actifs Red Hat / IBM pointent vers cette version.CVE-2023-32681: The Proxy-Authorization Header Leak Still Lurking in Your Dependencies
CVE-2023-32681 : La Fuite du Header Proxy-Authorization Toujours Présente dans Vos Dépendances
While the decompression bomb chain is the most active concern in 2026, a credential leakage vulnerability from 2023 continues to affect Python projects that haven’t fully updated. CVE-2023-32681 (CVSS 6.1) causes the requests library to leak Proxy-Authorization headers to destination servers during HTTPS redirects. This means any credentials embedded in the proxy URL — such as https://username:password@proxy:8080 — are forwarded to the final destination server where they could be logged, stolen, or exploited.
Alors que la chaîne de bombes de décompression est la préoccupation la plus active en 2026, une vulnérabilité de fuite de credentials de 2023 continue d’affecter les projets Python qui ne se sont pas entièrement mis à jour. CVE-2023-32681 (CVSS 6.1) provoque la fuite par la bibliothèque requests des headers Proxy-Authorization vers les serveurs de destination lors des redirections HTTPS. Cela signifie que les credentials embarqués dans l’URL proxy — comme https://username:password@proxy:8080 — sont transmis au serveur de destination finale où ils pourraient être loggés, volés ou exploités.
Since requests 2.3.0, the library leaked Proxy-Authorization headers to destination servers when following redirects to HTTPS origins. The Proxy-Authorization header must only be sent in the CONNECT request (where the proxy controls the tunnel) — not in the tunneled HTTPS request that the destination server sees. The bug caused requests to not strip this header during cross-origin HTTPS redirects, forwarding proxy credentials to the final server. Fixed in requests 2.31.0. IBM published multiple security bulletins confirming this CVE in enterprise deployments as recently as 2026.
Depuis requests 2.3.0, la bibliothèque faisait fuiter les headers Proxy-Authorization vers les serveurs de destination lors du suivi de redirections vers des origines HTTPS. Ce header ne doit être envoyé que dans la requête CONNECT (où le proxy contrôle le tunnel) — pas dans la requête HTTPS tunnellisée que le serveur de destination voit. Le bug empêchait requests de supprimer ce header lors des redirections HTTPS cross-origin, transmettant les credentials du proxy au serveur final. Corrigé dans requests 2.31.0. IBM a publié plusieurs bulletins de sécurité confirmant cette CVE dans des déploiements enterprise jusque en 2026.
Sources: Red Hat Bugzilla #2209469, IBM Security Bulletins (Maximo / InfoSphere / Process Mining), Snyk Advisory, requests official Vulnerability Disclosure (docs.python-requests.org)
CVE-2024-37891 is the urllib3 counterpart: the library similarly failed to strip the Proxy-Authorization header on cross-origin redirects, affecting versions below 2.2.2. Together, CVE-2023-32681 and CVE-2024-37891 mean that both layers of the stack — requests and urllib3 — were independently leaking proxy credentials for over a decade before the fixes landed.
CVE-2024-37891 est la contrepartie urllib3 : la bibliothèque échouait également à supprimer le header Proxy-Authorization lors des redirections cross-origin, affectant les versions inférieures à 2.2.2. Ensemble, CVE-2023-32681 et CVE-2024-37891 signifient que les deux couches de la pile — requests et urllib3 — faisaient indépendamment fuiter les credentials proxy pendant plus d’une décennie avant que les correctifs n’arrivent.
Safe Versions: What You Need to Upgrade To
Versions Sûres : Ce Vers Quoi Vous Devez Migrer
Here is the minimum safe version matrix for the full urllib3/requests stack as of April 2026, based on active Red Hat, IBM, and Fedora security advisories:
Voici la matrice de versions minimales sûres pour la pile urllib3/requests complète en avril 2026, basée sur les avis de sécurité actifs de Red Hat, IBM et Fedora :
| Package | Minimum safe version | CVEs fixed | Status | Package | Version minimale sûre | CVE corrigées | Statut |
|---|---|---|---|---|---|---|---|
urllib3 |
2.6.3 | CVE-2025-66471, CVE-2026-21441, CVE-2024-37891 | Recommended | ||||
requests |
2.32.5 | CVE-2023-32681, CVE-2024-35195 (verify=False persistence) |
Recommended | ||||
certifi |
2026.1.4 | Updated CA bundle for 2026 | Recommended | ||||
urllib3 1.x (legacy) |
1.26.20 | CVE-2024-37891 (backport) | End-of-life |
To check your current versions and update:
Pour vérifier vos versions actuelles et mettre à jour :
# Check current versions pip show urllib3 requests certifi # Upgrade to safe versions pip install "urllib3>=2.6.3" "requests>=2.32.5" "certifi>=2026.1.4" # Or upgrade all at once pip install --upgrade urllib3 requests certifi # Check for known vulnerabilities in your full dependency tree pip-audit # pip install pip-audit
Vulnerable Code Patterns & How to Fix Them
Patterns de Code Vulnérables & Comment les Corriger
Beyond upgrading, certain coding patterns expose your application to decompression bomb attacks even on patched versions, especially when dealing with untrusted remote servers. Here are the three most common risky patterns and their safe alternatives:
Au-delà de la mise à niveau, certains patterns de code exposent votre application aux attaques par bombe de décompression même sur des versions patchées, en particulier lors de communications avec des serveurs distants non fiables. Voici les trois patterns risqués les plus courants et leurs alternatives sûres :
import urllib3 http = urllib3.PoolManager() # Streaming from untrusted URL — CVE-2026-21441 triggers on redirect resp = http.request("GET", untrusted_url, preload_content=False) for chunk in resp.stream(512): # bomb decompressed before this loop process(chunk)
import urllib3 http = urllib3.PoolManager() # Option A: upgrade to urllib3 >= 2.6.3 (fix applied) # Option B: disable redirects for untrusted sources resp = http.request( "GET", untrusted_url, preload_content=False, redirect=False, # disables redirect decompression path ) for chunk in resp.stream(512): process(chunk)
import requests proxies = { "https": "https://user:secret@proxy.corp.example:8080" } # On HTTPS redirect, "user:secret" leaks to the destination server r = requests.get("https://api.example.com/data", proxies=proxies)
import requests from requests.auth import HTTPProxyAuth # Safe: use auth object, NOT credentials in URL proxies = {"https": "http://proxy.corp.example:8080"} auth = HTTPProxyAuth("user", "secret") r = requests.get("https://api.example.com/data", proxies=proxies, auth=auth) # Credentials stay in the CONNECT request, not forwarded on redirect
import requests # verify=False disables ALL certificate validation # Makes MITM attacks trivial — attacker can intercept all traffic r = requests.get("https://api.example.com/", verify=False)
import requests # For internal PKI: provide your custom CA bundle r = requests.get("https://internal.example.com/", verify="/etc/ssl/certs/ca-bundle.crt") # For public APIs: always use default (True) r = requests.get("https://api.example.com/") # verify=True by default
Detecting Vulnerable urllib3 & requests in Your CI/CD Pipeline
Détecter urllib3 & requests Vulnérables dans Votre Pipeline CI/CD
The real challenge with urllib3 and requests vulnerabilities is that they are frequently installed as transitive dependencies — your project doesn’t directly list them in requirements.txt, but another dependency pulls them in at a version that has known CVEs. Standard pip install doesn’t warn you. Standard pip audit helps, but only catches what’s in your current environment.
Le vrai défi avec les vulnérabilités urllib3 et requests est qu’elles sont fréquemment installées comme dépendances transitives — votre projet ne les liste pas directement dans requirements.txt, mais une autre dépendance les tire dans une version ayant des CVE connues. Le pip install standard ne vous avertit pas. Le pip audit standard aide, mais ne capture que ce qui est dans votre environnement actuel.
# Install pip-audit pip install pip-audit # Audit current environment pip-audit # Output format for CI/CD (JSON) pip-audit --format json --output audit-report.json # Audit from requirements.txt (without installing) pip-audit -r requirements.txt # Check transitive deps — what version of urllib3 is actually installed? pip show urllib3 | grep -E "Name|Version|Required-by"
# .github/workflows/security.yml name: Security Audit on: [push, pull_request] jobs: audit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.12' - run: pip install pip-audit - run: pip-audit -r requirements.txt --strict # --strict exits non-zero if any CVE found
For projects using Poetry or pip-tools, pin urllib3 explicitly to a safe version in your lock file to prevent automatic resolution to a vulnerable version when a dependency is updated:
Pour les projets utilisant Poetry ou pip-tools, épinglez explicitement urllib3 à une version sûre dans votre fichier de verrouillage pour éviter la résolution automatique vers une version vulnérable lors de la mise à jour d’une dépendance :
[tool.poetry.dependencies] python = "^3.10" urllib3 = ">=2.6.3" # pin minimum safe version requests = ">=2.32.5" # pin minimum safe version certifi = ">=2026.1.4" # updated CA bundle
Enterprise Impact: Red Hat, IBM, and Fedora Patches
Impact Enterprise : Correctifs Red Hat, IBM et Fedora
The depth of the enterprise patching activity for the 2025–2026 urllib3 CVEs illustrates how widely deployed these libraries are across critical infrastructure. Red Hat alone issued at least six separate security advisories (RHSA) covering different product lines affected by CVE-2026-21441:
L’ampleur de l’activité de patching enterprise pour les CVE urllib3 2025–2026 illustre à quel point ces bibliothèques sont déployées dans les infrastructures critiques. Red Hat seul a émis au moins six avis de sécurité (RHSA) distincts couvrant différentes lignes de produits affectées par CVE-2026-21441 :
IBM published specific security bulletins for: IBM Maximo Application Suite (Monitor Component), IBM Maximo Manage, and IBM watsonx.data — confirming that CVE-2026-21441 was present in production enterprise deployments of urllib3-2.6.2 and earlier. The Fedora Project released advisory 2026-724d1b1044 covering the same CVE for Fedora 43 users of python-urllib3.
IBM a publié des bulletins de sécurité spécifiques pour : IBM Maximo Application Suite (composant Monitor), IBM Maximo Manage, et IBM watsonx.data — confirmant que CVE-2026-21441 était présente dans des déploiements enterprise de urllib3-2.6.2 et antérieurs. Le projet Fedora a publié l’avis 2026-724d1b1044 couvrant la même CVE pour les utilisateurs Fedora 43 de python-urllib3.
SSRF Risks When Using requests with User-Supplied URLs
Risques SSRF lors de l’Utilisation de requests avec des URLs Fournies par les Utilisateurs
Beyond the CVEs, a class of vulnerabilities that frequently affects Python applications using requests is Server-Side Request Forgery (SSRF). When your application accepts a URL from a user or external API and passes it directly to requests.get(), an attacker can supply internal network addresses — such as http://169.254.169.254/latest/meta-data/ (AWS instance metadata) or http://localhost:6379 (Redis) — to probe your internal infrastructure.
Au-delà des CVE, une classe de vulnérabilités qui affecte fréquemment les applications Python utilisant requests est la Server-Side Request Forgery (SSRF). Quand votre application accepte une URL d’un utilisateur ou d’une API externe et la passe directement à requests.get(), un attaquant peut fournir des adresses de réseau interne — comme http://169.254.169.254/latest/meta-data/ (métadonnées d’instance AWS) ou http://localhost:6379 (Redis) — pour sonder votre infrastructure interne.
import requests from flask import request, jsonify # API endpoint that fetches a URL provided by the user def fetch_url(): url = request.args.get("url") # attacker sends: http://169.254.169.254/latest/meta-data/iam/ r = requests.get(url, timeout=5) # SSRF — leaks cloud credentials return jsonify({"content": r.text})
import ipaddress import socket from urllib.parse import urlparse import requests ALLOWED_SCHEMES = {"http", "https"} BLOCKED_HOSTS = {"localhost", "127.0.0.1", "0.0.0.0", "::1"} BLOCKED_IP_RANGES = [ ipaddress.ip_network("169.254.0.0/16"), # link-local (AWS metadata) ipaddress.ip_network("10.0.0.0/8"), # private RFC 1918 ipaddress.ip_network("172.16.0.0/12"), # private RFC 1918 ipaddress.ip_network("192.168.0.0/16"), # private RFC 1918 ] def is_safe_url(url: str) -> bool: parsed = urlparse(url) if parsed.scheme not in ALLOWED_SCHEMES: return False hostname = parsed.hostname if not hostname or hostname in BLOCKED_HOSTS: return False try: ip = ipaddress.ip_address(socket.gethostbyname(hostname)) if ip.is_private or ip.is_loopback or ip.is_link_local: return False if any(ip in net for net in BLOCKED_IP_RANGES): return False except (socket.gaierror, ValueError): return False return True def fetch_url(): url = request.args.get("url", "") if not is_safe_url(url): return jsonify({"error": "URL not allowed"}), 400 r = requests.get(url, timeout=5, allow_redirects=False) # disable redirects for safety return jsonify({"content": r.text})
Full Security Hardening Checklist for Python HTTP Clients
Liste de Contrôle Complète de Durcissement pour les Clients HTTP Python
- Upgrade urllib3 to 2.6.3+ — fixes CVE-2025-66471 (CVSS 8.9) and CVE-2026-21441 (CVSS 7.5). The minimum you must do. Mettre à niveau urllib3 vers 2.6.3+ — corrige CVE-2025-66471 (CVSS 8.9) et CVE-2026-21441 (CVSS 7.5). Le minimum à faire.
-
Upgrade requests to 2.32.5+ — fixes CVE-2023-32681 (proxy header leak), CVE-2024-35195 (
verify=Falsepersistence bug). Mettre à niveau requests vers 2.32.5+ — corrige CVE-2023-32681 (fuite header proxy), CVE-2024-35195 (bug persistanceverify=False). - Update certifi to 2026.1.4+ — ensures TLS validation uses the current CA bundle. Old certifi = outdated trust store. Mettre à jour certifi vers 2026.1.4+ — garantit que la validation TLS utilise le bundle CA actuel. Vieux certifi = magasin de confiance obsolète.
-
Set
redirect=Falsefor requests to untrusted sources in streaming mode, even on patched versions — defense in depth. Configurerredirect=Falsepour les requêtes vers des sources non fiables en mode streaming, même sur les versions patchées — défense en profondeur. -
Never use
verify=Falsein production — disables all TLS certificate validation and enables MITM attacks. Use custom CA bundles for internal PKI instead. Ne jamais utiliserverify=Falseen production — désactive toute validation de certificat TLS et permet les attaques MITM. Utilisez des bundles CA personnalisés pour la PKI interne. -
Validate user-supplied URLs before passing them to
requests.get()— block private IPs, link-local ranges (169.254.x.x), and localhost to prevent SSRF. Valider les URLs fournies par l’utilisateur avant de les passer àrequests.get()— bloquer les IP privées, les plages link-local (169.254.x.x) et localhost pour prévenir les SSRF. -
Pin urllib3 as a direct dependency in
pyproject.tomlorrequirements.txt— prevents resolution to a vulnerable version via transitive dependency updates. Épingler urllib3 comme dépendance directe danspyproject.tomlourequirements.txt— empêche la résolution vers une version vulnérable lors des mises à jour de dépendances transitives. -
Run
pip-auditin CI — automated check on every commit. Add--strictto block merges when CVEs are found in the dependency tree. Exécuterpip-auditen CI — vérification automatisée à chaque commit. Ajoutez--strictpour bloquer les merges quand des CVE sont trouvées dans l’arbre de dépendances. -
Set explicit timeouts — always use
requests.get(url, timeout=10). Without a timeout, a slow server can hold connections open indefinitely, enabling resource exhaustion independently of decompression bombs. Définir des timeouts explicites — toujours utiliserrequests.get(url, timeout=10). Sans timeout, un serveur lent peut maintenir les connexions ouvertes indéfiniment, permettant l’épuisement des ressources indépendamment des bombes de décompression.
Frequently Asked Questions
Questions fréquentes
Am I affected by CVE-2025-66471 if I use requests, not urllib3 directly?
Suis-je affecté par CVE-2025-66471 si j’utilise requests, pas urllib3 directement ?
Yes. requests uses urllib3 as its internal HTTP engine. If your environment has urllib3 < 2.6.0 installed, you are vulnerable regardless of whether you imported urllib3 in your code. Run pip show urllib3 to check your installed version.
Oui. requests utilise urllib3 comme moteur HTTP interne. Si votre environnement a urllib3 < 2.6.0 installé, vous êtes vulnérable, que vous ayez importé urllib3 dans votre code ou non. Exécutez pip show urllib3 pour vérifier votre version installée.
I upgraded to urllib3 2.6.1 to fix CVE-2025-66471 — am I still vulnerable?
J’ai mis à niveau vers urllib3 2.6.1 pour corriger CVE-2025-66471 — suis-je encore vulnérable ?
Yes, partially. urllib3 2.6.0–2.6.2 patched CVE-2025-66471 (streaming API), but the redirect path remained vulnerable via CVE-2026-21441 until version 2.6.3. You need to upgrade to urllib3 2.6.3 or higher to be fully protected against both decompression bomb CVEs.
Oui, partiellement. urllib3 2.6.0–2.6.2 a corrigé CVE-2025-66471 (API streaming), mais le chemin de redirection est resté vulnérable via CVE-2026-21441 jusqu’à la version 2.6.3. Vous devez mettre à niveau vers urllib3 2.6.3 ou supérieur pour être pleinement protégé contre les deux CVE de bombes de décompression.
Does CVE-2025-66471 require the attacker to control the server I’m connecting to?
CVE-2025-66471 nécessite-t-elle que l’attaquant contrôle le serveur auquel je me connecte ?
Yes — the vulnerability is exploitable when your application fetches data from a server under attacker control, such as a user-supplied URL, a third-party webhook endpoint, or a compromised CDN. If you only make HTTP requests to your own controlled infrastructure, the risk is lower, but the upgrade is still recommended.
Oui — la vulnérabilité est exploitable quand votre application récupère des données depuis un serveur sous contrôle de l’attaquant, comme une URL fournie par l’utilisateur, un endpoint webhook tiers, ou un CDN compromis. Si vous ne faites des requêtes HTTP qu’vers votre propre infrastructure contrôlée, le risque est moindre, mais la mise à niveau est toujours recommandée.
Is CVE-2023-32681 still relevant in 2026?
CVE-2023-32681 est-elle toujours pertinente en 2026 ?
Yes. IBM continued issuing security bulletins for CVE-2023-32681 into 2026 for enterprise products (IBM Maximo, IBM InfoSphere, IBM Process Mining). Many enterprise Python deployments inherit dependencies with old versions of requests. If you use proxies with credentials and have not updated to requests 2.31.0+, this CVE can leak your proxy credentials to destination servers.
Oui. IBM a continué d’émettre des bulletins de sécurité pour CVE-2023-32681 jusque en 2026 pour les produits enterprise (IBM Maximo, IBM InfoSphere, IBM Process Mining). De nombreux déploiements Python enterprise héritent de dépendances avec de vieilles versions de requests. Si vous utilisez des proxies avec des credentials et n’avez pas mis à jour vers requests 2.31.0+, cette CVE peut faire fuiter vos credentials proxy vers les serveurs de destination.
Does urllib3 1.x get security backports?
urllib3 1.x reçoit-elle des backports de sécurité ?
urllib3 1.x is in maintenance-only mode and receives limited security backports. Version 1.26.20 backported CVE-2024-37891 (proxy header leak), but not the decompression bomb CVEs. If you are stuck on 1.x due to Python 2 constraints or legacy dependencies, upgrade to 1.26.20 as a minimum, but plan a migration to urllib3 2.x as soon as possible.
urllib3 1.x est en mode maintenance uniquement et reçoit des backports de sécurité limités. La version 1.26.20 a backporté CVE-2024-37891 (fuite header proxy), mais pas les CVE de bombes de décompression. Si vous êtes bloqué sur 1.x en raison de contraintes Python 2 ou de dépendances legacy, mettez à niveau vers 1.26.20 au minimum, mais planifiez une migration vers urllib3 2.x dès que possible.
How do I automate tracking of urllib3/requests CVEs going forward?
Comment automatiser le suivi des CVE urllib3/requests à l’avenir ?
Use a continuous monitoring tool that scans your requirements.txt, poetry.lock, or Pipfile.lock daily against the OSV.dev database. CVE OptiBot monitors your lockfiles and sends alerts the same day a new CVE is published — catching vulnerabilities in transitive dependencies like urllib3 that you didn’t install directly.
Utilisez un outil de monitoring continu qui scanne vos fichiers requirements.txt, poetry.lock, ou Pipfile.lock quotidiennement contre la base OSV.dev. CVE OptiBot surveille vos lockfiles et envoie des alertes le jour même de la publication d’une nouvelle CVE — capturant les vulnérabilités dans les dépendances transitives comme urllib3 que vous n’avez pas installées directement.
Monitor your Python dependencies automatically
Surveillez vos dépendances Python automatiquement
CVE OptiBot scans your requirements.txt, poetry.lock, and Pipfile.lock daily. Get alerted the same day a new urllib3 or requests CVE is published — including transitive dependencies you never installed directly.
CVE OptiBot scanne vos fichiers requirements.txt, poetry.lock et Pipfile.lock chaque jour. Soyez alerté le jour même où une nouvelle CVE urllib3 ou requests est publiée — y compris les dépendances transitives que vous n’avez jamais installées directement.