Опасные уязвимости в утилитах beep и patch

Рaскрыты дeтaли критичeскoй уязвимoсти в утилитe beep. Изнaчaльнo прoблeмa былa прeдстaвлeнa в нaчaлe aпрeля в шутoчнoй фoрмe пoд имeнeм Holey Beep и былa вoспринятa мнoгими кaк пeрвoaпрeльскaя шуткa с сaтирoй нa сoврeмeнныe тeндeнции прoдвижeния инфoрмaции об уязвимостях. Чтобы Holey Beep был создан обособленный сайт, подготовлен видеоклип, упомянута запас исправления антивирусами и необходимость обновления браузера. Отображение было изложено очень поверхности в общих словах. Для деле проблема оказалась реальной уязвимостью CVE-2018-0492, позволяющей усовершенствовать привилегии до прав root. Функции утилиты beep сводятся к выводу гудка около запуске, при этом во многих дистрибутивах, в том числе и Debian и Ubuntu, утилита установлена с флагом suid root (надобно для доступа к текущему tty при удалённом входе). Найденная незащищенность вызвана состоянием гонки, которое инициируется от обработчик сигналов в момент манипуляции с файловыми дескрипторами рента и, в случае успеха, позволяет записать 4 байта в все равно кто файл в системе. В ходе атаки создаётся символическая справка на /dev/input/event0, которая передаётся в качестве аргумента опции "--device" (структура консоли для получения события о начале гудка), инициируется гудочек и через очень маленькую специально подобранную задержку символическая замечание заменяется ссылкой на другой обложка, через ещё одну небольшую задержку процессу отправляются сигналы SIGINT и SIGKILL. Доделывание по SIGKILL приводит к вызову функции do_beep() угоду кому) записи в консоль команды для остановки воспроизведения гудка ("write(console_fd, &e, sizeof(struct input_event))"). Рассчитав задержку таким (образом, чтобы SIGINT попал на грабен кода, в котором содержимое console_fd и console_type (во-первых поле структуры "e") указывает на некорректные значения, позволено записать произвольные 4 байта в файл. В) такой степени как один запуск утилиты beep позволяет претворить несколько гудков (функция play_beep) и около каждом гудке заново открывается микроконсоль, можно найти такой момент, близ котором в console_fd будут отражены границы нового гудка (дескриптор на замещенный файл), а в console_type останется быль значение. При удачном стечении обстоятельств в ранее подменённый файл будет записано 4-байтовое функция со временем, содержимое которого хоть контролировать через опцию "-l". Для получения прав root, в ходе работы эксплоита удаление на /dev/input/event0 подменяется ссылкой бери файл /etc/profile или /etc/bash/bashrc и производится пометка 4 символов "/*/x", которые при запуске очередного root-сеанса приведут к выполнению априори подготовленного скрипта /tmp/x. Для тестирования подготовлен пролетарий эксплоит. Для исправления проблемы подготовлен патч. Дистрибутивам рекомендуется выключить флаг suid с утилиты beep может ли быть последовать примеру дистрибутива SUSE и занять место beep на shell-заглушку с командой 'echo -en "\007"' иначе говоря "printf '\a'". С учётом наличия в beep опций в целях передачи пути к устройству ввода и запуска с применением suid root, объявление Holey Beep вызвал интерес исследователей безопасности, которые приёмом нашли ещё две, менее опасные уязвимости. Сущность первой проблемы в возможности определения наличия файлов в каталогах, доступных только лишь пользователю root (через "-device" указывается трасса к проверяемому файлу и в зависимости от ответа определяется существует экой файл или нет). Кроме проблем в beep опасная ранимость (CVE-2018-1000156) также найдена в утилите GNU patch. Переделка связана с поддержкой патчей в устаревшем формате "ed", что допускает выполнение сторонних команд рядом помощи оператора "!". Интересно, по какой причине в BSD patch похожая проблема была устранена в 2015 году. А именно, попытка применения следующего патча, приведёт к ежедневник текущего идентификатора пользователя в файл /pwn.lol: --- a 2018-04-11 13:37:37.000000000 +0100 +++ b 2018-04-11 13:38:38.000000000 +0100 1337a 1,112d !id>~/pwn.lol Реконструкция пакета GNU patch с устранением уязвимости в (данное выпущено только для Ubuntu и предвидится для других дистрибутивов (Debian, Fedora, SUSE, openSUSE, RHEL, CentOS). Гнездо: http://www.opennet.ru/opennews/art.shtml?num=48427