
Эксплуатация уязвимости под названием "Dirty_Sock" (CVE-2019-7304) в REST API демона snapd от Canonical.
Эксплуатация уязвимости "Dirty_Sock" (CVE-2019-7304) в REST API демона snapd от Canonical (служба по умолчанию в Ubuntu Linux) для получения root-доступа.
Руководство Рамиля Мустафаева: https://kryptohaker.medium.com/linux-privilege-escalation-via-snapd-using-dirty-sock-exploit-and-demonstration-of-cve-2019-7304-892716cf99ca
Эта уязвимость эксплуатировалась в версиях snapd старше 2.37 из-за некорректно проверенного и разобранного адреса удалённого сокета при выполнении контроля доступа к его UNIX-сокету. В то время это также затрагивало некоторые дистрибутивы Unix и Linux (например, Ubuntu 16.04). Поэтому для реализации этой эксплуатации нам нужны snapd 2.32 и Ubuntu 16.04
Я получил Debian-пакет snapd 2.32 по адресу https://launchpad.net/ubuntu/+source/snapd

Сначала я проверяю машину Ubuntu на предмет уязвимости к эксплуатации с помощью команд cat /etc/lsb-release (показывает версию Ubuntu и её описание) и uname -a (проверяет информацию о текущем компьютере и операционной системе). Затем мы убеждаемся, что эта машина поддаётся эксплуатации.

Следующий шаг — запустить службу snapd с помощью команды systemctl start snapd (в реальности, когда злоумышленники эксплуатируют эту уязвимость, служба snapd должна быть запущена администратором; иначе они не смогут успешно её запустить). Затем мы можем проверить версию snapd, чтобы убедиться, что она уязвима.

Далее я проверю привилегии пользователя с помощью команд id (отображает информацию о пользователе и группе) и tail /etc/passwd (файл /etc/passwd используется для отслеживания всех зарегистрированных пользователей). Результаты ниже показывают, что злоумышленник с именем пользователя "coby" является обычным пользователем, имеющим минимальный доступ к системе.

Для запуска этой атаки мы воспользуемся скриптом dirty_sock, имеющим две версии, полученным по адресу https://github.com/initstring/dirty_sock. В то время как Версия Один требует исходящего подключения к Интернету и запущенной службы SSH, Версия Два может быть запущена напрямую без каких-либо требований.
В скрипте dirty_sockv2.py, который будет использоваться в этой эксплуатации, следует обратить внимание на несколько ключевых компонентов. Первый ключевой компонент в этом скрипте — переменная TROJAN_SNAP, представляющая собой строку в кодировке base64, содержащую устанавливаемый snap-пакет. Этот пакет представляет собой пустой snap в режиме "devmode", имеющий bash-скрипт в хуке установки, который создаст нового пользователя ("devmode" (режим разработчика) — это специальный режим установки, позволяющий snap-пакетам обходить строгую изоляцию для целей разработки и отладки).

Ещё один важный компонент в этом скрипте — функция create_sockfile(). Эта функция эксплуатирует небезопасный синтаксический анализ в файле "snapd's ucrednet.go" для генерации случайного файла сокета и подсовывания грязного сокета, ;uid=0;, что позволяет нам перезаписать переменную UID.

Для реализации этой эксплуатации я просто выполняю dirty_sockv2.py в терминале. После успешного запуска эксплойта dirty_sock мы видим, что скриптом автоматически создаётся учётная запись dirty_sock с тем же паролем.

Затем я проверяю /etc/passwd, чтобы увидеть список зарегистрированных пользователей, и вижу, что был создан новый пользователь с именем "dirty_sock".

С помощью команды su я могу войти в учётную запись "dirty_sock", используя обнаруженные учётные данные. После успешного входа я могу проверить привилегии этого пользователя и увидеть, что он находится в группе sudo. Это означает, что злоумышленник уже получил полный контроль над системой и может делать всё с наивысшими привилегиями.

Оценка CVSS этой уязвимости составляет 8.8 (высокая степень серьёзности), что означает, что в случае эксплуатации она может оказать огромное влияние на систему. Эта уязвимость имеет высокую степень серьёзности, поскольку для её эксплуатации не требуются высокие привилегии. Когда злоумышленник уже имеет некоторую точку опоры в системе (например, пользователь с низкими привилегиями), он может повысить привилегии до root, что делает эту уязвимость серьёзной локальной угрозой безопасности, особенно в многопользовательских средах или облачных средах.