В ядрото на 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
