
Unabhängige Offline-Regression von CVE-2026-44431 über gepinnte urllib3-Releases hinweg, mit Attribution des ursprünglichen Melders.
CVE-2026-44431 · urllib3 2.6.3 → 2.7.0 · reproduziert am 27. September 2026
Eine Anfrage trägt drei sensible Header an einen Origin. Ein Redirect ändert das Ziel. Trägt die nächste Anfrage sie noch?
Diese unabhängige Regression führt die echte Redirect-Implementierung aus zwei exakten urllib3-Releases aus. Version 2.6.3 behält alle drei Header über die betroffene Low-Level-API bei. Version 2.7.0 entfernt sie. Ein harmloser Header überlebt, und gewöhnliche Anfragen funktionieren weiterhin.
| Fixture | urllib3 2.6.3 | urllib3 2.7.0 |
|---|---|---|
| Low-Level Cross-Origin-Redirect | 3 sensible Header beibehalten | 0 beibehalten |
| Derselbe Fall mit kleingeschriebenen Namen | 3 beibehalten | 0 beibehalten |
| High-Level-API-Kontrolle | 0 beibehalten | 0 beibehalten |
| Direkte 200-Antwort | 3 wie beabsichtigt beibehalten | 3 wie beabsichtigt beibehalten |
| Redirect explizit deaktiviert | Ein Aufruf; 302 zurückgegeben | Ein Aufruf; 302 zurückgegeben |
| Benutzerdefiniertes Entfernungsset fügt harmlosen Marker hinzu | Alle 4 Header beibehalten | Alle 4 entfernt |
12/12 Szenario-Erwartungen erfüllt. Jedes Szenario prüft außerdem den Antwortstatus, die Anzahl der Transportaufrufe, den anfänglichen Header-Satz, das Ergebnis des harmlosen Headers und dass die Header des Aufrufers nicht verändert wurden. Das verwundbare Ergebnis ist ein erwartetes Baseline-Ergebnis, keine bestandene Sicherheitsprüfung.
Maschinenlesbare Ergebnisse enthalten die erfassten Argumente, exakte Wheel-Hashes, Laufzeit, Testquell-Hashes, Attribution und Reproduktionszeit.
Die Upstream-Advisory, veröffentlicht am 7. Mai 2026, identifiziert ein Informationsoffenlegungsproblem im proxied Low-Level-Redirect-Pfad von urllib3. Sie listet die Versionen >=1.23, <2.7.0 als betroffen auf. Der Aufruf von ProxyManager.connection_from_url(...).urlopen(..., assert_same_host=False) konnte konfigurierte sensible Header in eine weitergeleitete Anfrage an einen anderen Origin übertragen. Die High-Level-Manager-API entfernte sie bereits.
Der Upstream-Fix wendet Retry.remove_headers_on_redirect vor der rekursiven Low-Level-Anfrage an. Unser Fall mit kleingeschriebenen Headern folgt der Aufmerksamkeit der Upstream-Regression für die Groß-/Kleinschreibung von Header-Namen. Der Fall mit benutzerdefinierter Entfernung prüft, dass die Regel das konfigurierte Set berücksichtigt, über die drei Standardnamen hinaus.
Die Advisory nennt christos-cantina-security als Reporter, illia-v als Koordinator und sethmlarson als Reviewer der Behebung. Sergio Rodriguez' Beitrag hier ist die unabhängige Offline-Testumgebung und die Vorher-/Nachher-Analyse. Dies ist eine Reproduktion ihres veröffentlichten CVE.
Verwenden Sie Python 3.10 oder später. Kein pip install oder virtuelle Umgebung ist erforderlich: Jede Version wird direkt aus ihrem Pure-Python-Wheel in einem frischen isolierten Subprozess importiert.
Vom Stammverzeichnis des Portfolio-Repositories aus:
python -B ./labs/cve-replay/run_replay.py --fetch
python -B ./labs/cve-replay/run_replay.py
Der erste Befehl lädt die beiden exakten Wheels in das ignorierte .cache/wheels/-Verzeichnis des Labs herunter und prüft ihre SHA-256-Hashes gegen das Manifest. Der zweite Befehl verwendet diesen Cache ohne Download. Für einen eigenständigen Source-Checkout führen Sie python -B run_replay.py --fetch aus, dann denselben Befehl ohne --fetch. --cache akzeptiert ein anderes lokales Cache-Verzeichnis.
HTTPConnectionPool._make_request wird durch einen Transport mit zwei Antworten ersetzt: eine 302 mit fester Location, dann eine 200. Das Fixture erfasst die Argumente, die diese Grenze erreichen. urllib3s Parsing, Retry-Policy, Header-Filterung und rekursive Redirect-Behandlung laufen unverändert aus dem ausgewählten Wheel.
Alle Ziele sind feste reservierte .invalid-Namen; alle Header-Werte beginnen mit DUMMY. Socket-Konstruktion und DNS-Funktionen werfen sofort Fehler. Die Importzeit-IPv6-Fähigkeitsprüfung der Bibliothek wird verweigert und separat aufgezeichnet; die Replay-Szenarien versuchen keine Netzwerkoperationen. Es gibt keinen lauschenden Server oder Live-Ziel.
Dies validiert die Behandlung von Redirect-Argumenten. Es misst keinen End-to-End-Proxy-Verkehr. Version 2.7.0 ist der erste Fix für diesen speziellen CVE; dieser historische Vergleich ist keine Empfehlung, sie neueren unterstützten Releases vorzuziehen.
Die Fixture-Skripte und die Analyse sind originale Portfolio-Arbeit. urllib3 ist ein Upstream-Projekt, das unter seiner MIT-Lizenz vertrieben wird; sein Code und seine Release-Wheels werden im Portfolio-Quellarchiv nicht weiterverbreitet. Sie werden separat von PyPI heruntergeladen und für das Experiment unverändert importiert.