CVE-2025-9074 (учебный PoC / код доказательства концепции)
Этот репозиторий содержит PoC, демонстрирующий в образовательных целях риск создания привилегированного контейнера с доступом на чтение/запись к файловой системе хоста через неаутентифицированный удалённый API Docker Engine.
Исполняемый файл — poc.go.
Важно: используйте этот PoC только в образовательных и защитных целях. Запрещается запуск в чужих средах или на системах без разрешения.
Оценка опасности
- Общая оценка: критическая
- Предполагаемая базовая оценка CVSS v3.1: 9.8 (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)
- Обоснование:
- Доступ к TCP/2375 без аутентификации → PR:N, UI:N, AV:N
- Привилегированный контейнер + bind mount хоста приводят к изменению области воздействия и высокому влиянию на конфиденциальность/целостность/доступность → S:C, C/I:A:H
- Атака выполняется всего несколькими HTTP-запросами к API Docker Engine → AC:L
- Область воздействия:
- Вся ОС хоста, другие контейнеры, активы в той же сети (включая кражу учётных данных и горизонтальное перемещение)
- Требуемые права:
- Без аутентификации (PR:N). Права администратора не требуются
Предыстория
- Docker Engine предоставляет удалённый API, управлять которым можно через такие конечные точки, как
/version, /info, /containers/create.
- Если контейнер доступен извне, в некоторых случаях можно без аутентификации создавать контейнеры, предоставлять привилегии и выполнять bind mount каталогов хоста.
- В среде Windows + Docker Desktop существуют пути монтирования, позволяющие получить доступ к дискам Windows-хоста через
/run/desktop/mnt/host/<drive> или /host_mnt/<drive>. Данный PoC использует этот путь для наглядной демонстрации воздействия путём создания файла на хосте.
Обзор работы
poc.go выполняет следующее:
- Вызывает API Docker Engine по адресу
http://192.168.65.7:2375 для проверки доступности (/version)
- Проверяет список доступных образов (
/images/json) и, если их нет, пытается загрузить alpine:latest
- Создаёт привилегированный контейнер и монтирует диски хоста (например, C:, N:) в
/host_root через bind mount
- Записывает проверочный файл (например,
cve_2025_9074_poc.txt) в /host_root из контейнера для наглядной демонстрации воздействия
- После выполнения удаляет контейнер
Риски (предполагаемое злоупотребление)
- Чтение и запись файловой системы хоста (в пределах прав, предоставляемых Docker Engine)
- Хищение конфиденциальной информации (пароли, SSH-ключи и т.д.)
- Подмена файлов системных настроек
- Установка вредоносного ПО, закрепление в системе
- Горизонтальное перемещение на другие контейнеры и в сеть
- Повышение привилегий
Требования
- Go 1.20+ или новее (работает через
go run)
- Запущенный Docker Desktop/Engine (с уязвимостью)
- Запуск этого кода внутри Docker-контейнера, работающего на Docker Desktop/Engine (с уязвимостью)
- Состояние, при котором API Docker Engine отвечает по адресу
http://192.168.65.7:2375 (значение по умолчанию для PoC)
Использование
-
Клонирование репозитория
git clone <this-repo>
cd cve-2025-9074
-
Запуск PoC
-
Пример вывода
- Отображение успешной проверки доступности
/version
- Обнаружение используемого образа или загрузка
alpine:latest
- Создание привилегированного контейнера, результат создания файла на хосте
- Отображение выдержки системной информации на основе
/info
-
Примеры curl для демонстрации (выводятся на экран)
- Пример JSON для
/containers/create, пример запуска /containers/{id}/start
Настройка конфигурации
- Массив путей-кандидатов в
attemptHostWrite (/run/desktop/mnt/host/<drive>, /host_mnt/<drive>, C:/ и т.д.) можно настроить под ваше окружение.
- Используемый образ
- Приоритет отдаётся существующим образам. Если их нет,
alpine:latest загружается автоматически.
Примечания по тестовой среде
- Содержит примеры путей монтирования, рассчитанные на работу в среде Windows + Docker Desktop.
- В случае macOS пути хоста отличаются, поэтому их необходимо соответствующим образом изменить.
- В зависимости от версии и настроек Docker Desktop PoC может не сработать (= безопасно).
Отказ от ответственности
- Этот репозиторий предназначен исключительно для исследовательских и образовательных целей. Он не поощряет атаки, вторжения или разрушительные действия.
- Автор не несёт ответственности за любой ущерб, возникший в результате использования данного PoC.
- Не запускайте его вне изолированной среды, на которую у вас есть законные права администратора.
Лицензия