Уязвимость в обработчике GitHub Actions, позволявшая скомпрометировать пакеты в Nixpkgs
Дата публикации:Thu, 16 Oct 2025 08:04:37 +0300
Раскрыты сведения об уязвимостях в обработчиках GitHub Actions, автоматически вызываемых при отправке pull-запросов в репозиторий пакетов Nixpkgs, применяемый в дистрибутиве NixOS и в экосистеме, связанной с пакетным менеджером Nix. Уязвимость позволяла постороннему извлечь токен, предоставляющий доступ на запись и чтение к исходному коду всех пакетов, размещённых в Nixpkgs. Данный токен позволял напрямую вносить изменения в любой пакет через Git-репозиторий проекта, в обход процессов проверки и рецензирования изменений.
Возможность компрометации Nixpkgs и подстановки своего кода в любой пакет была продемонстрирована исследователями безопасности в октябре прошлого года на конференции NixCon и сразу была устранена в инфраструктуре проекта. Тем не менее, подробности о проведённой атаке раскрыты только спустя год. Проблема была связана с использованием в GitHub-репозитории Nixpkgs обработчиков GitHub Actions, привязанных к событию "pull_request_target" и выполняющих автоматизированные проверки при поступлении новых pull-запросов.
В отличие от события "pull_request" в "pull_request_target" обработчикам предоставялется доступ на запись и чтение к сборочному окружению, что требует особого внимания при работе с данными, передаваемыми в pull-запросе. В одном из привязанных к "pull_request_target" обработчиков производилась проверка приведённого в pull-запросе файла "OWNERS", для чего собиралась и вызывалась утитита codeowners-validator:
steps: - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf with: ref: refs/pull/$/merge path: pr - run: nix-build base/ci -A codeownersValidator - run: result/bin/codeowners-validator env: OWNERS_FILE: pr/ci/OWNERS Проблема была в том, что в случае ошибки оформления файла OWNERS утилита codeowners-validator выводила содержимое некорректно оформленной строки в стандартный лог, доступный публично. Атака свелась к размещению в pull-запросе символической ссылки с именем OWNERS, ссылающейся на файл ".credentials", в котором в сборочном окружении размещаются учётные данные. Соответственно, обработка данного файла привела к ошибке и выводу в публичный лог первой строки, содержащей токен доступа к репозиторию.
Кроме того, была найдена ещё одна уязвимость в обработчике, выполняющем проверку правил editorconfig.
steps: - name: Get list of changed files from PR run: gh api [...] | jq [ ... ] > "$HOME/changed_files" - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 with: ref: refs/pull/$/merge - name: Checking EditorConfig run: cat "$HOME/changed_files" | xargs -r editorconfig-checker В данном случае проблема была в использовании утилиты "xargs" для запуска программы editorconfig-checker с каждым файлом из pull-запроса. Так как имена файлов не проверялись на корректность, атакующий мог разместить в pull-запросе файл со спецсимволами, которые были бы обработаны при запуске утилиты editorconfig-checker как аргументы командной строки. Например, при создании файла "--help" утилита editorconfig-checker вывела бы подсказку об имеющихся опциях.
Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=64059