The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Опасные уязвимости в утилитах beep и patch"
Отправлено opennews, 11-Апр-18 10:41 
Раскрыты детали критической уязвимости в утилите beep. Изначально проблема была представлена в начале апреля в шуточной форме под именем Holey Beep и была воспринята многими как первоапрельская шутка с сатирой на современные тенденции продвижения информации об уязвимостях. Для Holey Beep был создан отдельный сайт, подготовлен видеоклип, упомянута возможность исправления антивирусами и необходимость обновления браузера. Описание было изложено очень поверхностно в общих словах.

На деле проблема оказалась реальной уязвимостью CVE-2018-0492, позволяющей повысить привилегии до прав root. Функции утилиты beep сводятся к выводу гудка при запуске, при этом во многих дистрибутивах, включая Debian и Ubuntu, утилита установлена с флагом suid root (требуется для доступа к текущему tty при удалённом входе). Найденная уязвимость вызвана состоянием гонки, которое инициируется через обработчик сигналов в момент манипуляции с файловыми дескрипторами консоли и, в случае успеха, позволяет записать 4 байта в любой файл в системе.

В ходе атаки создаётся символическая ссылка на /dev/input/event0, которая передаётся в качестве аргумента опции "--device" (устройство консоли для получения события о начале гудка), инициируется гудок и через очень маленькую специально подобранную задержку символическая ссылка заменяется ссылкой на другой файл, через ещё одну небольшую задержку процессу отправляются сигналы SIGINT и SIGTERM. При обработке сигнала SIGINT происходит вызов функции 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" указывается путь к проверяемому файлу и в зависимости от ответа определяется существует такой файл или нет). Вторая проблема вызвана целочисленным переполнением при обработке содержимого опций "-l" и "-D".

Кроме проблем в 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 и Arch Linux, для других дистрибутивов исправление ожидается в ближайшее время (Debian, Fedora, SUSE, openSUSE, RHEL, CentOS).

URL: http://openwall.com/lists/oss-security/2018/04/06/1
Новость: https://www.opennet.ru/opennews/art.shtml?num=48427

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру