Уязвимость во flatpak, позволяющая обойти sandbox-изоляцию

В инструментарии Flatpak, предназначенном для создания самодостаточных пакетов, не привязанных к конкретным дистрибутивам Linux и изолированных от остальной системы, выявлена уязвимость (CVE-2024-32462). Уязвимость позволяет вредоносному или скомпрометированному приложению, поставляемому в пакете flatpak, обойти установленный режим sandbox-изоляции и получить доступ к файлам в основной системе. Проблема проявляется только в пакетах, использующих порталы Freedesktop (xdg-desktop-portal), применяемые для организации доступа к ресурсам пользовательского окружения из изолированных приложений. Уязвимость устранена в корректирующих обновлениях flatpak 1.15.8, 1.14.6, 1.12.9 и 1.10.9. Обходной путь для защиты также предложен в выпусках xdg-desktop-portal 1.16.1 и 1.18.4.

Благодаря уязвимости, находящееся в изолированном окружении приложение может использовать интерфейс xdg-desktop-portal для создания файла “.desktop” с командой запуска приложения из flatpak, позволяющей получить доступ к файлам основной системы. Для выхода из изолированного окружения используются манипуляции с параметром “–command”, применяемым для передачи имени программы, нахоядщейся внутри flatpak-пакета, которую нужно запустить в изолированном окружении. Для настройки изолированного окружения flatpak вызывает утилиту bwrap, передавая ей указанное имя программы. Например, для запуска утилиты ls в изолированном окружении пакета можно использовать конструкцию “flatpak run –command=ls org.gnome.gedit” которая приведёт к запуску “bwrap ls”.

Суть уязвимости в том, что если имя программы начинается на символы “–“, то оно будет воспринято утилитой bwrap как собственная опция. Например, запуск “flatpak run –command=–bind org.gnome.gedit / /host ls -l /host” приведёт к выполнению “bwrap –bind / /host ls -l /host”, т.е. имя “–bind” будет обработано не как имя запускаемого приложения, а как опция bwrap.

Уязвимость усугубляется тем, что D-Bus интерфейс “org.freedesktop.portal.Background.RequestBackground” позволяет приложению из пакета Flatpak указать любую команду для выполнения при помощи “flatpak run –command”, в том числе начинающуюся с символа “–“. Подразумевалось, что передача любых команд не опасна, так как они будут выполнены в изолированном окружении пакета. Но не было учтено, что команды, начинающиеся на “–” будут обработаны как опции утилиты bwrap. В итоге, интерфейс xdg-desktop-portal может использоваться для создания файла “.desktop” с командой, эксплуатирующей уязвимость.

Release. Ссылка here.