Byly zveřejněny informace o zranitelnostech v GitHub Actions, které jsou automaticky vyvolávány při odeslání pull requestů do repozitáře balíčků Nixpkgs, používaného v distribuci NixOS a v ekosystému souvisejícím s balíčkovým manažerem Nix. Zranitelnost umožnila útočníkovi získat token, který poskytoval přístup pro čtení a zápis k zdrojovému kódu všech balíčků umístěných v Nixpkgs. Tento token umožňoval provádět změny přímo v jakémkoliv balíčku prostřednictvím Git repozitáře projektu, obcházející procesy kontroly a revize změn.
Možnost kompromitování Nixpkgs a vkládání vlastního kódu do jakéhokoliv balíčku byla demonstrována bezpečnostními výzkumníky v říjnu minulého roku na konferenci NixCon a byla okamžitě odstraněna v infrastruktuře projektu. Přesto byly podrobnosti o provedeném útoku odhaleny až po roce. Problém souvisel s používáním GitHub Actions v repozitáři Nixpkgs, které byly připojeny k události „pull_request_target“ a vykonávaly automatizované kontroly při přijetí nových pull requestů.
Na rozdíl od události „pull_request“ mají zpracovatelé v „pull_request_target“ přístup k prostředí sestavení pro čtení a zápis, což vyžaduje zvláštní pozornost při práci s daty předávanými v pull requestu. V jednom z připojených zpracovatelů „pull_request_target“ se prováděla kontrola souboru „OWNERS“ uvedeného v pull requestu, přičemž byla shromážděna a volána utilita 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
Problém byl v tom, že v případě chyby ve formátování souboru OWNERS utilita codeowners-validator zobrazila obsah nesprávně formátovaného řetězce v běžném logu, který je veřejně dostupný. Útok spočíval v umístění symbolického odkazu s názvem OWNERS do pull requestu, který odkazoval na soubor „.credentials“, kde jsou ve stavebním prostředí umístěny přihlašovací údaje. V důsledku toho zpracování tohoto souboru vedlo k chybě a výstupu do veřejného logu první řádky obsahující token přístupu k repozitáři.

Kromě toho byla nalezena další zranitelnost ve zpracovateli, který provádí kontrolu pravidel editorconfig. kroky: — název: Získat seznam změněných souborů z PR spustit: gh api […] | jq [ … ] > „$HOME/changed_files“ — používá: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 s: ref: refs/pull/$/merge — název: Kontrola EditorConfig spustit: cat „$HOME/changed_files“ | xargs -r editorconfig-checker
V tomto případě byla problémem použití nástroje „xargs“ pro spuštění programu editorconfig-checker s každým souborem z pull-requestu. Jelikož jména souborů nebyla kontrolována na správnost, útočník mohl vložit do pull-requestu soubor se speciálními znaky, které by byly zpracovány při spuštění nástroje editorconfig-checker jako argumenty příkazového řádku. Například při vytvoření souboru „—help“ by nástroj editorconfig-checker zobrazil nápovědu ohledně dostupných možností.
Zdroj: opennet.ru
