Несколько дней назад Qualys опубликовала новость о том, что обнаружила серьезную уязвимостьe (уже внесен в каталог CVE-2022-3328) в утилите snap-confine, который поставляется с корневым флагом SUID и вызывается процессом snapd для формирования исполняемой среды для приложений, распространяемых в пакетах формата snap.
Уязвимость позволяет непривилегированному локальному пользователю выполнять код от имени пользователя root в конфигурации Ubuntu по умолчанию.
Интересно, что рассматриваемая уязвимость была введена в процессе исправления аналогичной уязвимости от февраля в snap-confine.
Какое влияние оказывает CVE-2022-3328?
Qualys уточняет в своем отчете, что уязвимость snap-confine вызвано состоянием гонки в функции must_mkdir_and_open_with_perms(), добавлено для защиты от замены каталога /tmp/snap.$SNAP_NAME символической ссылкой после проверки владельца, но до вызова системного вызова mount для привязки к нему каталогов монтирования для пакета в формате span.
Дополнительная безопасность заключалась в переименовании каталога /tmp/snap.$SNAP_NAME в другой каталог в /tmp со случайным именем, если он существует и не принадлежит пользователю root.
Используя операцию переименования из каталога /tmp/snap.$SNAP_NAME, исследователи воспользовались тем, что snap-confine также создает каталог /tmp/snap.rootfs_x для содержимого пакета snap. mkdtemp(), который случайным образом выбирает часть имени «x», но пакет с именем «rootfs_x» может пройти через sc_instance_name_validate (т. е. идея состоит в том, чтобы установить для $SNAP_NAME значение «rootfs_x», а затем операция переименования приведет к тому, что каталог /tmp/snap.rootfs_x будет перезаписан пользователем root при оснастке).
Для достижения одновременного использования из /tmp/snap.rootfs_xx и переименовав /tmp/snap.$SNAP_NAME, были запущены два экземпляра snap-confine.
Как только первый экземпляр создал /tmp/snap.rootfs_xx процесс был заблокирован и запущен второй экземпляр с именем пакета rootfs_x, из-за чего временный каталог второго экземпляра /tmp/snap.$SNAP_NAME стал /tmp/snap .rootfs_x (корневой каталог) первого экземпляра.
Сразу же после изменения имени произошел сбой второго экземпляра, и /tmp/snap.rootfs_x был заменен на манипуляцию состоянием гонки, как в февральском эксплойте. После изменения блокировка выполнения была снята с первого экземпляра, и злоумышленники получили полный контроль над мгновенным корневым каталогом.
Последним шагом было создание символической ссылки /tmp/snap.rootfs_x/tmp. который использовался функцией sc_bootstrap_mount_namespace() для привязки и монтирования фактического доступного для записи каталога /tmp в любой каталог в файловой системе, поскольку вызов mount() следует символическим ссылкам перед монтированием. Такое монтирование блокируется ограничениями AppArmor, но для обхода этой блокировки эксплойт использовал две уязвимости. помощники в multipathd.
Успешная эксплуатация всех трех уязвимостей позволяет любому непривилегированному пользователю получить root-права на уязвимом устройстве. Исследователи безопасности Qualys проверили уязвимость, разработали эксплойт и получили полные привилегии root на установках Ubuntu по умолчанию.
Как только уязвимость была подтверждена отделом исследования угроз Qualys, мы приступили к ответственному раскрытию уязвимости и координировали свои действия с поставщиками и дистрибутивами с открытым исходным кодом, чтобы объявить об этой недавно обнаруженной уязвимости.
Исследователям удалось подготовить работающий эксплойт который обеспечивает root-доступ на Ubuntu Server 22.04, который, помимо уязвимости snap-confine, также включает две уязвимости в процессе multipathd (CVE-2022-41974, CVE-2022-41973), связанные с обходом разрешений при передаче привилегированных команд и небезопасная обработка символических ссылок.
Стоит отметить, что проблема была исправлена в версии snapd 2.57.6, Кроме того, были выпущены обновления пакетов для всех поддерживаемых веток Ubuntu.
Наконец, если вам интересно узнать об этом больше, вы можете ознакомиться с подробностями По следующей ссылке.