В утилитата , използвана за организиране на изпълнението на команди от името на други потребители, уязвимост (), позволяваща да повишите привилегиите си в системата до потребител root. Проблемът се проявява от версия sudo 1.7.1 само при използване на опцията „pwfeedback“ във файла \/etc\/sudoers, която е деактивирана по подразбиране, но активирана в някои дистрибуции, като Linux Mint и Elementary OS. Проблемът е отстранен в издаването , публикувано преди няколко часа. В дистрибуциите уязвимостта все още остава неизправена.
Опцията „pwfeedback“ включва показването на символа „*“ след всеки въведен символ при въвеждане на парола. Поради в реализацията на функцията getln(), дефинирана в файла tgetpass.c, предадената през стандартния входен поток (stdin) твърде голяма стринг с паролата при определени условия може да не се побере в отделения буфер и да запише други данни в стека. Препълването се появява по време на изпълнението на кода sudo с права root.
Същността на проблема е, че при използването на специален символ ^U (изчистване на реда) по време на въвеждане и при сбой в операцията на запис, кодът, отговарящ за изчистването на показаните символи „*“, нулира информацията за наличния размер на буфера, но не връща в първоначалната стойност указателя на текущата позиция в буфера. Друг фактор, допринасящ за експлоатацията, е липсата на автоматично деактивиране на режима „pwfeedback“ при получаване на данни не от терминала, а през входния поток (тази недостатъчност позволява създаването на условия за възникване на записна грешка, например, в системи с еднопосочни грешката възниква при опит за запис над края на канала за четене).
Тъй като атакуващият може изцяло да контролира перезаписването на данни в стека, не представлява трудност създаването на експлоит, позволяващ повишаване на привилегиите до потребител root. Проблемът може да бъде експлоатиран от всеки потребител, независимо от правата за използване на sudo и наличието на специфични за потребителя настройки в sudoers. За блокиране на проблема следва да се уверите, че в \/etc\/sudoers не е настроена опцията „pwfeedback“ и при необходимост да я деактивирате („Defaults !pwfeedback“). За проверка на наличието на проблема може да се изпълни код:
$ perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id
Парола: Сегментационна грешка
Източник: opennet.ru
