Suicide
27.04.2022, 23:44
Исследователи безопасности из компании Microsoft выявили (https://www.microsoft.com/security/blog/2022/04/26/microsoft-finds-new-elevation-of-privilege-linux-vulnerability-nimbuspwn/) две уязвимости (CVE-2022-29799 (https://security-tracker.debian.org/tracker/CVE-2022-29799), CVE-2022-29800 (https://security-tracker.debian.org/tracker/CVE-2022-29800)) в сервисе networkd-dispatcher (https://gitlab.com/craftyguy/networkd-dispatcher), получившие кодовое имя Nimbuspwn и позволяющие непривилегированному пользователю выполнить произвольные команды с правами root. Проблема устранена в выпуске networkd-dispatcher 2.2 (https://gitlab.com/craftyguy/networkd-dispatcher/-/tags/2.2). Информации о публикации обновлений дистрибутивами пока нет (Debian (https://security-tracker.debian.org/tracker/CVE-2022-29799), RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2022-29799), Fedora (https://bodhi.fedoraproject.org/updates/?releases=F35&type=security), SUSE (https://bugzilla.suse.com/show_bug.cgi?id=CVE-2022-29799), Ubuntu (https://ubuntu.com/security/CVE-2022-29799), Arch Linux (https://security.archlinux.org/)).
Networkd-dispatcher применяется во многих дистрибутивах Linux, включая Ubuntu, использующих для настройки параметров сети фоновый процесс systemd-networkd (https://www.freedesktop.org/software/systemd/man/systemd.network.html), и выполняет функции сходные с NetworkManager-dispatcher (https://developer.gnome.org/NetworkManager/unstable/NetworkManager.html), т.е. занимается запуском скриптов при изменении состояния сетевого соединения, например, применяется для запуска VPN после установки основного сетевого соединения.
Связанный с networkd-dispatcher фоновый процесс выполняется с правами root и принимает сигналы о событиях через шину D-Bus. Информация о событиях, связанных с изменением состояния сетевых соединений, отправляется сервисом systemd-networkd. Проблема в том, что непривилегированные пользователи могут сформировать событие о несуществующем состоянии и инициировать запуск своего скрипта, который будет выполнен с правами root.
Systemd-networkd рассчитан на запуск только системных скриптов-обработчиков, размещённых в каталоге /etc/networkd-dispatcher и не доступных для замены пользователем, но из-за уязвимости (CVE-2022-29799) в коде обработки файлового пути имелась возможность выхода за пределы базового каталога и запуска произвольных скриптов. В частности, при формировании файлового пути к скрипту использовались переданные через D-Bus значения OperationalState и AdministrativeState, в которых не производилась чистка спецсимволов. Атакующий мог сгенерировать собственное состояние, в имени которого присутствовали символы "../" и перенаправить обращение networkd-dispatcher в другой каталог.
Вторая уязвимость (CVE-2022-29800) связана с состоянием гонки - между проверкой параметров скрипта (принадлежность root) и его запуском имелся небольшой промежуток времени, достаточный чтобы заменить файл и обойти проверку на принадлежность скрипта пользователю root. Кроме того, в networkd-dispatcher отсутствовала проверка на символические ссылки, в том числе при запуске скриптов через вызов subprocess.Popen, что существенно упростило организацию атаки.
Техника эксплуатации:
Создаются каталог "/tmp/nimbuspwn" и символическая ссылка "/tmp/nimbuspwn/poc.d", указывающая на каталог "/sbin", который используется для прохождение проверки на наличие исполняемых файлов, принадлежащих root.
Для исполняемых файлов из "/sbin" создаются файлы с аналогичным именем в каталоге "/tmp/nimbuspwn", например, для файла "/sbin/vgs" создаётся исполняемый файл "/tmp/nimbuspwn/vgs", принадлежащий непривилегированному пользователю, в который помещается код, который желает запустить атакующий.
По D-Bus процессу networkd-dispatcher отправляется сигнал с указанием в OperationalState значения "../../../tmp/nimbuspwn/poc". Для отправки сигнала в пространстве имён "org.freedesktop.network1" использовалась возможность подключения своих обработчиков к systemd-networkd, например, через манипуляции с gpgv или epmd, или можно воспользоваться тем, что systemd-networkd не запущен по умолчанию (например, в Linux Mint).
После получения сигнала Networkd-dispatcher выполняет построения списка исполняемых файлов, принадлежащих пользователю root и доступных в каталоге "/etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d", который на деле ссылается на "/sbin".
В момент, когда список файлов получен, но скрипт ещё не запущен, символическая ссылка перенаправляется с "/tmp/nimbuspwn/poc.d" на "/tmp/nimbuspwn" и networkd-dispatcher запустит с правами root cкрипт, размещённый атакующим.
https://www.opennet.ru/opennews/pics_base/0_1651054680.png (https://www.microsoft.com/security/blog/uploads/securityprod/2022/04/Figure-5-Flow-chart-of-the-attack-in-three-stages.png)
27.04.2022
https://www.opennet.ru/opennews/art.shtml?num=57093
Networkd-dispatcher применяется во многих дистрибутивах Linux, включая Ubuntu, использующих для настройки параметров сети фоновый процесс systemd-networkd (https://www.freedesktop.org/software/systemd/man/systemd.network.html), и выполняет функции сходные с NetworkManager-dispatcher (https://developer.gnome.org/NetworkManager/unstable/NetworkManager.html), т.е. занимается запуском скриптов при изменении состояния сетевого соединения, например, применяется для запуска VPN после установки основного сетевого соединения.
Связанный с networkd-dispatcher фоновый процесс выполняется с правами root и принимает сигналы о событиях через шину D-Bus. Информация о событиях, связанных с изменением состояния сетевых соединений, отправляется сервисом systemd-networkd. Проблема в том, что непривилегированные пользователи могут сформировать событие о несуществующем состоянии и инициировать запуск своего скрипта, который будет выполнен с правами root.
Systemd-networkd рассчитан на запуск только системных скриптов-обработчиков, размещённых в каталоге /etc/networkd-dispatcher и не доступных для замены пользователем, но из-за уязвимости (CVE-2022-29799) в коде обработки файлового пути имелась возможность выхода за пределы базового каталога и запуска произвольных скриптов. В частности, при формировании файлового пути к скрипту использовались переданные через D-Bus значения OperationalState и AdministrativeState, в которых не производилась чистка спецсимволов. Атакующий мог сгенерировать собственное состояние, в имени которого присутствовали символы "../" и перенаправить обращение networkd-dispatcher в другой каталог.
Вторая уязвимость (CVE-2022-29800) связана с состоянием гонки - между проверкой параметров скрипта (принадлежность root) и его запуском имелся небольшой промежуток времени, достаточный чтобы заменить файл и обойти проверку на принадлежность скрипта пользователю root. Кроме того, в networkd-dispatcher отсутствовала проверка на символические ссылки, в том числе при запуске скриптов через вызов subprocess.Popen, что существенно упростило организацию атаки.
Техника эксплуатации:
Создаются каталог "/tmp/nimbuspwn" и символическая ссылка "/tmp/nimbuspwn/poc.d", указывающая на каталог "/sbin", который используется для прохождение проверки на наличие исполняемых файлов, принадлежащих root.
Для исполняемых файлов из "/sbin" создаются файлы с аналогичным именем в каталоге "/tmp/nimbuspwn", например, для файла "/sbin/vgs" создаётся исполняемый файл "/tmp/nimbuspwn/vgs", принадлежащий непривилегированному пользователю, в который помещается код, который желает запустить атакующий.
По D-Bus процессу networkd-dispatcher отправляется сигнал с указанием в OperationalState значения "../../../tmp/nimbuspwn/poc". Для отправки сигнала в пространстве имён "org.freedesktop.network1" использовалась возможность подключения своих обработчиков к systemd-networkd, например, через манипуляции с gpgv или epmd, или можно воспользоваться тем, что systemd-networkd не запущен по умолчанию (например, в Linux Mint).
После получения сигнала Networkd-dispatcher выполняет построения списка исполняемых файлов, принадлежащих пользователю root и доступных в каталоге "/etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d", который на деле ссылается на "/sbin".
В момент, когда список файлов получен, но скрипт ещё не запущен, символическая ссылка перенаправляется с "/tmp/nimbuspwn/poc.d" на "/tmp/nimbuspwn" и networkd-dispatcher запустит с правами root cкрипт, размещённый атакующим.
https://www.opennet.ru/opennews/pics_base/0_1651054680.png (https://www.microsoft.com/security/blog/uploads/securityprod/2022/04/Figure-5-Flow-chart-of-the-attack-in-three-stages.png)
27.04.2022
https://www.opennet.ru/opennews/art.shtml?num=57093