The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Уязвимость в обработчике GitHub Actions, позволявшая скомпрометировать пакеты в Nixpkgs

16.10.2025 08:04

Раскрыты сведения об уязвимостях в обработчиках 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 вывела бы подсказку об имеющихся опциях.

  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Отставка команды модераторов NixOS из-за разногласий с управляющим комитетом
  3. OpenNews: Уязвимости в пакетных менеджерах Nix, Lix и Guix
  4. OpenNews: Ошибка в обработчике GitHub Actions привела к публикации вредоносных релизов Ultralytics
  5. OpenNews: Выпуск дистрибутива NixOS 24.11, использующего пакетный менеджер Nix
  6. OpenNews: Уязвимости в PCP и Nix, позволяющие поднять привилегии в системе
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64059-nix
Ключевые слова: nix, nixos
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (10) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, наблюдатель (?), 08:51, 16/10/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –5 +/
     
  • 1.2, Жироватт (ok), 09:16, 16/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Надо было запилить свой гитхаб, но только очень функциональный (без всякой вебни и императивщины), с монадами и без постэффектов, а так же декларативный.
     
     
  • 2.3, анон (?), 09:18, 16/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а вообще хотелось бы такого
     
  • 2.4, Грустный (?), 09:24, 16/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > свой гитхаб
    > но только очень функциональный

    И пусть каждый pull request требует доказательство от противного. (ФωФ)

     
     
  • 3.5, Жироватт (ok), 09:39, 16/10/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Но сначала нужно доказать, что тот, кто будет доказывать пулл реквест - является противным.
     
     
  • 4.6, Аноним (6), 10:10, 16/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Все пулл-реквесты по умолчанию реджектятся, а дальше вступает в дело функция, которая выведет доказательство.
     
  • 2.7, Аноним (-), 10:18, 16/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Darcs.

    Ну или написанный на Rust Pijul.

    Осталось написать сопоставимый с GitHub сайт на Haskell (бэк и, возможно, фронт), PureScript (фронт), Elm (фронт).

     
  • 2.8, User (??), 10:25, 16/10/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.10, Аноним (10), 11:44, 16/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Самая надежная NixOS.

    Именно так. В других дистрибутивах были уязвимости как в самой инфраструктуре, так и в пакетных менеджерах. Но, в отличие от nixos, в других дистрибутивах ты можешь лишь гадать что у тебя там зловред в системе изгадил. В nixos пересобрать систему ты можешь в любой момент, сделать её чистой установкой одной командой.

     
     
  • 2.11, Аноним (10), 11:45, 16/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Комментарий для ответа пропал, что же...
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру