W bibliotece libinput 1.20.1, zapewniającej zunifikowany stos wejścia, umożliwiający używanie tych samych narzędzi do przetwarzania zdarzeń z urządzeń wejściowych w środowiskach opartych na Wayland i X.Org, usunięto lukę (CVE-2022-1215), która pozwala na wykonanie swojego kodu po podłączeniu do systemu specjalnie zmodyfikowanego/emuowanego urządzenia wejściowego. Problem występuje w środowiskach opartych na X.Org i Wayland, i może być wykorzystywany zarówno podczas lokalnego podłączenia urządzeń, jak i przy manipulacjach z urządzeniami z interfejsem Bluetooth. W przypadku uruchomienia serwera X z uprawnieniami roota luka ta umożliwia uzyskanie wykonania kodu z podwyższonymi uprawnieniami.
Problem wynika z błędu formatowania łańcucha w kodzie odpowiedzialnym za zapisywanie w logu informacji o podłączeniu urządzenia. W szczególności funkcja evdev_log_msg zmieniała oryginalny łańcuch formatu zapisu logu, dodając jako prefiks nazwę urządzenia przy użyciu wywołania snprintf. Następnie zmieniony łańcuch był przekazywany do funkcji log_msg_va, która z kolei używała funkcji printf. W ten sposób w pierwszym argumencie printf, na którym stosowano analizę znaków formatu, znajdowały się niezbadane dane zewnętrzne, a atakujący mógł zainicjować uszkodzenie stosu, zwracając nazwę urządzenia zawierającą symbole formatu łańcucha (np. „Evil %s”).
Źródło: opennet.ru
