Pull to refresh

Comments 21

Такую новость нельзя на главную пускать.
Хорошо что уязвимость раскрыли сразу, а не пользовались в привате.
хотя странно. кто-то будет наказан в андеграунде)))
Далеко не факт? что ее раскрыли сразу )
Security Officer тоже не должен был раскрывать информацию об уязвимости пока не выпустят патч, но эксплойт уже попал в паблик.
«Normally it is the policy of the FreeBSD Security Team to not publicly discuss security issues until an advisory is ready, but in this case since exploit code is already widely available I want to make a patch available ASAP.»
Но все же заголовок сменили бы… (GN рекомендует)
Я немного не в теме. А почему, собственно, при выполнении suid-ных прог берется в расчет LD_PRELOAD? Ведь вроде бы как очевидно, что его, да и LD_LIBRARY_PATH надо сбрасывать на уровне ядра. Или оно для чего-то специфического на фре нужно?
Вернееб на уровне ld.so, ибо это его переменные.
А, ну да, не посмотрев патч, глупость я написал.
kegf Ваша информация устарела, патч выпустили сегодня.
(fixed in svn 199979/80/81 (HEAD/8-STABLE/7-STABLE))
Краткая инстркукция для владельцев FreeBSD 7.1 — 7.2 (Может и других, я не пробовал) Кому тяжко самому догнать как делать патч.

#cd /usr/src
#find . -name rtld.c (чтобы найти где этот файлик)
#cd /usr/src/libexec/rtld-elf
#cp rtld.c rtld.c.bak
#ee rtld.c

находите кусок (я искал по строке future)
if (!trust) {
        unsetenv(LD_ "PRELOAD");
        unsetenv(LD_ "LIBMAP");
        unsetenv(LD_ "LIBRARY_PATH");
        unsetenv(LD_ "LIBMAP_DISABLE");
        unsetenv(LD_ "DEBUG");

и меняете его на

if (!trust) {
//        unsetenv(LD_ "PRELOAD");
//        unsetenv(LD_ "LIBMAP");
//        unsetenv(LD_ "LIBRARY_PATH");
//        unsetenv(LD_ "LIBMAP_DISABLE");
//        unsetenv(LD_ "DEBUG");
        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();
        }
    }

#make
#make install
Да, забыл пояснить. Стандартный патч не работает в 7.1 — 7.2 как раз из за того, что в стандартном патче присутствует
unsetenv(LD_ "ELF_HINTS_PATH");
а в 7.1 — 7.2 эта строка отстутствует.
хм, а если у меня в 7.2 нет такого файла вообще в системе, что это значит?
значит ты ставил систему без исходников (/usr/src) скорее всего
kegf это бинарный патч, для тех кто не хочет ждать есть два пути, путь tifeit (tip: diff -u), или тот же diff, взять из svn
Sign up to leave a comment.

Articles