У ядрі 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, для нього не виставлялося блокування, але налаштовувався таймауту, що викликає функцію 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
