В популярной утилите qSnapper, предоставляющей графический интерфейс для управления снапшотами файловой системы Btrfs (файловая система с поддержкой копирования при записи), обнаружена серия опасных уязвимостей. Они затрагивают привилегированный сервис D-Bus (системная шина межпроцессного взаимодействия в Linux), через который программа взаимодействует с другими компонентами. Проблемы получили идентификаторы CVE-2026-41045, CVE-2026-41046 и CVE-2026-41047. Наиболее серьёзная из них позволяет локальному злоумышленнику повысить свои привилегии до суперпользователя и полностью скомпрометировать систему.
Детали уязвимостей
Анализом уязвимостей занимались исследователи, которые выявили их в ходе аудита безопасности qSnapper. Этот инструмент используется в дистрибутивах Linux, особенно в openSUSE, для создания и управления снапшотами - точечными копиями состояния файловой системы, которые позволяют откатить изменения после обновления или сбоя. Обычно для работы со снапшотами требуются права root, и qSnapper решает эту задачу с помощью фонового процесса-демона, работающего с полными привилегиями. Именно в этом демоне и нашли уязвимости.
Первая уязвимость, CVE-2026-41045, связана с механизмом аутентификации через Polkit - фреймворк для управления правами в Linux. Разработчики использовали Polkit для контроля доступа к командам, но реализация оказалась подвержена состоянию гонки. При проверке прав клиента демон сообщал Polkit идентификатор процесса (PID), а не имя пользователя на шине D-Bus. Злоумышленник мог подменить свой процесс на привилегированный до того, как поликлинг завершит проверку. Таким образом, любой локальный пользователь мог обойти все проверки аутентификации и получить доступ к административным функциям. Исправление заключается в переходе на более надёжный метод - передачу субъекта через имя системной шины, при котором процесс-клиент идентифицируется однозначно.
Вторая и наиболее опасная уязвимость, CVE-2026-41046, обнаружена в методах, принимающих строковый параметр configName. Этот параметр передаётся напрямую в функцию snapper::Snapper() из библиотеки libsnapper без какой-либо проверки. Злоумышленник может указать в нём путь с элементами ../, что приводит к подмене файла конфигурации. Например, можно заставить libsnapper обработать файл из произвольной директории, в том числе записать в него свои данные. В сочетании с обходом аутентификации по предыдущей уязвимости это даёт возможность выполнить произвольный код с правами root. Даже без обхода аутентификации атака через этот вектор позволяет вызвать отказ в обслуживании, указав в качестве конфигурации специальные файлы вроде /dev/zero, что приводит к исчерпанию памяти и аварийной остановке демона. Кроме того, атакующий может заставить libsnapper распарсить конфиденциальные файлы, например /etc/shadow, и, если включено логирование, данные могут утечь в журналы, доступные непривилегированным пользователям. Уязвимость затрагивает практически все методы сервиса D-Bus, включая те, что не требуют аутентификации.
Третья уязвимость, CVE-2026-41047, представляет собой утечку информации через методы получения различий между снапшотами (diff). Некоторые операции, считавшиеся безопасными, позволяют локальному пользователю без аутентификации получать полные дампы изменений файлов. Например, можно узнать, как менялся конфиденциальный файл /etc/shadow между двумя снапшотами, или получить содержимое изменённых файлов из домашней директории root. Это серьёзно нарушает конфиденциальность данных.
Кроме этих трёх основных проблем, исследователи выявили недостатки в механизме кэширования аутентификации. В версии 1.2.1 разработчики ввели флаг m_authenticated, который запоминает, что пользователь однажды прошёл проверку. Это позволяло другому злоумышленнику, даже без права доступа, воспользоваться уже установленной сессией и выполнить опасные действия вроде удаления снапшотов или восстановления файлов. Также обнаружена проблема с методом Quit() - любой мог завершить работу демона, что служит локальной атакой типа "отказ в обслуживании". Наконец, файлы журналов создавались с правами на чтение для всех, что потенциально раскрывало чувствительную информацию.
Разработчики qSnapper оперативно отреагировали на отчёт и выпустили версию 1.3.3, в которой исправлены основные уязвимости. Были заменены методы аутентификации, добавлена проверка параметра configName на наличие ../, удалено опасное кэширование, введена новая политика Polkit для просмотра различий (auth_admin), а также устранён неаутентифицированный метод выхода. Защита более глубокого уровня, касающаяся восстановления произвольных файлов, будет дорабатываться позднее.
Для администраторов систем с qSnapper настоятельно рекомендуется обновить программу до версии 1.3.3 как можно скорее. Учитывая, что атаки могут проводиться локальным злоумышленником даже без привилегий, компаниям и пользователям, использующим этот инструмент, необходимо принять меры. После установки обновления риски снижаются до минимума, хотя полная безопасность потребует также следования рекомендациям по минимизации привилегий и настройке прав доступа к файлам конфигурации.
Этот инцидент в очередной раз показывает, насколько критично учитывать безопасность при проектировании привилегированных сервисов. Даже в программах с открытым исходным кодом, считающихся надёжными, могут скрываться серьёзные уязвимости, позволяющие злоумышленнику повысить привилегии и получить полный контроль над системой.
Ссылки