Уязвимости в ядре Linux, удалённо эксплуатируемые через Bluetooth

В ядре Linux выявлена уязвимость (CVE-2022-42896), которая может потенциально использоваться для организации удалённого выполнения кода на уровне ядра через отправку специально оформленного L2CAP-пакета через Bluetooth. Кроме того, выявлена ещё одна похожая проблема (CVE-2022-42895) в обработчике L2CAP, которая может привести к утечке содержимого памяти ядра в пакетах со сведениями о конфигурации. Первая уязвимость проявляется с августа 2014 года (ядро 3.16), а вторая с октября 2011 года (ядро 3.0). Уязвимости устранены в выпусках ядра Linux 6.1.0, 6.0.8, 4.9.333, 4.14.299, 4.19.265, 5.4.224, 5.10.154 и 5.15.78. Проследить за исправлением в дистрибутивах можно на следующих страницах: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Arch.

Для демонстрации возможности совершения удалённой атаки опубликованы прототипы эксплоитов, работающие в Ubuntu 22.04. Для проведения атаки злоумышленник должен находится в пределах досягаемости Bluetooth — предварительного сопряжения не требуется, но нужно чтобы на компьютере был активен Bluetooth. Для атаки достаточно знать MAC-адрес устройства жертвы, который может быть определён путём снифинга или на некоторых устройствах вычислен на основе MAC-адреса Wi-Fi.

Первая уязвимость (CVE-2022-42896) вызвана обращением к уже освобождённой области памяти (use-after-free) в реализации функций l2cap_connect и l2cap_le_connect_req — после создания канала через callback-вызов new_connection, для него не выставлялась блокировка, но настраивался таймер (__set_chan_timer), по истечению таймаута вызывающий функцию l2cap_chan_timeout и очищающий канал без проверки завершения работы с каналом в функциях l2cap_le_connect*.

По умолчанию таймаут составляет 40 секунд и предполагалось что состояние гонки при такой задержке не может возникнуть, но оказалось, что из-за другой ошибки в обработчике SMP можно добиться мгновенного вызова таймера и достижения состояния гонки. Проблема в l2cap_le_connect_req может привести к утечке памяти ядра, а в l2cap_connect к перезаписи содержимого памяти и выполнении своего кода. Первый вариант атаки может быть совершён при использовании Bluetooth LE 4.0 (с 2009 года), в второй при использовании Bluetooth BR/EDR 5.2 (с 2020 года).

Вторая уязвимость (CVE-2022-42895) вызвана утечкой остаточных данных из памяти в функции l2cap_parse_conf_req, что может быть использовано для удалённого получения сведений об указателях на структуры ядра через отправку специально оформленных запросов конфигурации. В функции l2cap_parse_conf_req использовалась структура l2cap_conf_efs, для которой не выполнялась предварительная инициализация выделенной памяти и через манипуляции с флагом FLAG_EFS_ENABLE можно было добиться включения в пакет старых данных из стека. Проблема проявляется только в системах, в которых ядро собрано с опцией CONFIG_BT_HS (по умолчанию отключена, но активирована в некоторых дистрибутивах, например, в Ubuntu). Для успешной атаки также требуется выставление параметра HCI_HS_ENABLED через управляющий интерфейс в значение true (по умолчанию не используется).

Источник: opennet.ru