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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2007-4559-lab — Автономная лаборатория Docker, демонстрирующая обход каталогов CVE-2007-4559 (TarSlip) через модуль tarfile Python. Включает уязвимые и исправленные API, генерацию полезной нагрузки и интерактивный демонстрационный скрипт для обучения безопасности. | Kitploit
Инструменты/GitHubGitHub/jithinodattu/cve-2007-4559-lab
Статический анализАнализ уязвимостейАнализ КодаЭксплуатация веб-приложенийCTFБезопасность Цепочки ПоставокОбучение и ОбразованиеЭксплуатация Бинарных ФайловЛаборатории и Практика
GitHubjithinodattu/cve-2007-4559-lab

CVE-2007-4559-lab

Автономная лаборатория Docker, демонстрирующая обход каталогов CVE-2007-4559 (TarSlip) через модуль tarfile Python. Включает уязвимые и исправленные API, генерацию полезной нагрузки и интерактивный демонстрационный скрипт для обучения безопасности.

Репозиторий
155 месяцев назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2007-4559 — TarSlip: 15-летний обход каталогов

Только для образовательных целей. Эта лаборатория намеренно эксплуатирует уязвимости файловой системы в изолированных Docker-контейнерах. Не запускайте в системах с конфиденциальными данными или в производственных средах.

Автономная Docker-лаборатория, демонстрирующая CVE-2007-4559 — печально известную уязвимость «TarSlip» в модуле Python tarfile — через полную цепочку атак «от начала до конца»:

  1. Злоумышленник загружает поддельный tarball в API для загрузки файлов.
  2. extractall() слепо записывает запись tar с именем ../../../etc/passwd за пределами каталога распаковки, перезаписывая реальный системный файл.
  3. Внедрённый пароль предоставляет злоумышленнику доступ к защищённой конечной точке /admin.
  4. Затем та же атака выполняется против исправленного API — и блокируется одной строкой кода.

Уязвимость

tarfile.extractall() в Python добросовестно воспроизводит каждую запись в архиве tar, включая записи, имена которых содержат последовательности обхода каталогов ../. Она никогда не задумывалась как граница безопасности.

имя записи tar  : ../../../etc/passwd
каталог извлечения : /shared/uploads/a1b2c3d4/

разрешённый путь  : /shared/uploads/a1b2c3d4/../../../etc/passwd
               = /etc/passwd   ← системный файл перезаписан
Хронология
2007Ошибка сообщена группе безопасности Python
2007 – 2022Отмечено как «не проблема безопасности» — tarfile «работает как задумано»
2022Исследователи Trellix сканируют GitHub и находят более 350 000 репозиториев, вызывающих extractall() для непроверенных входных данных
2022Публичное раскрытие. CVE-2007-4559 всплывает снова. Паника в индустрии.
2023PEP 706 включает filter='data' в Python 3.12 — исправление в одном аргументе

Что показывает демонстрация

Демонстрация проходит в три этапа, каждый из которых требует нажатия клавиши для продолжения.

Этап 1 — Базовый уровень

  • GET /admin → 401. Конечная точка admin существует и защищена. Злоумышленник не знает пароль.
  • Загрузка innocent.tar.gz → файлы попадают в каталог песочницы. Всё выглядит нормально.

Этап 2 — Эксплойт

Злоумышленник создаёт tarslip_passwd.tar.gz
  └─ запись: "../../../etc/passwd"
       содержимое: admin:hacked:1001:...   ← внедрённый пароль
            │
            ▼
  POST /upload  (загрузка multipart-файла)
            │
            ▼
  extractall("/shared/uploads/{uuid}/")
  разрешает "../../../etc/passwd" → /etc/passwd   ← CVE-2007-4559
            │
            ▼
  GET /admin   Authorization: Basic admin:hacked
            │
            ▼
  HTTP 200 — «Welcome, admin! You have full admin access.»
  флаг: CVE-2007-4559{tarslip_passwd_overwrite_to_admin_rce}

Один HTTP POST. Никакой оболочки. Никакой RCE-нагрузки. Просто tar-файл.

Этап 3 — Исправление

Тот же tarball загружается в исправленный API, который передаёт filter='data' в extractall(). Python вызывает tarfile.OutsideDestinationError — обход блокируется, /etc/passwd не тронут, а /admin остаётся закрытым.

# Уязвимый — по умолчанию до Python 3.14
tar.extractall(extraction_dir)

