
Recherche par diff de correctifs pour les problèmes urllib3 publiés : versions épinglées, harnais hors ligne originaux, comportement avant/après et contrôles bénins.
Créé et maintenu par Sergio Rodriguez (SSH-PuR66). Le banc d'expérimentation et l'analyse sont les miens ; les vulnérabilités publiées, le code urllib3 et les correctifs amont conservent leur attribution d'origine.
Méthode de recherche de l'auteur · Banc de redirection · Étude du cadrage par chunks
Une redirection change la destination tandis que trois en-têtes sensibles restent attachés. Un analyseur de cadrage accepte une entrée que la version suivante rejette. Afterimage transforme les correctifs de protocole publiés en petites expériences avant/après inspectables.
J'ai construit les bancs d'expérimentation et les cas de contrôle autour de versions d'urllib3 épinglées et non modifiées. Chaque résultat enregistre le hash du paquet, le comportement capturé, la frontière du fixture et l'attribution amont.
| Étude | Versions comparées | Corpus enregistré | Inspecter |
|---|---|---|---|
| Frontière des en-têtes de redirection · CVE-2026-44431 | urllib3 2.6.3 / 2.7.0 | 12 cas, dont le comportement affecté et des contrôles bénins | Résultats · Banc |
| Cadrage par chunks · CVE-2026-97689 | urllib3 2.7.0 / 2.8.0 | 32 cas hors ligne bornés | Méthode et résultats |
Type de recherche : reproduction indépendante de problèmes publiés. Frontière mesurée : gestion des arguments de la bibliothèque et comportement de cadrage en mémoire. L'exploitabilité applicative et l'épuisement des ressources restent hors du périmètre de ces résultats de fixtures.
CVE-2026-44431 · urllib3 2.6.3 → 2.7.0 · reproduit le 27 septembre 2026
Une requête transporte trois en-têtes sensibles vers une origine. Une redirection change la destination. La requête suivante les transporte-t-elle encore ?
Cette régression indépendante exécute l'implémentation réelle de redirection de deux versions exactes d'urllib3. La version 2.6.3 conserve les trois en-têtes à travers l'API de bas niveau affectée. La version 2.7.0 les supprime. Un en-tête bénin survit, et les requêtes ordinaires fonctionnent toujours.
| Fixture | urllib3 2.6.3 | urllib3 2.7.0 |
|---|---|---|
| Redirection inter-origines de bas niveau | 3 en-têtes sensibles conservés | 0 conservé |
| Même cas avec des noms en minuscules | 3 conservés | 0 conservé |
| Contrôle de l'API de haut niveau | 0 conservé | 0 conservé |
| Réponse 200 directe | 3 conservés comme prévu | 3 conservés comme prévu |
| Redirection explicitement désactivée | Un appel ; 302 renvoyé | Un appel ; 302 renvoyé |
| Ensemble de suppression personnalisé ajoutant un marqueur bénin | Les 4 en-têtes conservés | Les 4 supprimés |
12/12 attentes de scénario satisfaites. Chaque scénario vérifie également le statut de la réponse, le nombre d'appels de transport, l'ensemble d'en-têtes initial, le résultat de l'en-tête bénin, et que les en-têtes de l'appelant n'ont pas été mutés. Le résultat vulnérable est un résultat de référence attendu, et non une vérification de sécurité réussie.
Les résultats lisibles par machine incluent les arguments capturés, les hashes exacts des wheels, le runtime, les hashes des sources de test, l'attribution et l'heure de reproduction.
L'avis amont, publié le 7 mai 2026, identifie un problème d'exposition d'informations dans le chemin de redirection de bas niveau proxifié d'urllib3. Il liste les versions >=1.23, <2.7.0 comme affectées. L'appel à ProxyManager.connection_from_url(...).urlopen(..., assert_same_host=False) pouvait transporter des en-têtes sensibles configurés dans une requête redirigée vers une autre origine. L'API de gestionnaire de haut niveau les supprimait déjà.
Le correctif amont applique Retry.remove_headers_on_redirect avant la requête récursive de bas niveau. Notre cas d'en-têtes en minuscules suit l'attention portée par la régression amont à la casse des noms d'en-têtes. Le cas de suppression personnalisée vérifie que la règle respecte l'ensemble configuré, au-delà des trois noms par défaut.
L'avis crédite christos-cantina-security comme rapporteur, illia-v comme coordinateur et sethmlarson comme relecteur de la remédiation. La contribution de Sergio Rodriguez ici est le harnais hors ligne indépendant et l'analyse avant/après. Il s'agit d'une reproduction de leur CVE publiée.
Utilisez Python 3.10 ou une version ultérieure. Aucune installation via pip ni environnement virtuel n'est nécessaire : chaque version est importée directement depuis son wheel pure-Python dans un sous-processus isolé et neuf.
Depuis la racine du dépôt du portfolio :
python -B ./labs/cve-replay/run_replay.py --fetch
python -B ./labs/cve-replay/run_replay.py
La première commande télécharge les deux wheels exacts dans le répertoire .cache/wheels/ ignoré du lab et vérifie leurs hachages SHA-256 par rapport au manifeste. La seconde commande utilise ce cache sans téléchargement. Pour une copie source autonome, exécutez python -B run_replay.py --fetch, puis la même commande sans --fetch. --cache accepte un autre répertoire de cache local.
HTTPConnectionPool._make_request est remplacé par un transport à deux réponses : un 302 avec une location fixe, puis un 200. La fixture capture les arguments atteignant cette frontière. L'analyse, la politique de retry, le filtrage des en-têtes et la gestion récursive des redirections d'urllib3 s'exécutent sans modification depuis le wheel sélectionné.
Toutes les destinations sont des noms .invalid réservés fixes ; toutes les valeurs d'en-tête commencent par DUMMY. La construction de sockets et les fonctions DNS lèvent immédiatement une exception. La sonde de capacité IPv6 au moment de l'import de la bibliothèque est refusée et enregistrée séparément ; les scénarios de replay ne tentent aucune opération réseau. Il n'y a ni serveur en écoute ni cible live.
Cela valide la gestion des arguments de redirection. Cela ne mesure pas le trafic proxy de bout en bout. La version 2.7.0 est le premier correctif pour ce CVE particulier ; cette comparaison historique n'est pas une recommandation de la choisir plutôt que des versions supportées plus récentes.