В пакетных менеджерах Nix и Lix выявлена уязвимость, позволяющая выполнить код с правами фонового процесса, который в NixOS и многопользовательских установках выполняется под пользователем root. Проблема (CVE не присвоен) проявляется в фоновом процессе nix-daemon, применяемом для организации доступа непривилегированных пользователей к сборочным операциям и хранилищу пакетов.
Уязвимость возникает из-за отсутствия ограничения рекурсивной обработки директорий в коде для разбора архивов NAR (Nix Archive), что можно использовать для инициирования исчерпания стека сопрограмм и перезаписи содержимого кучи (heap), размещённой после стека без сторожевых страниц памяти. Проблема может быть эксплуатирована любым пользователем, способным устанавливать соединения к nix-daemon. По умолчанию все пользователи имеют такую возможность, что позволяет поднять свои привилегии до пользователя root в многопользовательских установках Nix.
Проблема решена ограничением уровня рекурсии в 64 вложенных директории, добавлением сторожевых страниц памяти между стеком и кучей и реализацией дополнительных проверок символических ссылок в NAR. В Nix уязвимость проявляется начиная с версии 2.24.4 и устранена в выпусках 2.34.7, 2.33.6, 2.32.8, 2.31.5, 2.30.5, 2.29.4, 2.28.7. В Lix уязвимость появилась в выпуске 2.93.0 и устранена в обновлениях 2.93.4, 2.94.2 и 2.95.2. Пакетный менеджер Guix уязвимость не затрагивает.
Помимо этого в опубликованных обновлениях Nix устранена ещё одна уязвимость (CVE отсутствует), которой присвоен средний уровень опасности (4.3 из 10). Проблема проявляется начиная с выпуска Nix 2.24.7 и позволяет организовать запись файлов в область за пределами корневого каталога, в который осуществляется распаковка архива. Уязвимость эксплуатируется через создание в tar-файлах элементов с абсолютными файловыми путями. При распаковке подобных архивов командой «nix-prefetch-url —unpack» или «nix store prefetch-file —unpack» файлы с абсолютными путями извлекаются как есть, без преобразования в относительный путь.
Sous: opennet.ru
