Уязвимость в Bluetooth-стеке BlueZ, позволяющая удалённо выполнить код с правами ядра Linux

15 октября 2020 года

Инженеры из компании Google выявили серьёзную уязвимость (CVE-2020-12351) в свободном Bluetooth-стеке BlueZ, используемом в дистрибутивах Linux и Chrome OS. Уязвимость, которой присвоено кодовое имя BleedingTooth, позволяет неавторизированному атакующему без участия пользователя организовать выполнение своего кода на уровне ядра Linux через отправку специально оформленных Bluetooth-пакетов.

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

Уязвимость присутствует в компонентах, выполняющих обработку пакетов L2CAP (Logical link control and adaptation protocol) на уровне ядра Linux. Через отправку специально оформленного L2CAP-пакета с дополнительными данными для канала A2MP, атакующий может добиться перезаписи области за пределами выделенной памяти, что потенциально может использоваться для создания эксплоита для выполнения произвольного кода на уровне ядра.

При указании в пакете CID, отличающемся от L2CAP_CID_SIGNALING, L2CAP_CID_CONN_LESS и L2CAP_CID_LE_SIGNALING, в BlueZ вызывается обработчик 2cap_data_channel(), который для каналов в режимах L2CAP_MODE_ERTM и L2CAP_MODE_STREAMING вызывает функцию l2cap_data_rcv(). Если контрольная сумма совпадает далее выполняется вызов фильтра каналов sk_filter(). Для пакетов с CID L2CAP_CID_A2MP канал отсутствует, поэтому для его создания вызывается функция a2mp_channel_create(), которая использует при обработке поля chan-data тип "struct amp_mgr", но тип для данного поля должен быть "struct sock".

Уязвимость проявляется начиная с ядра Linux 4.8 и устранена в недавно опубликованном выпуске 5.9. В дистрибутивах проблема пока остаётся неисправленной (Debian, RHEL (уязвимость подтверждена в выпусках RHEL, начиная с 7.4), SUSE, Ubuntu, Fedora). Платформа Android проблеме не подвержена, так как в ней применяется свой Bluetooth-стек Fluoride, основанный на коде проекта BlueDroid от компании Broadcom.

Дополнительно сообщается о выявлении ещё двух уязвимостей в BlueZ:

  • CVE-2020-24490 - переполнение буфера в коде разбора пакетов HCI (hci_event.c). Удалённый атакующий через отправку широковещательных анонсов может добиться переполения буфера и выполнения кода на уровне ядра Linux. Атака возможна только на устройства, поддерживающие Bluetooth 5, в момент активности на них режима сканирования.
  • CVE-2020-12352 - утечка информации из стека при обработке пакетов A2MP. Проблема может быть использована атакующим, знающим MAC-адрес устройства, для получения данных из стека ядра, в котором потенциально может находиться конфиденциальная информация, такая как ключи для шифрования. В стеке также могут находиться указатели, поэтому проблема может использоваться для определения раскладки памяти и обхода защиты KASLR (рандомизация адресов) в эксплоитах для других уязвимостей.

Источники

править
 
 
Creative Commons
Эта статья содержит материалы из статьи «Уязвимость в Bluetooth-стеке BlueZ, позволяющая удалённо выполнить код с правами ядра Linux», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.