Выполнение кода через needrestart и PYTHONPATH
Выполнение кода через needrestart и PYTHONPATH
Категория: Программы Теги: Уязвимости Опубликовано: 9 апреля 2025

Уязвимость 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).


Технический анализ эксплойта

Механизм уязвимости

  1. Неконтролируемый PYTHONPATH:
    Утилита needrestart запускает Python-скрипты для анализа процессов, но не сбрасывает переменную PYTHONPATH, что позволяет атакующему указать путь к вредоносным модулям.

  2. Подмена библиотеки importlib:
    Эксплойт создает поддельную библиотеку importlib/__init__.so, которая автоматически выполняется при импорте модуля importlib из-за атрибута __attribute__((constructor)).

Этапы эксплуатации

  1. Подготовка вредоносной библиотеки:

    • Создается 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; ...");
  2. Запуск Python-скрипта:

    • Скрипт e.py в цикле импортирует importlib, что приводит к загрузке вредоносной библиотеки через PYTHONPATH=/tmp/malicious.

    • После создания /tmp/poc скрипт запускает шелл с root-привилегиями через sudo /tmp/poc -p.

  3. Триггер уязвимости:

    • Атакующий выполняет команду, инициирующую проверку needrestart (например, sudo apt install ntp).

    • needrestart, запущенный с правами root, загружает поддельный importlib, выполняя код атакующего.


Условия успешной атаки

  • Локальный доступ: Атакующий должен иметь возможность выполнять команды от обычного пользователя.

  • Запуск needrestart с привилегиями root: Происходит при обновлении пакетов или ручном вызове утилиты администратором.


Рекомендации по защите

  1. Обновление needrestart:
    Установите версию 3.8 или новее, где исправлена обработка PYTHONPATH.

    sudo apt update && sudo apt install needrestart  
  2. Проверка уязвимости:

    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

     

  3. Ограничение переменных окружения:

    • Удалите или закомментируйте строки, устанавливающие PYTHONPATH, в скриптах needrestart.

    • Используйте env_clean в настройках sudo для запрета наследования опасных переменных.

  4. Мониторинг активности:

    • Отслеживайте создание SUID-файлов (например, через find / -perm -4000).

    • Анализируйте изменения в /etc/sudoers с помощью инструментов вроде auditd.

  5. Снижение привилегий:

    • Запускайте needrestart с ограниченными правами через механизмы вроде Linux Capabilities или selinux.

Алексей Черемных Алексей Черемных
49