The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Уязвимости в утилите needrestart, позволяющие получить root-доступ в Ubuntu Server

19.11.2024 23:44

Компания Qualys выявила три уязвимости в утилите needrestart, предназначенной для перезапуска фоновых процессов после обновления разделяемых библиотек, используемых данными процессами. Начиная с Ubuntu 21.04 утилита needrestart включена в состав базового окружения Ubuntu Server, в котором запускается с правами root в конце каждой транзакции пакетного менеджера APT, сканирует запущенные процессы и перезапускает те из них, что связаны с файлами, изменившимися после обновления пакетов. Выявленные уязвимости позволяют локальному непривилегированному пользователю получить права root в Ubuntu Server в конфигурации по умолчанию.

Уязвимости присутствуют в коде с реализацией режима определения обновления скриптов, запущенных с использованием интерпретаторов. Выявленные проблемы:

  • CVE-2024-48990 - локальный пользователь может добиться выполнения кода с правами root через создание условий для запуска Python-интерпретатора с выставленной атакующим переменной окружения PYTHONPATH. Кроме использования Python атака также может быть проведена (CVE-2024-48992) через запуск интерпретатора Ruby с переменной окружения RUBYLIB.

    Уязвимость вызвана тем, что в процессе перезапуска изменившегося скрипта утилита needrestart выставляет переменную окружения PYTHONPATH на основе содержимого файла /proc/pid/environ, которую затем использует и для запуска собственного Python-кода. Соответственно, атакующий может дождаться активности, связанной с работой пакетного менеджера APT, симулировать изменение своего скрипта и установить для него переменную окружения PYTHONPATH, которая также будет применена при запуске встроенного в needrestart Python-кода ("import sys\n print(sys.path)"), выполняемого с правами root.

    
         if(exists($e{PYTHONPATH})) {
             $ENV{PYTHONPATH} = $e{PYTHONPATH};
         }
         ...
         my ($pyread, $pywrite) = nr_fork_pipe2($self->{debug}, $ptable->{exec}, '-');
         print $pywrite "import sys\nprint(sys.path)\n";
         close($pywrite);
    

    Например, для эксплуатации уязвимости можно запустить постоянно висящий в памяти Python-процесс, выставив для него переменную окружения "PYTHONPATH=/home/test", и разместить разделяемую библиотеку "/home/test/importlib/__init__.so", которая будет выполнена при выполнении привилегированного Python-кода в needrestart.

  • CVE-2024-48991 - локальный пользователь может добиться выполнения кода с правами root через инициирование состояния гонки (race condition), в результате которого needrestart запустит Python-скрипт с использованием фиктивного файлового пути к исполняемому файлу python, указанного атакующим. Суть уязвимости похожа на вышеотмеченную проблему, разница только в том, что needrestart определяет имя процесса Python (например, /usr/bin/python3) через чтение "/proc/pid/exe".

    Для эксплуатации уязвимости можно создать процесс /home/test/race, который при помощи механизма inotify дождётся момента, когда needrestart начнёт читать содержимое /proc/pid/exe, и сразу запустит через функцию execve системный интерпретатор Python. Так как needrestart не выполняет проверку настоящий ли это Python, то он посчитает, что /home/test/race и есть интерпретатор Python и запустит его для своего кода.

  • CVE-2024-11003 - локальный пользователь может добиться выполнения произвольных shell-команд с правами root через создание условий для обработки в needrestart имён файлов в формате "команда|", передача которых в Perl-функцию open() без экранирования переменной приведёт к запуску команды. Фактически уязвимость проявляется в Perl-модуле ScanDeps (CVE-2024-10224), но вызвана передачей в этот модуль внешних параметров без должной проверки.

    Атака может быть осуществлена через запуск Perl-скрипта с символом "|" в имени, например, "/home/test/perl|". В процессе выполнения функции scan_deps() в needrestart данный файл будет открыт через функцию open(), которая обработает символ "|" как флаг для запуска программы "/home/test/perl" и использования полученного от данной программы выходного потока. В процессе изучения патча с исправлением в ScanDeps выявлена ещё одна похожая уязвимость, связанная с возможностью подстановки внешнего содержимого при вызове функции eval().

Уязвимости присутствуют в needrestart начиная с версии 0.8 (2014 год) и устранены в выпуске needrestart 3.8. Проблемы также уже исправлены в дистрибутивах Debian и Ubuntu. В качестве обходного пути блокирования эксплуатации уязвимости можно отключить режим сканирования интерпретаторов, указав в файле конфигурации /etc/needrestart/needrestart.conf параметр "$nrconf{interpscan} = 0".

  1. Главная ссылка к новости (https://www.openwall.com/lists...)
  2. OpenNews: Уязвимость в OpenSSH, позволяющая удалённо выполнить код с правами root на серверах с Glibc
  3. OpenNews: Уязвимость в glibc, позволяющая получить root-доступ в системе
  4. OpenNews: Уязвимость в Glibc ld.so, позволяющая получить права root в большинстве дистрибутивов Linux
  5. OpenNews: Root-уязвимость в инструментарии управления пакетами Snap
  6. OpenNews: Критическая уязвимость в PolKit, позволяющая получить root-доступ в большинстве дистрибутивов Linux
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/62261-needrestart
Ключевые слова: needrestart, ubuntu
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (51) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (2), 00:23, 20/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Ну ещё и ещё один повод использовать рхел и его клоны.
     
     
  • 2.5, Аноним (5), 00:59, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Redhat добавляла уязвимости из-за кривых патчей.
     
     
  • 3.28, Ананым (?), 06:02, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    В редхате патчей кот наплакал по сравнению с бубунтой и дебияном
     
     
  • 4.31, Аноним (31), 07:49, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что это не полигон для испытаний?
     
  • 4.44, Аноним (-), 09:30, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > В редхате патчей кот наплакал по сравнению с бубунтой и дебияном

    Особенно на доисторические керенлы, угумс.

     
  • 4.73, Аноним (-), 16:46, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > В редхате патчей кот наплакал по сравнению с бубунтой и дебияном

    Это как сказать. Ядра они гальванизируют очень даже...

     
  • 2.6, нах. (?), 01:10, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • –4 +/
    это в котором двадцать лет не могут аналогичную утилиту для dnf написать?
    Ну да, безопастно. Нет утилиты, нет опастностей. Поставил обновления - просто перезагружайся, какввенде, неча тебе гадать, что именно этими обновлениями затронуто, а что нет.

    (20 - потому что zypper в suse умел такое еще в начале нулевых, а убунта, вот, всего через 15 лет догнала, но есть нюанс)

     
     
  • 3.12, Аноним (12), 02:07, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > это в котором двадцать лет не могут аналогичную утилиту для dnf написать?

    а с какого бодуна должна такая шняга перезапускать процессы без желания пользователя?

    > Поставил обновления - просто перезагружайся

    поставил обновления днем, ручной перезапуск ночью - аксиома.

     
     
  • 4.33, WE (?), 08:22, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    аксиома это ночью спать, а не перезапускать непонятно чего.
     
     
  • 5.49, Аноним (49), 10:09, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    sleep 5h && reboot - господь запретил набрать?
     
     
  • 6.59, gogo (?), 11:03, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    ребутить не глядя?
    блаженны верующие )))
     
  • 6.60, crypt (ok), 11:22, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    твой работодатель, если у тебя работа чуть крупнее, чем рога и копыта.
     
  • 5.69, Аноним (69), 13:28, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    лол кек, ппц, алё, аксиома - дежурный админ, проснись "человек оркестр", концерт окончен.
     
  • 4.45, Аноним (45), 09:31, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > а с какого бодуна должна такая шняга перезапускать процессы без желания пользователя?

    она спрашивает пользователя, если в интерактивном режиме и просто печатает список для перезапуска в неинтерактивном

     
     
  • 5.71, Аноним (69), 13:33, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    """
    в котором запускается с правами root в конце каждой транзакции пакетного менеджера APT, сканирует запущенные процессы и перезапускает те из них, что связаны с файлами, изменившимися после обновления пакетов.
    """

    что такое транзакция пакетного менеджера?

     
  • 4.75, freebzzZZZzzd (ok), 20:06, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >поставил обновления днем, ручной перезапуск ночью - аксиома.

    смехотворное обсуждение, на самом деле рхел-клоны всё давно перезапускают.
    ну по крайней мере обновления проги точно перезапускает прогу.
    какие-то либы глубоко в потрохах - зачем сразу перезапускать?

    в целом это вопрос sla и конфигурации балансировщиков, за которыми эти сервисы сидят.

     
     
  • 5.76, Аноним (69), 01:13, 21/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > на самом деле рхел-клоны всё давно перезапускают

    вот и спрашивается, с какого бодуна?

     
  • 2.9, Anonyrat (?), 01:47, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Ну ещё и ещё один повод использовать рхел и его клоны.

    Можно подумать, будто бы у тебя есть выбор :-)
    В deb дистрибутивах до сих пор нет возможности вывести список всех пакетов (включая метапакеты), которые ты установил вручную, без учёта тех, которые поставились с системой при её установке.

     
     
  • 3.14, мяв (?), 02:35, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    это ведь.. такой нужный функционал, лол?
    и да, Вы не правы, man apt-mark, в частности, showmanual
     
     
  • 4.15, мяв (?), 02:40, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • –3 +/
    а, нет, беру слова назад, щас перепроверила специально, это чуть другом.
    тем не менее, такое умеет делать nala.
     
     
  • 5.78, scriptkiddis (?), 21:45, 21/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Точно! Нужно всего лишь еще чуть обмазаться сторонними утилитами разного качества
     
  • 3.55, Соль земли (?), 10:41, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    aptitude показывает локально установленные. Также список пакетов после установки никто не запрещает сохранить. Но вот rollback нет, как в yum/dnf.
     
  • 2.32, Аноним (32), 08:15, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    needs-restarting в RH уже проверели?)
     

  • 1.4, Аноним (4), 00:41, 20/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Так вроде ж ключевая идея всех суидных утилит в том, чтобы обнулять пользовательские переменные при исполнении. Зачем они каждый раз их задействуют? Едва ли можно на халатность. И как у них клиенты остаются после подобного?
     
  • 1.7, Аноним (7), 01:15, 20/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Провел аудит Debian в минимальной установки с помощью systemd-analyze security.
    .service красные.
     
     
  • 2.61, crypt (ok), 11:27, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    это новый уровень линукса для домохозяек. нифига не понятно, зато эмодзи ресует.
     
  • 2.74, Аноним (74), 18:59, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >systemd-analyze security

    Ну тогда всё в безопасТносте. Not a bug!

     

  • 1.10, Аэро (?), 01:54, 20/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Щас вообще какой век что бы сидеть без фаервола?
     
     
  • 2.21, Anonyrat (?), 03:02, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем тебе файрволл за NATом провайдера?
     
     
  • 3.24, Аноним (24), 03:38, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Откуда у ipv6-only провайдера NAT?
     
     
  • 4.25, Аноним (25), 05:41, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    откуда такой провайдер? засланец?
     
     
  • 5.39, Аноним (39), 09:07, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Откуда там вообще канал связи?
     
  • 5.51, Минона (ok), 10:19, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Наверное это интернет-бояре с Барвихи, 10 Gbit в дом =)
     
  • 4.26, Ананым (?), 05:58, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Откуда ipv6-only

    Фикс, так будет правильнее

     
  • 2.27, Ананым (?), 06:00, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ходят слухи что в наш век без фаервола сидеть куда безопаснее чем в век виндос хп
     
     
  • 3.48, Ананий (?), 09:48, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    во времена WinXP вплоть до SP3 достаточно было времени между поднятием сети и влючением виндового "фириволла", чтобы словить бластер с сассером.
     
     
  • 4.67, InuYasha (??), 12:47, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо! Вызвал у меня ностальгические слёзы умилениума.. т.е. умиления :_)
     
     
  • 5.72, Аноним (69), 13:38, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    каретка сидирома заскрепела аж :)
     

  • 1.23, penetrator (?), 03:35, 20/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    вообще не удивлен, бубунта уникальный продукт, со своей особенной глюкавостью
     
  • 1.34, Аноним (34), 08:35, 20/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Нафейхоа в одной утилите было использовать скритпы на куче интерпретируемых языков? Python, Ruby, Perl - кошмар. Неудивительно, что с вот этим всем можно запутаться, не учесть особенностей. Почему бы всё на том же Python не реализовать?
     
     
  • 2.40, Аноним (40), 09:19, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Да,тебе пора это реализовать. Разрешаем.
     
  • 2.47, Аноним (2), 09:46, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это же не злой Корп который стукнул по столу кулаком и сказал только питон или только 1сскрипт. Тут добрый опенсорс каждый пишет во что горазд.
     
     
  • 3.64, Аноним (-), 12:09, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Canonical - может, не злой, но корп.
     
  • 2.63, пох. (?), 11:47, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    попробуй не используя скрипты на куче языков - проверить подлежит ли рестарту сервис, написанный на этих самых языках. (И нет, кроме очевидного апгрейда интерпретатора есть куча других причин по которым его обязательно надо перезапускать.)

    > Почему бы всё на том же Python не реализовать?

    приступай.
    (и не забудь переписывать заново с каждой новой версией пихона. Это тебе ответ почему на нем вообще не надо писать ничего кроме одноразовых хеловротов.)

     
     
  • 3.65, Аноним (-), 12:12, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Обратная совместимость в пределах третьей ветки есть. Но можно всё и Баше.
     
  • 3.77, Аноним (77), 11:54, 21/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >попробуй не используя скрипты на куче языков - проверить подлежит ли рестарту сервис, написанный на этих самых языках

    Элементарно. Достаточно построить граф зависимостей до обновления и после, и сравнить, изменился ли хотя бы один лист. Но для этого, сервис должен быть полностью опакечен, что убунтам с дебианами и не снилось.

     

  • 1.41, Catwoolfii (ok), 09:25, 20/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    В Debian есть аналогичная утилита checkrestart из пакета debian-goodies.
    Интересно, что там у неё с секьюрностью?
     
     
     
    Часть нити удалена модератором

  • 3.52, Аноним (-), 10:20, 20/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Безопаснее только храстовики ко орве на каждый апдейт качают из карго новые эксплоиты.

    Что что? У вас орви? Или вы агроном и про коров пытались задвинуть? :)

     

  • 1.54, Аноним (-), 10:26, 20/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > окружения PYTHONPATH на основе содержимого файла /proc/pid/environ,
    > которую затем использует и для запуска собственного Python-кода.

    Убунта наняла всяких питонистов по объявлению. Уязвимости, блин?! Да у них их апгрейдер систему обновить не может в половине случаев. При том что по сути - только пакетный менеджер и запускает. Но нет, чудо-програмеры даже это прогадить умудряются. Например скачав распоследнюю версию скрипта апдейта - чтобы обнаружить что оказывается с системной версией питона это вообще не работает. И теперь вы либо реинсталите систему, либо свичите репы и апдейтитесь лапками. Потому что упс, "новая версия убунты не обнаружена!".

     
  • 1.56, Соль земли (?), 10:46, 20/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Глупые уязвимости. Но и исправляются тоже в два счёта. Оптимализм лучше перфекционизма.
     
  • 1.62, pic (??), 11:36, 20/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    А так ли нужен root?
    Тем более на домашней системе.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру