Дослідники з компанії NCC Group
У сумі було виявлено 6 уразливостей у мережевому стеку, 4 – у ядрі, 2 – у командній оболонці, 5 у обробниках системних викликів, 5 у підсистемі USB та 3 у механізмі оновлення прошивки. Двом проблем присвоєно критичний рівень небезпеки, двом — високий, 9 помірний, 9 — низький і 4 — для врахування. Критичні проблеми зачіпають IPv4 стек та парсер MQTT, небезпечні – драйвери USB mass storage та USB DFU. На момент розкриття інформації виправлення були підготовлені тільки для 15 найбільш небезпечних уразливостей, поки не залишаються проблеми, що призводять до відмови в обслуговуванні або пов'язані з недоробками в механізмах додаткового захисту ядра.
У IPv4 стеку платформи виявлено вразливість, що віддалено експлуатується, що призводить до пошкодження пам'яті при обробці певним чином модифікованих ICMP-пакетів. Ще одна серйозна проблема знайдена в парсері протоколу MQTT, яка викликана відсутністю належної перевірки довжини полів у заголовку і може призвести до віддаленого виконання коду. Менш небезпечні проблеми, що призводять до відмови в обслуговуванні, знайдені в IPv6-стеку та реалізації протоколу CoAP.
Інші проблеми можуть бути експлуатовані локально для виклику відмови в обслуговуванні або виконання коду на рівні ядра. Більшість даних вразливостей пов'язана з відсутністю належних перевірок аргументів системних викликів, і може призвести до запису і читання довільних областей пам'яті ядра. Проблеми охоплюють і безпосередньо код обробки системних викликів - звернення за негативним номером системного виклику призводить до цілісного переповнення. У ядрі також виявлено проблеми в реалізації захисту ASLR (рандомізація адресного простору) та механізму встановлення канаркових міток у стеку, що роблять ці механізми неефективними.
Багато проблем зачіпають USB-стек та окремі драйвери. Наприклад, проблема в USB mass storage дозволяють викликати переповнення буфера і виконати код на рівні ядра при підключенні пристрою до підконтрольного атакуючого USB-хосту. Вразливість у USB DFU, драйвері для завантаження нової прошивки по USB, дозволяє завантажити модифікований образ прошивки у внутрішній Flash мікроконтролера без застосування шифрування та обійшовши режим захищеного завантаження з перевіркою компонентів цифрового підпису. Додатково було вивчено код відкритого завантажувача
яка може призвести до переповнення буфера при використанні протоколу SMP (Simple Management Protocol) через UART.
Нагадаємо, що в Zephyr для всіх процесів надається тільки один глобальний спільно використовується віртуальний адресний простір (SASOS, Single Address Space Operating System). Специфічний для додатків код комбінується з адаптованим під конкретне застосування ядром і утворює виконуваний монолітний файл для завантаження і запуску на певному обладнанні. Усі системні ресурси визначаються на етапі компіляції, що скорочує розмір коду та збільшує продуктивність. У системний образ можуть включатися ті можливості ядра, які потрібні до виконання програми.
Цікаво, що серед ключових переваг Zephyr
Джерело: opennet.ru