
Эксплойт, подтверждающий концепцию, для CVE-2024-48990, демонстрирующий локальное повышение привилегий в needrestart через манипуляции с PYTHONPATH. Включает скрипт запуска и бинарный файл полезной нагрузки для тестирования.
Needrestart — это широко используемая утилита в Linux-системах (по умолчанию установлена во многих версиях Ubuntu), которая после обновления ПО проверяет, нужно ли перезапустить какой-либо сервис или саму систему. Анализируя запущенные процессы, она определяет, используют ли они обновлённые библиотеки или их необходимо перезапустить для применения изменений.
Когда needrestart обнаруживает процесс, выполняющий интерпретатор Python, она считывает переменную окружения PYTHONPATH, связанную с этим процессом, из /proc/[pid]/environ и затем устанавливает её перед запуском собственного интерпретатора Python для анализа.
Если исходный процесс принадлежит локальному атакующему, он может изменить PYTHONPATH, чтобы указать на вредоносную библиотеку.
В результате, когда needrestart запускает интерпретатор Python с привилегиями root и изменённым PYTHONPATH, он выполняет код атакующего, что приводит к повышению привилегий до root.
Эта уязвимость затрагивает только версии needrestart ниже 3.8. Начиная с версии 3.8 включено исправление, которое должным образом очищает переменные окружения, такие как PYTHONPATH, перед вызовом интерпретатора Python, предотвращая повышение привилегий через манипуляцию вредоносным окружением.
Клонируйте репозиторий.
В файле runner.sh измените IP-адрес, используемый для загрузки скомпилированного бинарного файла, чтобы он указывал на вашу машину.
На машине атакующего дайте права на выполнение и запустите binary.sh.
Запустите HTTP-сервер:
$ python3 -m http.server
