Вразливості у networkd-dispatcher, що дозволяють отримати права root

Дослідники безпеки з компанії Microsoft виявили дві вразливості (CVE-2022-29799, CVE-2022-29800) у сервісі networkd-dispatcher, що отримали кодове ім'я Nimbuspwn і дозволяють непривілейованому користувачеві виконати довільні команди з правами. Проблема усунена у випуску networkd-dispatcher 2.2. Інформації про публікацію оновлень дистрибутивами поки що немає (Debian, RHEL, Fedora, SUSE, Ubuntu, Arch Linux).

Networkd-dispatcher застосовується у багатьох дистрибутивах Linux, включаючи Ubuntu, використовують для налаштування параметрів мережі фоновий процес systemd-networkd, і виконує функції подібні до NetworkManager-dispatcher, тобто. займається запуском скриптів при зміні стану мережного з'єднання, наприклад, застосовується для запуску 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крипт, розміщений атакуючим.

Вразливості у networkd-dispatcher, що дозволяють отримати права root


Джерело: opennet.ru

Додати коментар або відгук