В библиотеке libinput 1.20.1, предоставляющей унифицированный стек ввода, позволяющий использовать одни и те же средства обработки событий от устройств ввода в окружениях на базе Wayland и X.Org, устранена уязвимость (CVE-2022-1215), позволяющая организовать выполнение своего кода при подключении к системе специально модифицированного/эмулируемого устройства ввода. Проблема проявляется в окружениях на базе X.Org и Wayland, и может быть эксплуатирована как при локальном подключении устройств, так и при манипуляциях с устройствами с интерфейсом Bluetooth. В случае выполнения X-сервера с правами root уязвимость позволяет добиться выполнения кода с повышенными привилегиями.
Проблема вызвана ошибкой форматирования строки в коде, отвечающем за вывод в лог информации о подключении устройства. В частности, проблема связана с тем, что в коде два раза вызывались функции класса
printf и при втором вызове в блок форматирования попадало значение, полученное от устройства. Из-за отсутствия проверки наличия спецсимволов в имени устройства, атакующий мог инициировать переполнение буфера при возвращении устройством идентификатора, содержащего символы форматирования строки (например, “Evil %s”).
Вначале в функции evdev_log_msg при помощи вызова snprintf формировалась строка, в которую в том числе включалось значение переменной с идентификатором устройства. Далее для вывода в лог эта строка передавалась в функцию log_msg_va, которая в свою очередь использовала функцию printf с указанием выводимого значения в первом аргументе, к которому применяется разбор символов форматирования.