
Уязвимость BDU:2024-10112 в needrestart: выполнение кода через PYTHONPATH
Уязвимость BDU:2024-10112 (CVE-2024-48990) в утилите needrestart позволяет локальному атакующему повысить привилегии до уровня root через манипуляцию переменной окружения PYTHONPATH
. Утилита, предназначенная для проверки необходимости перезапуска служб после обновлений, некорректно обрабатывает пути загрузки Python-модулей, что приводит к выполнению произвольного кода.
CVSS 3.0: AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H.
Уязвимые версии: needrestart <3.8 (включая Ubuntu, Debian, Fedora, Astra Linux).
Технический анализ эксплойта
Механизм уязвимости
-
Неконтролируемый
PYTHONPATH
:
Утилита needrestart запускает Python-скрипты для анализа процессов, но не сбрасывает переменнуюPYTHONPATH
, что позволяет атакующему указать путь к вредоносным модулям. -
Подмена библиотеки
importlib
:
Эксплойт создает поддельную библиотекуimportlib/__init__.so
, которая автоматически выполняется при импорте модуляimportlib
из-за атрибута__attribute__((constructor))
.
Этапы эксплуатации
-
Подготовка вредоносной библиотеки:
-
Создается shared library (
lib.c
), которая при загрузке:-
Копирует
/bin/sh
в/tmp/poc
с SUID-битом (chmod u+s
). -
Добавляет
/tmp/poc
в/etc/sudoers
для выполнения без пароля.
-
system("cp /bin/sh /tmp/poc; chmod u+s /tmp/poc; ...");
-
-
Запуск Python-скрипта:
-
Скрипт
e.py
в цикле импортируетimportlib
, что приводит к загрузке вредоносной библиотеки черезPYTHONPATH=/tmp/malicious
. -
После создания
/tmp/poc
скрипт запускает шелл с root-привилегиями черезsudo /tmp/poc -p
.
-
-
Триггер уязвимости:
-
Атакующий выполняет команду, инициирующую проверку needrestart (например,
sudo apt install ntp
). -
needrestart, запущенный с правами root, загружает поддельный
importlib
, выполняя код атакующего.
-
Условия успешной атаки
-
Локальный доступ: Атакующий должен иметь возможность выполнять команды от обычного пользователя.
-
Запуск needrestart с привилегиями root: Происходит при обновлении пакетов или ручном вызове утилиты администратором.
Рекомендации по защите
-
Обновление needrestart:
Установите версию 3.8 или новее, где исправлена обработкаPYTHONPATH
.sudo apt update && sudo apt install needrestart
-
Проверка уязвимости:
version=$(needrestart --version) if [[ "$version" =~ ([0-9]+\.[0-9]+) ]] && [[ ${BASH_REMATCH[1]} < "3.8" ]]; then echo "Уязвима (версия ${BASH_REMATCH[1]})" else echo "Защищена (версия ${BASH_REMATCH[1]})" fi
-
Ограничение переменных окружения:
-
Удалите или закомментируйте строки, устанавливающие
PYTHONPATH
, в скриптах needrestart. -
Используйте
env_clean
в настройках sudo для запрета наследования опасных переменных.
-
-
Мониторинг активности:
-
Отслеживайте создание SUID-файлов (например, через
find / -perm -4000
). -
Анализируйте изменения в
/etc/sudoers
с помощью инструментов вроде auditd.
-
-
Снижение привилегий:
-
Запускайте needrestart с ограниченными правами через механизмы вроде Linux Capabilities или selinux.
-
