Как делает наличие/dev/fd, делают под управлением сценарии оболочки под sudo сейфом?

Согласно man startx, следующие файлы управляют поведением startx:

   $(HOME)/.xinitrc         Client to run.  Typically a shell script which runs  many  programs  in  the
                            background.

   $(HOME)/.xserverrc       Server to run.  The default is X.

   /etc/X11/xinit/xinitrc   Client to run if the user has no .xinitrc file.

   /etc/X11/xinit/xserverrc Server to run if the user has no .xserverrc file.

Так, если Вы хотите продолжать использовать startx, необходимо скорректировать содержание Вашего .xinitrc файл.

Но это не могло бы быть необходимо, так как тяжелые настольные среды, такие как KDE часто идут с готовыми к использованию сценариями запуска. В случае KDE существует названный тот startkde (Я не помню, используется ли это в качестве замены для startx, или необходимо поместить его в xinitrc).

6
21.03.2013, 14:40
1 ответ

Я не вижу, как это может относиться sudo.

Для setuid сценариев идея - это:

Предположите, что у Вас есть a /usr/local/bin/myscript это - корень setuid и запускается с #! /bin/sh. Ни у кого нет доступа для записи к /usr/local/bin или myscript, но кто-либо может сделать:

ln -s /usr/local/bin/myscript /tmp/-i

И /tmp/-i также становится setuid сценарием, и даже при том, что у Вас все еще не будет доступа для записи к нему, у Вас действительно есть доступ для записи к /tmp.

В системах, где setuid сценарии не выполняются посредством /dev/fd, когда Вы выполняетесь cd /tmp && -i, setuid укусил средства, которые он выполнит: /bin/sh -i как корень:

  1. Процесс изменяет euid на владельца файла
  2. Система анализирует хижину
  3. Система выполняется (все еще как корень), /bin/sh -i

Теперь, для того особого случая, легкая работа вокруг должна записать хижине рекомендуемый путь: #! /bin/sh -, но даже затем, существует состояние состязания. Теперь это становится:

  1. Процесс изменяет euid на владельца файла
  2. Система анализирует хижину
  3. Система выполняется (все еще как корень), /bin/sh - -i
  4. "sh" открывает "-i" файл в текущем каталоге (прекрасный, Вы думали бы).

Но между 3 и 4 выше, у Вас есть много времени для изменения "-i" или ("любой-файл", поскольку это - другой вектор атаки здесь) к некоторому злу "-i" файл, который содержит, например, просто "sh", и Вы получаете корневую оболочку (для корневого сценария setuid).

С более старыми версиями ksh, Вы не должны были даже делать этого, потому что в 4, ksh сначала искал "-i" в $PATH, таким образом, было достаточно поместить Ваше зло "-i" в $PATH (ksh открыл бы тот вместо того в /tmp).

Все те векторы атаки фиксируются если, когда Вы делаете: cd /tmp; -i, система делает вместо этого (все еще в execve системном вызове):

  1. атомарно: узнайте, что файл является setuid, и откройте файл на некотором дескрипторе файла x из процесса.
  2. обработайте изменения euid во владельце файла.
  3. Выполненный /bin/sh /dev/fd/x
  4. sh открывается /dev/fd/x который может только относиться к файлу, который был execved.

Дело в том, что файл открыт как часть execve, таким образом, мы знаем, что это - код с доверяемым содержанием, которое будет интерпретируемым с измененным priviledges.

Теперь, когда не относится sudo потому что sudo политика на основе path.

Если sudo в правиле говорится, что можно выполнить/usr/local/bin/myscript как корень, затем можно сделать:

sudo /usr/local/bin/myscript

Но Вы не можете сделать:

sudo /tmp/any-file

Даже если "любой-файл" является hardlink или символьной ссылкой на /usr/local/bin/myscript. sudo не использует /dev/fd AFAICT.

6
27.01.2020, 20:28
  • 1
    , Который был образованием! Я думаю, что получил почти все, но Вы потеряли меня здесь: некоторые *зло "-i" файл, который содержит, например, просто "sh" *. В последнем, "например", сделал Вы имеете в виду файл, который содержит две символьных строки "sh" или исполняемый файл для sh (т.е. копия /bin/sh)? –  kjo 21.03.2013, 16:20
  • 2
    @kjo, ну, в общем, эти 3 символа "s", "h" и "\n". Таким образом, когда "sh" интерпретирует это, он выполнит интерактивный "sh". –  Stéphane Chazelas 21.03.2013, 21:41

Теги

Похожие вопросы