Otkriveni su podaci o ranjivostima u GitHub Actions handlerima, koji se automatski aktiviraju prilikom slanja pull zahtjeva u repozitorij paketa Nixpkgs, korišten u distribuciji NixOS i u ekosustavu povezanu s upraviteljem paketa Nix. Ranjivost je omogućila neovlaštenom korisniku da dohvati token koji omogućuje pristup za čitanje i pisanje izvornom kodu svih paketa smještenih u Nixpkgs. Ovaj token omogućava izravne izmjene bilo kojeg paketa putem Git repozitorija projekta, zaobilazeći procese provjere i recenzije izmjena.
Mogućnost kompromitacije Nixpkgs i ubacivanja vlastitog koda u bilo koji paket demonstrirali su istraživači sigurnosti u listopadu prošle godine na konferenciji NixCon, a odmah je uklonjena u infrastrukturi projekta. Ipak, detalji o izvršenoj napadi otkriveni su tek godinu dana kasnije. Problem je bio povezan s korištenjem GitHub Actions handlera u GitHub repozitoriju Nixpkgs, vezanih uz događaj 'pull_request_target' koji izvode automatizirane provjere prilikom dolaska novih pull zahtjeva.
Za razliku od događaja 'pull_request', handleri u 'pull_request_target' imaju pristup za čitanje i pisanje u okruženju za gradnju, što zahtijeva posebnu pažnju prilikom rada s podacima koji se prenose u pull zahtjevu. U jednom od handlera povezanih s 'pull_request_target' vršena je provjera datoteke 'OWNERS' navedene u pull zahtjevu, za što je korištena alatka 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
Problem je bio u tome što je u slučaju pogreške u formatiranju datoteke OWNERS, alatka codeowners-validator ispisivala sadržaj neispravno oblikovane linije u standardni log, koji je bio javno dostupan. Napad se svodio na postavljanje simboličke veze pod nazivom OWNERS u pull zahtjevu, koja upućuje na datoteku '.credentials', u kojoj se u okruženju za gradnju nalaze vjerodajnice. Sukladno tome, obrada ove datoteke dovela je do pogreške i ispisivanja prve linije u javni log, koja sadrži token za pristup repozitoriju.

Osim toga, otkrivena je još jedna ranjivost u procesoru koji provodi provjere pravila editorconfig. koraci: — naziv: Dobivanje popisa promijenjenih datoteka iz PR-a pokreni: gh api […] | jq [ … ] > «$HOME/changed_files» — koristi: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 s: ref: refs/pull/$/merge — naziv: Provjera EditorConfig pokreni: cat «$HOME/changed_files» | xargs -r editorconfig-checker
U ovom slučaju, problem je bio u korištenju alata «xargs» za pokretanje programa editorconfig-checker s svakom datotekom iz pull-zahteva. Budući da se imena datoteka nisu provjeravala na ispravnost, napadač je mogao postaviti datoteku sa specijalnim znakovima u pull-zahtev, koja bi bila obrađena prilikom pokretanja alata editorconfig-checker kao argumenti komandne linije. Na primjer, prilikom stvaranja datoteke «—help», alat editorconfig-checker bi ispisao upute o dostupnim opcijama.
Izvor: opennet.ru