# Исправленный — PEP 706 (Python 3.12+)
tar.extractall(extraction_dir, filter='data')

Один аргумент. Пятнадцать лет на внедрение.


Архитектура

Четыре сервиса в изолированной сети Docker bridge (tarslip-net). Ничего не выходит в интернет.

┌─────────────────────────────────────────────────────────┐
│                    tarslip-net (bridge)                  │
│                                                          │
│  ┌─────────────────┐      ┌──────────────────────────┐  │
│  │  vulnerable-api │      │       file-server        │  │
│  │  python:3.11.3  │      │       nginx:alpine       │  │
│  │  порт 8000      │      │       порт 8080 (хост)   │  │
│  │                 │      │                          │  │
│  │  POST /upload   │      │  Обслуживает /shared по  │  │
│  │  GET  /admin    │      │  HTTP — визуальный про-  │  │
│  │  GET  /health   │      │  смотр извлечённых       │  │
│  └────────┬────────┘      └────────────┬─────────────┘  │
│           │  том shared-storage        │                 │
│           └────────────────────────────┘                 │
│                                                          │
│  ┌─────────────────┐                                     │
│  │    attacker     │                                     │
│  │  python:3.12    │  (нет порта хоста — только внутренний)│
│  │                 │                                     │
│  │  craft_malicious.py  — генерирует tarball'ы           │
│  │  demo.py             — управляет демонстрацией        │
│  └─────────────────┘                                     │
└─────────────────────────────────────────────────────────┘
СервисОбразРольПорт хоста
vulnerable-apipython:3.11.3-slimFlask API загрузки + /admin, защищённый аутентификацией через /etc/passwd8000
fixed-apipython:3.12-slimТот же код + USE_SAFE_EXTRACTION=true8000
file-servernginx:alpineСписок каталогов извлечённых файлов8080
attackerpython:3.12-slimГенератор нагрузок + драйвер демонстрации—

Уязвимый и исправленный API используют идентичный исходный код. Единственное отличие — переменная окружения USE_SAFE_EXTRACTION=true в исправленном контейнере, которая включает единственный аргумент filter='data'.


Структура репозитория

CVE-2007-4559-lab/
├── run_demo.sh                      ← начните здесь
├── docker-compose.vulnerable.yml
├── docker-compose.fixed.yml
├── vulnerable-api/
│   ├── app.py                       # Flask API: /upload + /admin + /health
│   ├── Dockerfile                   # вносит admin:s3cr3t_Adm1nPass в /etc/passwd
│   └── requirements.txt
├── file-server/
│   ├── Dockerfile
│   └── nginx.conf
└── attacker/
    ├── craft_malicious.py           # генерирует innocent.tar.gz + tarslip_passwd.tar.gz
    ├── demo.py                      # CLI-драйвер с четырьмя режимами (craft/baseline/exploit/verify)
    ├── Dockerfile
    └── requirements.txt

Предварительные требования

  • Docker 20.10+ с плагином Compose (docker compose version)
  • macOS / Linux — скрипт использует bash
  • Порты 8000 и 8080 свободны на вашем хосте

Запуск демонстрации

git clone https://github.com/your-username/CVE-2007-4559-lab.git
cd CVE-2007-4559-lab
bash run_demo.sh

Скрипт полностью интерактивен. Он печатает пояснения перед каждым шагом и ждёт нажатия Enter для продолжения. Для понимания не требуется предварительных знаний Docker.

Что охватывает каждая точка паузы

ПаузаПоказываемое описаниеДействие по Enter
1Хронология CVE, описание трёх этаповСборка уязвимого стека
2Роли контейнеров, внедрённый пароль администратораГенерация нагрузок
3Что внутри каждого tarball'аЭтап 1 — базовый уровень
4Почему /admin возвращает 401, как выглядит обычная распаковкаЭтап 2 — эксплойт
5Точные вычисления обхода, что перезаписываетсяПереключение на исправленный стек
6Что такое filter='data' и почему это работаетЭтап 3 — проверка
7Ключевые выводы + более общий паттерн ZipSlipОстановка

Запуск этапов по отдельности

Если вы хотите пройти шаги вручную:

# Уязвимый стек
docker compose -f docker-compose.vulnerable.yml up --build -d
docker compose -f docker-compose.vulnerable.yml exec attacker python craft_malicious.py
docker compose -f docker-compose.vulnerable.yml exec attacker python demo.py baseline
docker compose -f docker-compose.vulnerable.yml exec attacker python demo.py exploit
Скачать инструмент