Sårbarheter i GitHub Actions-hanterare, vilka automatiskt anropas när pull requests skickas till Nixpkgs-paketförrådet, som används i NixOS-distributionen och Nix-pakethanterarens ekosystem, har avslöjats. Sårbarheten gjorde det möjligt för en obehörig användare att extrahera en token som ger läs- och skrivåtkomst till källkoden för alla paket som finns i Nixpkgs. Denna token möjliggjorde direkt modifiering av vilket paket som helst via projektets Git-förråd, vilket kringgick gransknings- och godkännandeprocesserna.
Möjligheten att kompromettera Nixpkgs och injicera anpassad kod i vilket paket som helst demonstrerades av säkerhetsforskare i oktober förra året på NixCon-konferensen och uppdaterades omedelbart i projektets infrastruktur. Detaljer om attacken avslöjades dock först ett år senare. Problemet var relaterat till användningen av GitHub Actions-hanterare i Nixpkgs GitHub-repository, vilka är bundna till händelsen "pull_request_target" och utför automatiserade kontroller vid nya pull-förfrågningar.
Till skillnad från händelsen "pull_request" beviljas hanterare i "pull_request_target" läs-/skrivåtkomst till byggmiljön, vilket kräver särskild försiktighet när man arbetar med data som skickas i en pull-förfrågan. En av hanterarna som är bunden till "pull_request_target" validerade "OWNERS"-filen som tillhandahölls i pull-förfrågan genom att bygga och anropa verktyget codeowners-validator: steg: — använder: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf med: ref: refs/pull/$/merge sökväg: pr — kör: nix-build base/ci -A codeownersValidator — kör: result/bin/codeowners-validator env: OWNERS_FILE: pr/ci/OWNERS
Problemet var att om OWNERS-filen var felaktigt formaterad, skickade verktyget codeowners-validator innehållet i den felaktigt formaterade strängen till den offentligt tillgängliga standardloggen. Attacken bestod av att placera en symbolisk länk med namnet OWNERS i pull-förfrågan, som pekade på filen ".credentials", som lagrar autentiseringsuppgifter i byggmiljön. Följaktligen resulterade bearbetningen av denna fil i ett fel och den första raden, som innehöll åtkomsttoken för arkivet, skickades till den offentliga loggen.

Dessutom hittades ytterligare en sårbarhet i hanteraren som kontrollerar editorconfig-regler. steg: — namn: Hämta lista över ändrade filer från PR kör: gh api […] | jq [ … ] > «$HOME/changed_files» — använder: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 med: ref: refs/pull/$/merge — namn: Kontrollerar EditorConfig kör: cat «$HOME/changed_files» | xargs -r editorconfig-checker
I det här fallet var problemet användningen av verktyget "xargs" för att köra editorconfig-checker med varje fil i pull-förfrågan. Eftersom filnamnen inte validerades kunde en angripare inkludera en fil som innehåller specialtecken i pull-förfrågan, vilka skulle bearbetas som kommandoradsargument när editorconfig-checker kördes. Till exempel, när man skapade en "--help"-fil skulle editorconfig-checker visa en ledtråd om de tillgängliga alternativen.
Källa: opennet.ru
