Почему программа set-uid никогда не должна создавать файл, который принадлежит владельцу программы и доступен для записи другим пользователям? - PullRequest
0 голосов
/ 08 сентября 2018

из интерфейса программирования Linux

Если программа set-user-ID-root должна создать файл, которым изначально она должна обладать, но который в конечном итоге будет принадлежать другому пользователю, файл должен быть создан так что он изначально не доступен для записи другим пользователям, либо с помощью подходящего режима аргумент open () или установив umask процесса перед вызовом open (). После этого программа может сменить владельца с помощью fchown (), а затем изменить разрешения, если необходимо, с помощью fchmod (). Ключевым моментом является то, что программа set-user-ID должна гарантировать, что она никогда не создаст файл, принадлежащий программе владелец, и это даже на мгновение может быть записано другими пользователями.

Мне было интересно, почему «программа set-user-ID должна гарантировать, что она никогда не создаст файл, принадлежащий владельцу программы и который даже на мгновение может быть записан другими пользователями»?

1 Ответ

0 голосов
/ 09 сентября 2018

Если файл на мгновение может быть записан другими пользователями, существует вероятность того, что состязательный процесс запишет в него данные своих целей, прежде чем вы сможете изменить владельца файла. Эта ситуация представляет собой начало возможного эксплойта повышения привилегий или, по крайней мере, повреждения предполагаемых данных процессом, который не должен был вообще иметь возможность повредить файл.

Скажем, я хотел получить права root от непривилегированного процесса. Я могу сидеть и ждать, пока ваше приложение запустится с правами root и начнет создавать файл, принадлежащий root. Как только я увижу это, мой процесс начнет записывать мой двоичный файл руткита в файл. Я использую другой ошибочный привилегированный процесс, который позволяет мне каким-то образом перевернуть бит set-user-id в файле - и все, прежде чем вы приступите к смене владельца. Теперь я могу быстро выполнить мой двоичный файл setuid rootkit, и код, который я в него записал, работает от имени root! Я получил полные привилегии, когда мне не позволили.

Пишите ваши привилегированные приложения очень осторожно, чтобы вы не открыли дыры, которые делают возможным использование системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...