Otkrivene su ranjivosti u rukovateljima akcijama GitHub-a, koji se automatski pozivaju prilikom slanja zahtjeva za povlačenjem (pull requests) u repozitorij paketa Nixpkgs, koji se koristi u NixOS distribuciji i ekosistemu upravitelja paketa Nix. Ranjivost je omogućila neovlaštenom korisniku da izdvoji token koji mu dozvoljava pristup čitanju i pisanju izvornog koda svih paketa hostovanih u Nixpkgs-u. Ovaj token je omogućio direktnu modifikaciju bilo kojeg paketa putem Git repozitorija projekta, zaobilazeći procese pregleda i odobravanja.
Mogućnost kompromitovanja Nixpkgs-a i ubacivanja prilagođenog koda u bilo koji paket demonstrirali su sigurnosni istraživači prošlog oktobra na konferenciji NixCon i odmah je ugrađena u infrastrukturu projekta. Međutim, detalji napada otkriveni su tek godinu dana kasnije. Problem se odnosio na korištenje GitHub Actions handler-a u Nixpkgs GitHub repozitoriju, koji su vezani za događaj "pull_request_target" i vrše automatske provjere novih pull request-ova.
Za razliku od događaja "pull_request", obrađivačima u "pull_request_target" je odobren pristup za čitanje/pisanje u okruženju za izgradnju, što zahtijeva posebnu pažnju pri radu s podacima proslijeđenim u zahtjevu za povlačenje. Jedan od obrađivača vezanih za "pull_request_target" je validirao datoteku "OWNERS" navedenu u zahtjevu za povlačenje izgradnjom i pozivanjem uslužnog programa codeowners-validator: koraci: — koristi: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf sa: ref: refs/pull/$/merge path: pr — run: nix-build base/ci -A codeownersValidator — run: result/bin/codeowners-validator env: OWNERS_FILE: pr/ci/OWNERS
Problem je bio u tome što bi, ako bi datoteka OWNERS bila nepravilno formatirana, uslužni program codeowners-validator ispisao sadržaj neispravno formiranog niza u standardni, javno dostupan log. Napad se sastojao od postavljanja simboličkog linka pod nazivom OWNERS u zahtjev za povlačenjem, koji bi pokazivao na datoteku ".credentials", koja pohranjuje vjerodajnice u okruženju za izgradnju. Posljedično, obrada ove datoteke rezultirala je greškom i prvi red, koji sadrži token za pristup repozitoriju, ispisan je u javni log.

Pored toga, pronađena je još jedna ranjivost u obrađivaču koji provjerava pravila editorconfig. koraci: — naziv: Dohvati listu promijenjenih datoteka iz PR-a pokrenuti: gh api […] | jq [ … ] > «$HOME/changed_files» — koristi: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 sa: ref: refs/pull/$/merge — naziv: Provjera EditorConfig-a pokrenuti: cat «$HOME/changed_files» | xargs -r editorconfig-checker
U ovom slučaju, problem je bio korištenje uslužnog programa "xargs" za pokretanje editorconfig-checker-a sa svakom datotekom u zahtjevu za povlačenjem. Budući da nazivi datoteka nisu bili validirani, napadač je mogao u zahtjev za povlačenjem uključiti datoteku koja sadrži posebne znakove, koji bi bili obrađeni kao argumenti komandne linije prilikom pokretanja editorconfig-checker-a. Na primjer, prilikom kreiranja datoteke "--help", editorconfig-checker bi prikazao savjet o dostupnim opcijama.
izvor: opennet.ru
