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

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

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

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

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

Категории

Все категории
Loading categories
POC-CopyEscape-CVE-2026-17106 — Функциональный PoC для CVE-2026-17106 (CopyEscape): гонка TOCTOU в docker cp, допускающая произвольную запись на хосте Docker. Лаборатория Docker + монитор inotify + LD_PRELOAD. Вариант для macOS безвреден, для Linux — разрушителен. | Kitploit
Инструменты/GitHubGitHub/686f6c61/poc-copyescape-cve-2026-17106
Повышение привилегийБезопасность контейнеровАнализ уязвимостейЭксплуатацияОбучение и ОбразованиеПобег из КонтейнераСостязательная АтакаЛаборатории и Практика

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
GitHub
686f6c61/poc-copyescape-cve-2026-17106

POC-CopyEscape-CVE-2026-17106

Функциональный PoC для CVE-2026-17106 (CopyEscape): гонка TOCTOU в docker cp, допускающая произвольную запись на хосте Docker. Лаборатория Docker + монитор inotify + LD_PRELOAD. Вариант для macOS безвреден, для Linux — разрушителен.

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

CopyEscape — PoC для CVE-2026-17106

Образовательный PoC для CopyEscape (CVE-2026-17106), уязвимость состояния гонки TOCTOU в docker cp, которая позволяет вредоносному контейнеру записывать произвольные файлы на хост Docker. Вдохновлено оригинальной работой masasron, который обнаружил и задокументировал уязвимость в блоге "CopyEscape: Taking Over Docker Hosts with docker cp".


Содержание

  1. Краткое описание
  2. Правовое уведомление
  3. Архитектура цепочки
  4. Требования
  5. Структура репозитория
  6. Краткое руководство по использованию
  7. Проверка эксплуатации
  8. Сравнение с оригиналом
  9. Митигация
  10. Благодарности
  11. Лицензия

Краткое описание

CVE-2026-17106 — это уязвимость состояния гонки (TOCTOU) при извлечении tar-файла, который демон Docker создаёт во время docker cp <contenedor>:<ruta> <destino>. Затрагивает Docker CLI 29.6.1 и более ранние версии; исправлена начиная с 29.7.0. Ошибка находится в CLI (извлечение tar на хосте), а не в демоне.

Цепочка, названная CopyEscape, демонстрирует, как, имея только запущенный контейнер без дополнительных возможностей, атакующий может:

  1. Замаскировать реальный каталог /watched/file.txt/ под обычный файл для любого процесса, открывающего его внутри контейнера, с помощью библиотеки LD_PRELOAD, перехватывающей open, openat, openat2, fopen, stat, lstat, fstatat, statx и варианты 64.
  2. Держать файл-приманку aaa.txt размером 16 МиБ, вынуждающий демон тратить достаточно времени на создание tar, чтобы монитор успевал выиграть гонку.
  3. Отслеживать с помощью inotify обращения демона и в окне гонки заменять подкаталог escape/ на абсолютную символическую ссылку к целевой директории хоста (/Users/<usuario> в macOS или /usr/bin в Linux) с помощью двух атомарных rename(2) с откатом.
  4. Полученный tar содержит символическую ссылку escape, за которой следует дочерняя запись escape/<basename>; уязвимая CLI создаёт символическую ссылку на клиенте и извлекает дочернюю запись через неё, записывая за пределы выбранного пользователем места назначения.

Результат — произвольная запись файлов на хост с правами процесса, выполняющего docker cp. Вариант Linux перезаписывает /usr/bin/runc и добивается выполнения кода с правами root на хосте при следующем docker run / exec.


Правовое уведомление

Этот репозиторий содержит строго образовательные и защитные материалы.

  • Цель: продемонстрировать цепочку эксплуатации для обучения, собственного аудита и проверки патчей.
  • Разрешённое использование: запускайте её только против систем, которые принадлежат вам или на которые у вас есть явное письменное разрешение.
  • Запрещено: любое использование против сторонних систем без согласия. Автор репозитория не несёт ответственности за неправомерное использование материалов, включённых сюда.
  • Ответственность: оператор несёт единоличную ответственность за соблюдение применимого законодательства (LOPD/RGPD в Испании, CFAA в США и т. д.).
  • Вариант Linux разрушает runc хоста: используйте его только в одноразовой ВМ с проверенной резервной копией.

PoC поставляется с безвредным вариантом для macOS (записывает ~/pwnd в качестве маркера), единственная цель которого — служить воспроизводимой демонстрацией.


Архитектура цепочки

┌─────────────────────────────────────────────────────────────────────┐
│  1. LD_PRELOAD camufla /watched/file.txt como archivo regular       │
│     open/openat/openat2/fopen/stat/lstat/fstatat/statx → decoy       │
│     docker exec ... cat /watched/file.txt  →  "top-level file"       │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  2. Layout real dentro del contenedor                               │
│     /watched/file.txt/                                               │
│     ├── aaa.txt            (16 MiB de 'B', cebo lento)               │
│     ├── escape/            (directorio real inicial)                 │
│     ├── escape/<basename>  (payload: runc o pwnd)                    │
│     └── .swap-escape       (symlink → /Users/<usr> o /usr/bin)       │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  3. docker cp pide tar al daemon                                    │
│     daemon recorre /watched/file.txt/ y abre aaa.txt                │
│     inotify detecta IN_OPEN sobre aaa.txt                           │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  4. Monitor pivot: dos rename(2) atomicos con rollback              │
│     escape/ → .old-escape/   (backup)                                │
│     .swap-escape → escape/   (symlink al target del host)            │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  5. Tar resultante contiene:                                        │
│     escape → /Users/<usr>   (symlink absoluto)                       │
│     escape/<basename>        (entrada hija que atraviesa el symlink) │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  6. CLI vulnerable extrae symlink + hija                            │
│     crea escape → /Users/<usr> en el destino local                   │
│     extrae escape/<basename> A TRAVES del symlink                    │
│     escribe /Users/<usr>/<basename> en el host                       │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  macOS: ~/pwnd con "COPYESCAPE_MACOS_DEMO"  (demo inocua)           │
│  Linux: /usr/bin/runc sobrescrito          (RCE como root)          │
└─────────────────────────────────────────────────────────────────────┘

Требования

PoC предназначена для запуска в macOS со следующими требованиями:

  • Запущенный Docker Desktop 4.81+ (демон может быть любой версии; ошибка в CLI).
  • curl, tar, git и docker в PATH.
  • Подключение к интернету для загрузки уязвимой CLI 29.6.1 (около 18 МБ) и базового образа alpine:3.21.
  • HOME в виде /Users/<usuario>.

Для варианта macOS root не требуется. Вариант Linux требует root и одноразовую VM.

Скрипт run-poc.sh автоматически загружает бинарный файл уязвимой CLI 29.6.1 с официального сайта Docker (download.docker.com). Он не изменяет установленную в системе Docker Desktop: используется текущий демон, но для операции docker cp вызывается загруженный бинарный файл.


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

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