
प्रकाशित urllib3 फिक्स के लिए स्वतंत्र ऑफ़लाइन प्रोटोकॉल-सीमा रिग्रेशन, पिन किए गए रिलीज़ और अपस्ट्रीम एट्रिब्यूशन के साथ।
पहले CVE Replay के रूप में प्रकाशित। रिपॉज़िटरी का नाम और प्रस्तुति बदल गई; pinned रिलीज़, मूल रिपोर्टर एट्रिब्यूशन, fixture पथ, और रिकॉर्ड किए गए परिणाम अपनी मूल पहचान बनाए रखते हैं।
स्वतंत्र ऑफ़लाइन अध्ययन सटीक रिलीज़ और सीमित fixtures का उपयोग करके प्रकाशित फ़िक्स की तुलना करते हैं। प्रत्येक अध्ययन अपने मापे गए व्यवहार, ट्रांसपोर्ट सीमा, और एट्रिब्यूशन को स्पष्ट रखता है।
CVE-2026-44431 · urllib3 2.6.3 → 2.7.0 · 27 सितंबर 2026 को पुनरुत्पादित
एक अनुरोध तीन संवेदनशील headers को एक origin तक ले जाता है। एक redirect गंतव्य बदल देता है। क्या अगला अनुरोध अभी भी उन्हें ले जाता है?
यह स्वतंत्र regression दो सटीक urllib3 रिलीज़ों से वास्तविक redirect कार्यान्वयन चलाता है। संस्करण 2.6.3 प्रभावित low-level API के माध्यम से सभी तीन headers बनाए रखता है। संस्करण 2.7.0 उन्हें हटा देता है। एक benign header बच जाता है, और सामान्य अनुरोध अभी भी काम करते हैं।
| Fixture | urllib3 2.6.3 | urllib3 2.7.0 |
|---|---|---|
| Low-level cross-origin redirect | 3 संवेदनशील headers बनाए रखे | 0 बनाए रखे |
| lowercase नामों के साथ वही मामला | 3 बनाए रखे | 0 बनाए रखे |
| High-level API नियंत्रण | 0 बनाए रखे | 0 बनाए रखे |
| Direct 200 प्रतिक्रिया | 3 इच्छानुसार बनाए रखे | 3 इच्छानुसार बनाए रखे |
| Redirect स्पष्ट रूप से अक्षम | एक कॉल; 302 लौटाया | एक कॉल; 302 लौटाया |
| Custom removal set benign marker जोड़ता है | सभी 4 headers बनाए रखे | सभी 4 हटाए गए |
12/12 परिदृश्य अपेक्षाएँ पास हुईं। प्रत्येक परिदृश्य प्रतिक्रिया स्थिति, transport कॉल गणना, प्रारंभिक header सेट, benign-header परिणाम, और यह भी जाँचता है कि caller के headers में परिवर्तन नहीं हुआ। कमज़ोर परिणाम एक अपेक्षित baseline परिणाम है, पास होने वाली सुरक्षा जाँच नहीं।
मशीन-पठनीय परिणाम में कैप्चर किए गए arguments, सटीक wheel hashes, runtime, test-source hashes, एट्रिब्यूशन, और पुनरुत्पादन समय शामिल हैं।
7 मई 2026 को प्रकाशित upstream advisory, urllib3 के proxied low-level redirect पथ में एक information-exposure मुद्दे की पहचान करता है। यह संस्करणों >=1.23, <2.7.0 को प्रभावित के रूप में सूचीबद्ध करता है। ProxyManager.connection_from_url(...).urlopen(..., assert_same_host=False) को कॉल करने पर कॉन्फ़िगर किए गए संवेदनशील headers किसी अन्य origin पर redirect किए गए अनुरोध में चले जा सकते थे। High-level manager API पहले से ही उन्हें हटा देता था।
upstream fix recursive low-level अनुरोध से पहले Retry.remove_headers_on_redirect लागू करता है। हमारा lowercase-header मामला header-name casing पर upstream regression के ध्यान का अनुसरण करता है। Custom-removal मामला जाँचता है कि नियम कॉन्फ़िगर किए गए सेट का सम्मान करता है, केवल तीन डिफ़ॉल्ट नामों से आगे।
Advisory christos-cantina-security को रिपोर्टर, illia-v को समन्वयक, और sethmlarson को remediation समीक्षक के रूप में श्रेय देता है। यहाँ Sergio Rodriguez का योगदान स्वतंत्र ऑफ़लाइन harness और before/after विश्लेषण है। यह उनके प्रकाशित CVE का पुनरुत्पादन है।
Python 3.10 या बाद का उपयोग करें। pip install या virtual environment आवश्यक नहीं है: प्रत्येक संस्करण सीधे एक नए पृथक subprocess में उसके pure-Python wheel से आयात किया जाता है।
Portfolio रिपॉज़िटरी रूट से:
python -B ./labs/cve-replay/run_replay.py --fetch
python -B ./labs/cve-replay/run_replay.py
पहला कमांड दो सटीक wheels को lab की अनदेखी की गई .cache/wheels/ निर्देशिका में डाउनलोड करता है और उनके SHA-256 hashes को manifest के विरुद्ध जाँचता है। दूसरा कमांड उस cache का उपयोग बिना डाउनलोड किए करता है। Standalone source checkout के लिए, python -B run_replay.py --fetch चलाएँ, फिर वही कमांड --fetch के बिना। --cache एक भिन्न स्थानीय cache निर्देशिका स्वीकार करता है।
HTTPConnectionPool._make_request को दो-प्रतिक्रिया transport से बदल दिया जाता है: एक निश्चित location के साथ 302, फिर 200। Fixture उस सीमा तक पहुँचने वाले arguments को कैप्चर करता है। urllib3 की parsing, retry policy, header filtering, और recursive redirect handling चयनित wheel से अपरिवर्तित निष्पादित होती हैं।
सभी गंतव्य निश्चित reserved .invalid नाम हैं; सभी header मान DUMMY से शुरू होते हैं। Socket निर्माण और DNS फ़ंक्शन तुरंत त्रुटि उठाते हैं। लाइब्रेरी की import-time IPv6 capability probe को अस्वीकार किया जाता है और अलग से रिकॉर्ड किया जाता है; replay परिदृश्य कोई नेटवर्क संचालन का प्रयास नहीं करते। कोई listening server या live target नहीं है।
यह redirect argument handling को मान्य करता है। यह end-to-end proxy ट्रैफ़िक को नहीं मापता। संस्करण 2.7.0 इस विशेष CVE के लिए पहला fix है; यह ऐतिहासिक तुलना इसे नए समर्थित रिलीज़ों पर चुनने की सिफ़ारिश नहीं है।
Fixture स्क्रिप्ट और विश्लेषण मूल portfolio कार्य हैं। urllib3 एक upstream प्रोजेक्ट है जो इसके MIT license के अंतर्गत वितरित किया जाता है; इसका कोड और release wheels portfolio source archive में पुनर्वितरित नहीं किए जाते। वे PyPI से अलग से डाउनलोड किए जाते हैं और प्रयोग के लिए अपरिवर्तित आयात किए जाते हैं।