Skip to content
cve_2019-5736

cve_2019-5736

Sploitus • September 7, 2026

##

Этот репозиторий содержит эксплойт класса proof-of-concept, написанный на C, для CVE-2019-5736.

Эта уязвимость позволяет вредоносному Docker-контейнеру перезаписать бинарный файл `runc` на хост-системе и выполнять на ней произвольные команды с привилегиями root, полностью компрометируя хост-систему.

> Вдохновлено оригинальным PoC на Go от Frichetten

Этот код предназначен **только для образовательных целей**. Не запускайте его ни на одной системе, которой вы не владеете или на тестирование которой у вас нет разрешения. Неправомерное использование может повлечь юридические последствия.

* **Docker 18.09.1** → Скачать бинарные файлы

> Примечание: этот шаг можно безопасно пропустить, если у вас уже установлены `wget` и `build-essential`.

#### 1\. Установка Docker с помощью скрипта

> Этот скрипт устанавливает Docker без systemd и socket activation. Он идеально подходит для лабораторных виртуальных машин.

> Примечание: для запуска в фоновом режиме понадобится второй терминал.

> Этот скрипт компилирует эксплойт и создаёт Docker-образ с бинарным файлом внутри.

> Примечание: вы также можете вручную собрать бинарный файл эксплойта, выполнив `make`.

Вы можете полностью удалить Docker и вернуть систему в состояние до установки:

sudo ./scripts/purge_docker_installation.sh

Сначала запустим наш контейнер с эксплойтом. Вы можете использовать либо эту команду:

sudo docker run -it --name exp --rm runc_exploit

Внутри контейнера мы теперь можем запустить бинарный файл эксплойта:

> Бинарный файл принимает три аргумента: `-h` выводит сообщение об использовании, `-c` задаёт строку командной нагрузки (payload), которую мы хотим выполнить на хост-системе. Последний аргумент `-d` переключает отладочный вывод во время выполнения (например, разбор информации из `/proc`).

> Примечание: если аргумент `-c` не указан, эксплойт выполнит `cp /etc/shadow > /tmp/pwned && chmod 644 /tmp/pwned`.

Теперь эксплойт ожидает входящего процесса runc на хост-системе. Выполните:

Этот скрипт откроет новый процесс внутри контейнера, выполнив `bin/sh`, и тем самым запустит эксплойт.

> Примечание: вы также можете запустить эксплойт, вручную выполнив `docker exec` на хост-системе, но для работы текущей версии PoC критически важны тайминги. Так что может потребоваться несколько попыток...

Если runc был успешно эксплуатирован, вы должны увидеть похожий вывод:

![output](

Теперь мы можем открыть наш взломанный файл shadow:

![shadow](