Уязвимость в snapd, позволяющая получить root-привилегии в системе
В snapd, инструментарии для управления самодостаточными пакетами в формате snap, выявлена уязвимость (CVE-2019-7304), позволяющая непривилегированному пользователю получить права администратора (root) в системе. Для проверки систем на наличие уязвимости опубликовано два прототипа эксплоита - первый позволяет завести нового пользователя в системе, а второй дает возможность установить любой snap-пакет и запустить код с правами root (через установку пакета в режиме "devmode" с прикреплением обработчика, вызываемого при установке с привилегиями root).
Уявимость вызвана отсутствием в snapd должных проверок при обработке адреса внешнего сокета в процессе оценки прав доступа для Unix-сокетов. В частности, при обработке запросов к API через Unix-сокет проверяется ассоциированный с соединением UID пользователя (указываемый в имени сокета) и на основании его принимается решение о предоставлении доступа. Пользователь может прикрепить к имени файла с сокетом строку ";uid=0;" и код парсинга параметров в snapd использует ее для определения идентификатора пользователя. Локальный атакующий может использовать данную ошибку для доступа через сокет /run/snapd.socket к привилегированным API snapd и получения полномочий администратора (в вышеупомянутых эксплоитах используется обращение к API v2/create-user и /v2/snaps).
Проблема проявляется в версиях snapd с 2.28 по 2.37 и затрагивает все поддерживаемые ветки дистрибутива Ubuntu (с 14.04 по 18.10), в котором начиная с Ubuntu 18.04 поддержка snap предлагается по умолчанию. Проблема также затрагивает дистрибутивы Fedora, Debian, в которых snapd предлагается из штатных репозиториев. Уязвимость устранена в выпуске snapd 2.37.1, а также в обновлениях пакетов для дистрибутивов Ubuntu и Debian.