У USB-стек ядра Linux виявлений ряд серйозних вразливостей, які можуть бути проексплуатувати зловмисниками для виконання довільного коду і отримання контролю над призначеним для користувача пристроєм.
Більшість вразливостей було виявлено дослідником безпеки з Google Андрієм Коноваловим. Експерт повідомив співтовариство Linux про 14 вразливості, виявлених в USB-підсистемах ядра Linux. За словами Коновалова, кожна з них може бути проексплуатовано локальним зловмисником за допомогою спеціального шкідливого USB-пристрої.
В цілому досліднику вдалося виявити 79 проблем, пов'язаних з USB в Linux. Більшість з них призводять до відмови в обслуговуванні (Denial of Service, DoS), змушуючи ОС зависати або перезавантажуватися, проте деякі дозволяють зловмисникові підвищити привілеї на цільовій системі і виконати шкідливий код. Всі проблеми були виявлені за допомогою фаззінга-інструменту syzkaller, розробленого Google для пошуку вразливостей.
Раніше в цьому році дослідники безпеки з Лондонського університету представили інструмент для пошуку проблем в USB-стек Linux під назвою POTUS. Інструмент знаходить уразливості, встановлюючи віртуальну машину, універсальне USB-пристрій і тестуючи стек за допомогою таких методів, як внесення несправностей (fault injection), фаззінга (fuzzing) і символьне виконання коду (symbolic execution). За допомогою POTUS дослідники виявили дві уразливості в ядрі Linux. Перша вразливість CVE-2016-5400 приводила до витоку пам'яті в драйвері USB-пристрою, що використовується для зв'язку з програмним забезпеченням AirSpy Software Defined Radio (SDR). Друга вразливість (не отримала ідентифікатор CVE) існувала в драйвері Lego USB Tower в ядрі Linux з 2003 року.
Фаззінга (fuzzing) - техніка тестування програмного забезпечення, часто автоматична або напівавтоматична, що містить у передачі з додатком на вхід неправильних, несподіваних або випадкових даних.
Внесення несправностей - метод, який використовується в тестуванні програмного забезпечення. Передбачає штучне внесення різного роду несправностей для тестування відмовостійкості і, зокрема, обробки виключень.
Символьне виконання (symbolic execution) - техніка, що дозволяє проводити моделювання виконання програми, при якому частина вхідних змінних представляється в символьному вигляді.