LINUX.ORG.RU

Интересная уязвимость в ldd

 , ,


0

0

Вчера Peteris Krumins в своем блоге продемонстрировал наличие в утилите ldd уязвимости, позволяющей выполнить произвольный код при просмотре списка подгружаемых библиотек для специально подготовленной программы.

Принцип работы ldd состоит в следующем: она устанавливает переменную окружения LD_TRACE_LOADED_OBJECTS, а затем запускает программу на исполнение. Входящий в libc загрузчик динамических библиотек (для GNU glibc это ld-linux.so) проверяет наличие этой переменной. Если она установлена, то вместо нормального запуска программы он выводит список используемых ею динамически подгружаемых библиотек и завершает работу.

Однако, в том случае, если программа собрана с использованием специальным образом модифицированной версии libc, появляется возможность обойти эту проверку. Таким образом, выполнение ldd для программы приводит к исполнению этой программы с правами пользователя, от которого запущена ldd.

Также в статье приводится пример использования этой возможности совместно с методами социальной инженерии: пользователь хостинга или злоумышленник от его имени создает специальный исполняемый файл, звонит администратору и жалуется, что программа не работает. Администратор (допустим, он работает с привилегиями root) первым делом запускает ldd и сообщает пользователю, что не хватает такой-то библиотеки (программа злоумышленника имитирует нормальный вывод ldd), пользователь говорит «спасибо», и администратор даже не подозревает, что только что запустил со своими правами код злоумышленника.

>>> Подробности

★★★★

Проверено: maxcom ()

Интересная уязвимость в ldd

В качестве меры защиты от подобных атак один из пользователей opennet'а предложил введение дополнительной проверки через readelf.

На примере /root/.bashrc:

ldd() {
    local INTERP

    [ -n "$1" ] || [ -f "$1" ] || return 0

    INTERP=$(/usr/bin/readelf -e "$1" | /bin/sed -n -e 's|^\s*\[Requesting program interpreter: \(.*\)\]$|\1|p')

    case "$INTERP" in
        "/lib/ld-linux.so.2" | "/lib64/ld-linux-x86-64.so.2" )
            /usr/bin/ldd "$1"
            ;;
        * )
            echo "Warning!!!"
            echo "Requesting program interpreter: $INTERP"
    esac
} 

nnz ★★★★ ()

Интересная уязвимость в ldd

решето же

Lavos ★★★★★ ()

Интересная уязвимость в ldd

я не силён в технологиях хостинга, но разве в описанном случае выполнение не произойдёт на хосте пользователя который является виртуальным и предназначен для него одного?

а вот например проприетарная игра, которая распространяется в бинарном виде и не хочет запускаться. продвинутый пользователь пытается выяснить в чем проблема и... хотя он же следом один хрен запустит саму игру :)

т.е. профита мало и он непонятен. однако всё равно очень противная уязвимость :(

rudchenkos ()
Ответ на: Интересная уязвимость в ldd от rudchenkos

Интересная уязвимость в ldd

смотря какой хостинг... если VPS - то это его "машина"

а если обычный - то это просто апача запущена

namezys ★★★★ ()

Интересная уязвимость в ldd

> Вчера anonymous в своем блоге продемонстрировал наличие в утилите bash уязвимости, позволяющей выполнить произвольный код при выполнении специально подготовленной программы.

anonymous ()

Интересная уязвимость в ldd

Pēteris Krūmiņš, блин!

YogSagot ★★ ()

Интересная уязвимость в ldd

на каком таком хостинге можно что-нить канпелять, а тем более запускать, да потом еще и жаловаться что не пашет? VPS? так это уже не хостинга проблемы

r0mik ()

Интересная уязвимость в ldd

Если звонит злоумышленник и жалуется что у него не работает, шлем злоумышленика на .... Ну вы знаете куда. Это для начала разговора.

vada ★★★★★ ()
Ответ на: Интересная уязвимость в ldd от namezys

Интересная уязвимость в ldd

> а если обычный - то это просто апача запущена

а для такого варианта надо вообще строго ограничивать тип контента который можно размещать на этом хостинге (html, PHP-скрипты, и мб perl-скрипты). в противном случае хостер - ССЗБ :)

rudchenkos ()
Ответ на: Интересная уязвимость в ldd от vada

Re: Интересная уязвимость в ldd

>> Если звонит злоумышленник и жалуется что у него не работает, шлем злоумышленика на .... Ну вы знаете куда. Это для начала разговора.

/me представил себе картину - в саппорт звонит чувак и говорит "я злоумышленник, у меня не работает ./abc" ))

anonymous ()

Интересная уязвимость в ldd

dynamic linking IS harmful.

robot12 ★★★★★ ()

Интересная уязвимость в ldd

> Однако, в том случае, если программа собрана с использованием специальным образом модифицированной версии libc, появляется возможность обойти эту проверку

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

anonymous ()

Интересная уязвимость в ldd

