Ufa FreeBSD Team » FreeBSD

Локальная уязвимость rltd из FreeBSD

(4 сообщения)
  1. hunt
    Участник

    Кто-нибудь из матёрых BSD-шников разъяснит мне (человеку, к FreeBSD не очень близкому) в чём проблема?
    Все трактковки, которые я видел, звучали примерно так: не очищаются переменные окружения. Но если посмотреть на патч

    ...
         if (!trust) {
    -        unsetenv(LD_ "PRELOAD");
    -        unsetenv(LD_ "LIBMAP");
    -        unsetenv(LD_ "LIBRARY_PATH");
    -        unsetenv(LD_ "LIBMAP_DISABLE");
    -        unsetenv(LD_ "DEBUG");
    -        unsetenv(LD_ "ELF_HINTS_PATH");
    +        if (unsetenv(LD_ "PRELOAD") || unsetenv(LD_ "LIBMAP") ||
    +	    unsetenv(LD_ "LIBRARY_PATH") || unsetenv(LD_ "LIBMAP_DISABLE") ||
    +	    unsetenv(LD_ "DEBUG") || unsetenv(LD_ "ELF_HINTS_PATH")) {
    +		_rtld_error("environment corrupt; aborting");
    +		die();
    +	}
         }
    ...

    то становится ясно - проблема в том, что unsetenv вываливалась с ошибкой и не изменяла значение переменной. (Поправьте, если ошибаюсь)
    Далее посмотрим на подозрительный код эксплойта:

    ...
           extern char **environ;
           environ = (char**)malloc(8096);
    
           environ[0] = (char*)malloc(1024);
           environ[1] = (char*)malloc(1024);
           strcpy(environ[1], "LD_PRELOAD=/tmp/w00t.so.1.0");
    
           execl("/sbin/ping", "ping", 0);
    ...

    Либо автор употребляет в-ва, либо он что-то знает и не говорит. (Поправьте, если ошибаюсь)
    Кроме того фраза Kingcope'а "Normally rtld does not allow dangerous environment variables like LD_PRELOAD to be set when executing setugid binaries like "ping" or "su"" настораживает.
    На сколько я понял уязвимость в unsetenv, нет?

    Отправлено 9 месяцев назад #
  2. kegf
    Администратор

    на оф.сайте писали что патч - только временная мера, а так ошибка именно в unsetenv, ты прав.

    Отправлено 9 месяцев назад #
  3. hunt
    Участник

    Следовательно, там где нет проверки успешности unsetenv - потенциальная уязвимость.
    А как конкретно функцию доводят до ошибки не упоминалось?
    Похоже на то, что соль в отсутствии NULL, завершающего массив. Хотя и буфер в почти 8 кБ тоже подозрителен =).

    Отправлено 9 месяцев назад #
  4. kegf
    Администратор

    здесь хорошие комментарии - http://www.xakep.ru/post/50351/FreeBSD-local-root-exploit1.txt
    если интересно можешь разобрать

    Отправлено 9 месяцев назад #

RSS feed for this topic

Отправить сообщение

Вы должны войти в систему, чтобы оставлять сообщения.