Уязвимость, позволяющая обойти блокировку экрана в дистрибутивах с рабочим столом Cinnamon

Раскрыта информация об уязвимости в хранителе экрана cinnamon-screensaver, развиваемом дистрибутивом Linux Mint, которая позволяет войти в заблокированный сеанс пользователя без ввода пароля на системах с несколькими раскладками клавиатур. Проблема может использоваться для получения доступа к данным пользователя, на время оставившего свой компьютер без присмотра.

Проблема эксплуатируется тривиально – для обхода блокировки экрана достаточно вызвать виртуальную клавиатуру, переключиться на другую раскладку, после чего несколько раз выбрать в верхней панели “ē”, “q” или другие буквы, отсутствующие в активной раскладке клавиатуры. Уязвимость проявляется в Linux Mint и различных редакциях Arch и Debian Testing, поставляемых с рабочим столом Cinnamon. Fedora 33/34 и Debian 10 проблеме не подвержены, так как автоматически меняют раскладку на US. Эксплуатация проблемы возможна начиная с впуска Cinnamon 4.2, в котором появилась поддержка вызова экранной клавиатуры из хранителя экрана. Обновления с устранением уязвимости уже сформированы для Linux Mint 19.x, Mint 20.x и LMDE 4. Идентификатор CVE проблеме пока не присвоен.

Примечательно, что проблема была обнаружена после того как дети одного из разработчиков играли во “взлом” компьютера отца, нажимая во время блокировки экрана случайные клавиши и кликая на всё подряд. Разработчик наблюдал за этим процессом и немало удивился, когда “взлом” удался и блокировка экрана пропала. Последними действиями детей были одновременные нажатия на обычной и экранной клавиатуре, которые привели к краху хранителя экрана. Первой мыслью было то, что это случайное стечение обстоятельств, но детям удалось повторить разблокировку и во второй раз.

Разбор показал, что проблема вызвана регрессией, возникшей при исправлении недавней уязвимости в X-сервере (CVE-2020-25712), связанной с переполнением буфера в функциях XkbSetDeviceInfo() и SetDeviceIndicators(). Связанные с устранением уязвимости изменения привели к возникновению условий для краха в библиотеке libcaribou, используемой в экранной клавиатуре Caribou. При вызове функциональности экранной клавиатуры из хранителя экрана крах в libcaribou приводил к краху самого хранителя экрана и возобновлению доступа к заблокированному рабочему столу.

Release. Ссылка here.