##
Этот репозиторий содержит эксплойт класса 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 был успешно эксплуатирован, вы должны увидеть похожий вывод:
