Проблема затрагивает все конфигурации с процессом guix-daemon, независимо от того, запускается он с правами root или под непривилегированным пользователем. Для эксплуатации уязвимости достаточно любой попытки загрузки готовых бинарных пакетов с сервера, подконтрольного атакующему. При этом вредоносный сервер не обязательно должен быть явно выбран или указан в настройках пользователя — он может быть определён при помощи опции «—discover», что позволяет осуществить подстановку сервера в ходе MITM-атаки. В конфигурациях, в которых guix-daemon запущен с повышенными привилегиями, локальный пользователь может совершить атаку при возможности подключения к фоновому процессу по Unix-сокету (по умолчанию доступен всем пользователям).
Уязвимость присутствует в обработчике «restore-file», применяемом для распаковки по мере загрузки пакета, не дожидаясь его полной загрузки и верификации загруженного архива по цифровой подписи. Проблема вызвана отсутствием проверки наличия символов «.», «/» и «..» в размещённых в архиве файловых путях. Через подстановку в архив некорректных имён файлов атакующий может добиться записи произвольного файла в любую область файловой системы, насколько позволяют права под которыми выполняется фоновый процесс guix-daemon.
Для организации выполнения своего кода в системе, например, можно добавить автозапускаемый сценарий, такой как «~/.bashrc» или ~/.profile, или изменить файл ~/.ssh/authorized_keys с ключами SSH. Если в многопользовательской системе guix-daemon выполняется под пользователем root, атакующим может перезаписать файл с паролями или системные скрипты.
Возможность создания подставных серверов для распространения вредоносных пакетов вызвана тем, что процедура загрузки метаданных (narinfo) о доступных бинарных пакетах (fetch-narinfos) не осуществляла проверку сертификата сервера, полагаясь на то, что основная часть метаданных заверяется цифровой подписью. Как оказалось, подпись не охватывала URL для загрузки пакета, что позволяло подменить его не нарушая целостности метаданных. В конечном счёте подставной пакет был бы отброшен из-за непрохождения проверки его содержимого по хэшу, заверенному цифровой подписью, но данная проверка производилась после этапа распаковки, на котором проявлялась проблема со спецсимволами в именах файлов.
Помимо команды «guix substitute», уязвимый обработчик «restore-file» задействован в работе команд «guix offload», «guix archive —extract» и «guix challenge», через которые также можно эксплуатировать уязвимость. В качестве обходного пути для блокирования уязвимости предлагается явно указывать опцию «—no-substitutes» во всех командах guix. Исправление уязвимости принято в состав кодовой базы Guix. Пользователям рекомендуется незамедлительно установить сформированные разработчиками обновления guix и guix-daemon.
Помимо отмеченной проблемы в Guix устранено ещё три уязвимости:
- Возможность подмены бинарных пакетов из-за отсутствия проверки соответствия запрошенного пакета с возвращёнными метаданными в обработчике fetch-narinfos. Уязвимость может использоваться для отдачи устаревшей версии запрошенного пакета, содержащей уязвимости.
- Определение содержимого первой строки произвольных файлов в системе через передачу локальным пользователем запроса с URI «file://» («—substitute-urls file:///etc/shadow»). Если guix-daemon выполняется с правами root, то он прочитает запрошенный файл, определит, что он не является метаданными и выведет ошибку, в тексте которой будет упомянута строка, которую не удалось разобрать.
- Указание специально оформленного имени внешнего репозитория («../../../../newfile») при выполнении команд
«guix pull» и «guix time-machine» позволяет записать данные с информацией о коммите в произвольный существующий файл в файловой системе, если его содержимое напоминает список строк на языке Scheme. Уязвимость может применяться для DoS-атак, но не исключено, что через хитрые манипуляции с псевдо-ФС /proc можно добиться более опасных манипуляций с системой.
Источник: http://www.opennet.ru/opennews/art.shtml?num=65837
