
Локальное повышение привилегий до root через Sudo chroot в Linux
Локальное повышение привилегий до root через sudo chroot в Linux.
Новость можно почитать здесь:
TL;DR, и поправьте, если я ошибаюсь. Итак, sudo — это команда для выполнения команды от имени администратора/root. Пользователь может запускать sudo, только если он входит в группу sudoers. Но в бинарнике sudo есть баг, который позволяет обычному пользователю без прав на запуск sudo переключаться на пользователя root.
Баг заключается в уязвимости в опции команды sudo --chroot. Этот chroot позволяет выполнять команды во временной директории. Проблема в том, что sudo проверяет файл конфигурации внутри этой временной директории до того, как проверит, имеет ли пользователь право запускать sudo.
Если этот файл конфигурации каким-то образом удастся отредактировать и направить на модифицированный код для получения root-доступа, мы сможем получить доступ root без аутентификации и без регистрации в sudoers. Потому что в процессе получения этой информации система временно повышает привилегии команды до root.
Что это за файл конфигурации? /etc/nsswithc.conf. Этот файл конфигурации используется системой для определения, например, в какую группу входит пользователь и т.д. Внутри этого файла nsswitch примерно так:
<database> <source1> <source2> ... <sourcen>
passwd files systemd
group files systemd
shadow files
gshadow files
...
Вот! Если используемый источник данных — files, nss вызовет библиотеку с названием libnss_files.so.2. Этот файл содержит код на C, и если мы его отредактируем, то с большой вероятностью сможем получить root-доступ. Потому что система запускает его как root, даже если команда выполняется не пользователем из sudoers. Это можно увидеть в файле exploit.sh
Вкратце:
/etc/nsswitch.conf в папке, которой мы управляем.