- PVSM.RU - https://www.pvsm.ru -
В модуле beep операционной системы Linux обнаружена уязвимость, позволяющая запускать побочные эффекты файлов и просматривать их типы, не имея на то соответствующих прав. Расскажем, в чем суть проблемы и как варианты её решения предложило ИТ-сообщество.
[1]
/ Flickr / Chris [2] / CC [3]
Модуль beep формирует звуковые оповещения об ошибках, возникающих при работе в командной строке и в целом позволяет управлять [4] «бипером» ПК. Утилиту создал разработчик Джонатан Найтингейл (Johnathan Nightingale), который хотел получить [5] больше возможностей при работе с консолью, чем позволяла обычная команда printf("a").
Первые новости появились на сайте holeybeep.ninja [6], который описывает уязвимость в сатирической манере. В The Register полагают [4], что эта веб-страница — попытка высмеять тех, кто популяризирует баги и создает для них отдельные сайты. Уже позже начали появляться официальные отчеты об ошибках.
В отчете [7], опубликованном Debian, отмечено, что Beep выдает сведения о наличии любого файла, даже если он должен быть скрыт от пользователя, который сделал запрос.
$ ls -ld /etc/hidden/
drwx------ 2 root root 4096 Apr 7 08:18 /etc/hidden/
$ ls -l /etc/hidden/secret
ls: cannot access '/etc/hidden/secret': Permission denied
$ ls -l /etc/hidden/nonexistent
ls: cannot access '/etc/hidden/nonexistent': Permission denied
$ beep -e /etc/hidden/secret
ioctl: Inappropriate ioctl for device
ioctl: Inappropriate ioctl for device
$ beep -e /etc/hidden/nonexistent
Could not open /etc/hidden/nonexistent for writing
open: No such file or directory
При этом система выдает информацию о типе файла, даже если у запрашивающего пользователя нет на это прав (например, сокет может выдать сообщение: «No such device or address»). Этого не должно происходить, если файл лежит в директории, недоступной вызывающему пользователю. Кроме того, с помощью уязвимости злоумышленники могут запускать побочные эффекты [8] и блокировать запуск произвольных программ. Например, запуск beep -s -e /bin/sh приведет [9] к ошибке ETXTBSY («Текстовый файл занят»), что можно назвать DoS-атакой.
Как отмечают пользователи GitHub, причина уязвимости связана [9] с возникновением гонок [10] при использовании обработчиками сигнала функции free(). Эта функция не входит [11] в список async-signal-safe, то есть не может быть безопасно вызвана [11] внутри обработчика. Работа free() может прерваться другим сигналом, что вызывает нарушение структур данных и глобальных переменных управления кучей [12].
Резидент GitHub отмечает, что в последней версии beep.c один обработчик работает сразу с двумя сигналами (SIGINT и SIGTERM). Это позволяет повторно запускать handle_signal () несколько раз подряд, что приводит к двойному высвобождению памяти.
/ Flickr / Tomás Fano [13] / CC [14]
Чтобы устранить уязвимость, разработчики некоторых операционных систем (например, Ubuntu) выпустили фикс [15]. Однако, по мнению сообщества, он адресует не все трудности, связанные с Beep. Как отмечают [9] в обсуждении на GitHub, он решает ситуацию с гонками, но проблемы с раскрытием данных остаются.
По этим причинам, в качестве кардинального решения проблемы, исследователь Ханно Бок (Hanno Böck) предлагает перестать устанавливать Beep как suid. Он также отметил [16], что модуль Beep в принципе не нужен современным устройствам, так как биперы стоят не во всех компьютерах. В качестве замены Ханно Бок предлагает вернутся к простой и безопасной команде printf("a"), как это сделали разработчики дистрибутива SUSE.
Автор: 1cloud
Источник [22]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/277677
Ссылки в тексте:
[1] Image: https://habrahabr.ru/company/1cloud/blog/353374/
[2] Chris: https://www.flickr.com/photos/1967chevrolet/6051473993/
[3] CC: https://creativecommons.org/licenses/by/2.0/
[4] управлять: https://www.theregister.co.uk/2018/04/09/linux_beep_bug/
[5] получить: http://www.johnath.com/beep/
[6] holeybeep.ninja: https://holeybeep.ninja/
[7] отчете: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=895115
[8] побочные эффекты: https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B1%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_%D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
[9] приведет: https://github.com/johnath/beep/issues/11
[10] гонок: https://en.wikipedia.org/wiki/Race_condition
[11] не входит: http://man7.org/linux/man-pages/man7/signal-safety.7.html
[12] кучей: https://ru.wikipedia.org/wiki/%D0%9A%D1%83%D1%87%D0%B0_(%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C)
[13] Tomás Fano: https://www.flickr.com/photos/tomasfano/2886627797/
[14] CC: https://creativecommons.org/licenses/by-sa/2.0/
[15] фикс: https://packages.ubuntu.com/source/bionic/beep
[16] отметил: http://seclists.org/oss-sec/2018/q2/20
[17] Безопасность данных в облаке: угрозы и способы защиты: https://1cloud.ru/blog/bezopasnost-dannih-v-oblake?utm_source=habrahabr&utm_medium=cpm&utm_campaign=infosecurity&utm_content=blog
[18] Meltdown и Spectre: новогодняя процессорная уязвимость: https://1cloud.ru/blog/uyazvimost-meltdown-spectre?utm_source=habrahabr&utm_medium=cpm&utm_campaign=infosecurity&utm_content=blog
[19] Как обезопасить Linux-систему: 10 советов: https://1cloud.ru/blog/linux-server-security-advices?utm_source=habrahabr&utm_medium=cpm&utm_campaign=infosecurity&utm_content=blog
[20] Backup и Snapshot: отличия и применение: https://1cloud.ru/blog/razlichija-backup-i-snapshot?utm_source=habrahabr&utm_medium=cpm&utm_campaign=infosecurity&utm_content=blog
[21] 4 ключевых тренда облачной безопасности: https://1cloud.ru/blog/cloud-safety-trends?utm_source=habrahabr&utm_medium=cpm&utm_campaign=infosecurity&utm_content=blog
[22] Источник: https://habrahabr.ru/post/353374/?utm_campaign=353374
Нажмите здесь для печати.