
Эксплойт (концептуальное доказательство) для CVE-2025-9074, позволяющий осуществить побег из Docker Desktop API через сырые HTTP-запросы. Обеспечивает эмулированный интерактивный шелл внутри контейнера, используя только curl, dd и awk.
Легкий, не имеющий зависимостей bash-скрипт, который предоставляет вам эмулированную интерактивную оболочку внутри контейнера Docker, используя только curl, dd, od и awk. Не требуется Python, jq или редактор.
Создан для окружений, где есть только сырой доступ к оболочке и нужно выполнять команды внутри контейнера Docker через Docker Engine API.
Вместо использования Docker CLI этот скрипт общается напрямую с Docker Engine REST API через HTTP (обычно доступен по адресу http://192.168.65.7:2375 в среде Docker Desktop / WSL2).
Он:
C:\dd + od — не требуется PythonDocker оборачивает весь вывод exec в двоичный формат фреймов:
[1 byte: stream type] [3 bytes: padding] [4 bytes: payload size (big-endian)] [payload...]
Этот скрипт декодирует это кадр за кадром, используя только стандартные Unix-инструменты.
bashcurldd, od, awk, grep, cut — все стандартные Unix-инструментыhttp://192.168.65.7:2375 (Docker Desktop на WSL2)Без jq, Python, nano или редактора.
git clone https://github.com/yourusername/docker-shell.git
cd docker-shell
chmod +x docker_shell.sh
bash docker_shell.sh
================================================
Эмулированная оболочка Docker [target: alpine_escape]
Команды: start | status | run <cmd> | exit
================================================
docker> start
docker> status
docker> run ls /mnt
docker> run ls /mnt/Users
docker> run cat /etc/os-release
docker> run id
docker> exit
| Команда | Описание |
|---|---|
start | Создаёт (при необходимости) и запускает контейнер alpine_escape |
status | Показывает ID контейнера и текущее состояние |
run <cmd> | Выполняет любую команду оболочки внутри контейнера |
exit / quit | Выходит из эмулированной оболочки |
Контейнер монтирует ваш диск Windows C:\ (через WSL2) в /mnt:
| Путь в Windows | Внутри контейнера |
|---|---|
C:\ | /mnt |
C:\Users | /mnt/Users |
C:\Program Files | /mnt/Program Files |
C:\Windows\System32 | /mnt/Windows/System32 |
run — это отдельный экземпляр exec — состояние не сохраняется между командами. Используйте run cd /some/dir && ls, чтобы объединить команды в одном вызове.alpine_escape), а не по ID, поэтому он случайно не выполнит exec в другой контейнер./tmp/docker_out.bin с помощью dd кадр за кадром.Отредактируйте эти переменные в начале скрипта, чтобы они соответствовали вашему окружению:
DOCKER="http://192.168.65.7:2375" # Docker Engine API address
CONTAINER="alpine_escape" # Container name
AGPLv3