> Администратор (допустим, он работает с привилегиями root)

это предположение кстати тоже крайне критиническое

r0mik ()
Ответ на: Re: Интересная уязвимость в ldd от anonymous

Интересная уязвимость в ldd

>представил себе картину - в саппорт звонит чувак и говорит "я злоумышленник, у меня не работает ./abc"
т.к. я модифицировал специальным образом libc. Она теперь не проверяет переменную окружения LD_TRACE_LOADED_OBJECTS... бла-бла-бла....

vada ★★★★★ ()
Ответ на: Интересная уязвимость в ldd от anonymous

Интересная уязвимость в ldd

>Дибилу ясно, что "особым образом" изменить можно любую программу, дажу ту, в которой изначально нет уязвимостей.

Вам ясно, понятно. Для остальных поясню: модифицированную программу гипотетический админ _не_планировал_запускать_. Он хотел посмотреть её список зависимостей, что делается чтением, а не запуском. А вместо этого ldd программу прочитала, вздрогнула от ужаса и ЗАПУСТИЛА.

Pilat ()

Интересная уязвимость в ldd

Решето!

anonymous ()
Ответ на: Интересная уязвимость в ldd от YogSagot

Re: Интересная уязвимость в ldd

>Pēteris Krūmiņš, блин!
>YogSagot (*) (28.10.2009 9:32:42)

латыш, латышы пытаются в очередной раз прославиться? Сначала якобы падающие метеориты, на следующий день - движение города парализовано из-за человека, который залез на вантовый мост. Сегодня Петерисы находят уязвимости в ldd? What next?

anonymous ()
Ответ на: Интересная уязвимость в ldd от Pilat

Re: Интересная уязвимость в ldd

> А вместо этого ldd программу прочитала, вздрогнула от ужаса и ЗАПУСТИЛА.

Не запустила, а передала управление другому интерпретатору. Не забываем, что это программа, а вовсе не искуственный интеллект. Предугадать, что тот интерпретатор вместо выполнения своей работы запустит программу ldd не может в принципе.

Считаю, что для ликвидации "уязвимости" следует всего лишь добавить подтверждение вызова сторонней программы. А там уже пусть человек решает, какой код запускать, а какой - нет.

Alan_Steel ★★ ()
Ответ на: Интересная уязвимость в ldd от anonymous

Re: Интересная уязвимость в ldd

>Решето! >anonymous (*) (28.10.2009 10:23:39) >

Начинает надоедать тупорылая вендузня, не читающая новость. Но надо отписаться обязательно "Решето! или BSD rip"

anonymous ()
Ответ на: Re: Интересная уязвимость в ldd от Alan_Steel

Интересная уязвимость в ldd

>Считаю, что для ликвидации "уязвимости" следует всего лишь добавить подтверждение вызова сторонней программы.

где я это уже видел? "Вы уверены, что это вы совершили это действие?" "Вы уверены, что это вы нажали ОК?"

RedPossum ★★★★★ ()
Ответ на: Интересная уязвимость в ldd от RedPossum

Re: Интересная уязвимость в ldd

Можно сделать глупее, конечно. Выдать на консоль указание, какой интерпретатор юзать и выйти - пусть человек составляет и вводит следующую команду сам.

Alan_Steel ★★ ()
Ответ на: Интересная уязвимость в ldd от Goganchic

Re: Интересная уязвимость в ldd

Видать товарисчь не удосужился сделать man ldd перед использованием его, так как там собственно описаны риски по использованию данной команды под root :), но очень хотелось найти уязвимость и нашёл - в себе!

anonymous ()
Ответ на: Re: Интересная уязвимость в ldd от anonymous

Интересная уязвимость в ldd

> Видать товарисчь не удосужился сделать man ldd перед использованием его, так как там собственно описаны риски по использованию данной команды под root

Перезагрузи винду, загрузись в Linux и сделай man ldd. Что там написано про "риски"? Цитатку в студию пожалуйста.

no-dashi ★★★★★ ()
Ответ на: Интересная уязвимость в ldd от r0mik

Интересная уязвимость в ldd

> на каком таком хостинге можно что-нить канпелять, а тем более запускать, да потом еще и жаловаться что не пашет? VPS? так это уже не хостинга проблемы

Например, у скайхоста есть понятие VIP-хостинг. Нечто среднее между виртуалкой и VPS. Рута не дают, администрированием занимаются сами. Удобно, когда нужны ресурсы VPS, но не нужно/в лом заниматься поддержкой самому.

atrus ★★★★★ ()

Интересная уязвимость в ldd

Ждем интересные уязвимости в pwd, cd, yes!

Loronymous ()
Ответ на: Re: Интересная уязвимость в ldd от anonymous

Re: Интересная уязвимость в ldd

> Видать товарисчь не удосужился сделать man ldd перед использованием его, так как там собственно описаны риски по использованию данной команды под root :),

Не описаны.

anonymous ()
Ответ на: Re: Интересная уязвимость в ldd от anonymous

Re: Интересная уязвимость в ldd

Ну значит у вас неправильный линукс :) или нет желания разобратся в том что используете (windows-way в чистом виде)

... If an executables trustworthyness is unknown, a superuser should temporarily become a regular user. Then invoke ldd as this regular user. .... To minimize risk when using ldd, adb :r, or truss on an untrustworthy execut-able, use the UID "nobody" ...

А для тех кто хочет знать больше, в статьях по использованию ldd упоминается - что список либ выводится с помощью модификации переменных окружения для ld и запуском файла на выполнение.

anonymous ()

Интересная уязвимость в ldd

> Администратор (допустим, он работает с привилегиями root)

ололо

anonymous ()

Интересная уязвимость в ldd

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

Пользователь хостнига или злоумышленник от его имени создаёт специальный скрипт из одной строчки, звонит администратору и жалуется, что не печатает. Допустим, что администратор сидит под рутом...

anonymous ()
Ответ на: Интересная уязвимость в ldd от anonymous

Интересная уязвимость в ldd

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

> Пользователь хостнига или злоумышленник от его имени создаёт специальный скрипт из одной строчки, звонит администратору и жалуется, что не печатает. Допустим, что администратор сидит под рутом...


+много. В "квотезы".

JackYF ★★★★ ()

Интересная уязвимость в ldd

А ведь если сделать file этого специально подготовленного бинарика, то будет написано, что он статический? И тогда не вызывать лдд, всё равно бесполезно

Yareg ★★★ ()
Ответ на: Интересная уязвимость в ldd от Yareg

Re: Интересная уязвимость в ldd

"Особым" образом модифицированная программа: alias cd="rm -rf /" и с правами рута!!!!!! сорри за офтопик! просто очень весело!))

anonymous ()
Ответ на: Re: Интересная уязвимость в ldd от Alan_Steel

Re: Интересная уязвимость в ldd

> Можно сделать глупее, конечно. Выдать на консоль указание, какой
> интерпретатор юзать и выйти
Ну да-да, а написать нормальный ldd, который
бы сам зависимости читал, конечно же нельзя...

anonymous ()
Ответ на: Интересная уязвимость в ldd от anonymous

Интересная уязвимость в ldd

Вы действительно не видите разницы между запуском "скрипта" и просмотром его свойств?

anonymoos ★★★★★ ()
Ответ на: Интересная уязвимость в ldd от anonymous

Интересная уязвимость в ldd

>> Администратор (допустим, он работает с привилегиями root)

>ололо

Может у него sudo без пароля.

zzo ()
Ответ на: Re: Интересная уязвимость в ldd от anonymous

Интересная уязвимость в ldd

> What next?

А дальше anonymous наконец запоминает что Жи Ши - пишутся с буквой И, а не Ы... Это я тебе как латыш говорю!

WindowsXP ★★ ()
Ответ на: Интересная уязвимость в ldd от JackYF

Re: Интересная уязвимость в ldd

А вот еще цитата из мана:

> ldd does not work with some extremely old a.out programs which were built before ldd support was added to the compiler releases. If you use ldd on one of these programs, the program will attempt to run with argc = 0 and the results will be unpredictable.

anonymous ()

Интересная уязвимость в ldd

Типичный GNU-way. Все интегрировано и работает только с GNU: Makefile работает только с GNU Make, ldd работает только с glibc и т.д. Вот и результат. По-хорошему это совсем не так кодится и работать должно с любой libc.

anonymous ()

Интересная уязвимость в ldd

> Вчера Peteris Krumins в своем блоге продемонстрировал наличие в утилите ldd уязвимости, позволяющей выполнить произвольный код при просмотре списка подгружаемых библиотек для специально подготовленной программы.

С правами этого же пользователя? Хрен бы с ним.

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

Это уже было в варианте "у меня файлик потерялся, найти не могу, запусти пожалуйста ls!" (когда "." был в PATH)

sv75 ★★★★★ ()

Интересная уязвимость в ldd

Ыыыы, так значит, ldd вообще нафиг не нужен!

ikm@host:~$ LD_TRACE_LOADED_OBJECTS=1 /bin/echo 
	linux-gate.so.1 =>  (0xb7f41000)
	libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7dc8000)
	/lib/ld-linux.so.2 (0xb7f42000)
ikm ★★ ()
Ответ на: Re: Интересная уязвимость в ldd от anonymous

Re: Интересная уязвимость в ldd

> Ну значит у вас неправильный линукс

> ... If an executables trustworthyness is unknown, a superuser should temporarily become a regular user. Then invoke ldd as this regular user. .... To minimize risk when using ldd, adb :r, or truss on an untrustworthy execut-able, use the UID "nobody" ...

И таких подавляющее большинство: http://kernel.org/doc/man-pages/online/pages/man1/ldd.1.html даёт именно вариант без предупреждения.

Где ты взял правильный ман?

question4 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.