Розкрито відомості про вразливості в обробниках 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@eef61447b9ff4aafebbd refs/pull/$/merge path: pr — run: nix-build base/ci -A codeownersValidator — run: result/bin/codeowners-validator env:
Проблема в тому, що у разі помилки оформлення файлу 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: | xargs -r editorconfig-checker
В даному випадку проблема була у використанні утиліти xargs для запуску програми editorconfig-checker з кожним файлом з pull-запиту. Так як імена файлів не перевірялися на коректність, атакуючий міг розмістити в pull-запиті файл зі спецсимволами, які були б оброблені під час запуску утиліти editorconfig-checker як аргументи командного рядка. Наприклад, при створенні файлу «help» утиліта editorconfig-checker вивела б підказку про наявні опції.
Джерело: opennet.ru
