Описание:
Как ты знаешь, rsync – средство для синхронизации файлов на удаленных компьютерах. Недавно в этой программе была обнаружена замечательная уязвимость, которая позволяет получить рутовые привилегии в любой Linux-системе. Баг заключается в банальном переполнении буфера через переменную окружения RSYNC_PROXY. Длина переменной не проверяется на размер, в результате чего злоумышленник способен изменить адрес возврата и выполнить заранее приготовленный шеллкод. Дырка находится в файле socket.c (в функции strcpy). Наглядно определить уязвимость rsync можно с помощью двух команд:
$ export RSYNC_PROXY=`perl -e 'print «A» x100,":","A" x 1000'`
$ rsync localhostrsync:
В случае если бинарник дырявый, ты увидишь следующее сообщение:
getaddrinfo:AAAAAAAAAAAAA: ai_family not supported
Segmentation fault
Защита:
Защититься можно двумя способами: либо обновить версию пакета, либо запатчить текущую. Патч накладывается элементарно. В файле socket.c найди строчку strcpy(portbuf, cp) и поменяй ее на strncpy(portbuf, cp, 10). Этим ты ограничишь размер переменной, сделав rsync неуязвимой.
Ссылки:
Рабочий эксплойт лежит по адресу www.xakep.ru/post/21234/exploit.txt. Детального описания баги пока нет.