Au fost dezvăluite vulnerabilități în gestionarea acțiunilor GitHub, care sunt invocate automat la trimiterea de solicitări de extragere către depozitul de pachete Nixpkgs, utilizat în distribuția NixOS și în ecosistemul managerului de pachete Nix. Vulnerabilitatea a permis unui utilizator neautorizat să extragă un token care acorda acces de citire și scriere la codul sursă al tuturor pachetelor găzduite în Nixpkgs. Acest token a permis modificarea directă a oricărui pachet prin depozitul Git al proiectului, ocolind procesele de revizuire și aprobare.
Capacitatea de a compromite Nixpkgs și de a injecta cod personalizat în orice pachet a fost demonstrată de cercetătorii în domeniul securității în octombrie anul trecut la conferința NixCon și a fost imediat aplicată o corecție în infrastructura proiectului. Cu toate acestea, detaliile atacului au fost dezvăluite abia un an mai târziu. Problema era legată de utilizarea handlerelor GitHub Actions din depozitul Nixpkgs GitHub, care sunt legate de evenimentul „pull_request_target” și efectuează verificări automate la noile solicitări de extragere.
Spre deosebire de evenimentul „pull_request”, handler-elor din „pull_request_target” li se acordă acces de citire/scriere la mediul de compilare, ceea ce necesită o atenție specială atunci când se lucrează cu date transmise într-o cerere de extragere. Unul dintre handler-ele legate la „pull_request_target” a validat fișierul „OWNERS” furnizat în cererea de extragere prin compilarea și apelarea utilitarului codeowners-validator: pași: — 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
Problema era că, dacă fișierul OWNERS era formatat incorect, utilitarul codeowners-validator afișa conținutul șirului incorect în jurnalul standard, accesibil publicului. Atacul a constat în plasarea unui link simbolic numit OWNERS în cererea de extragere, care indica fișierul „.credentials”, care stochează acreditările în mediul de compilare. În consecință, procesarea acestui fișier a dus la o eroare, iar prima linie, care conținea token-ul de acces la depozit, a fost afișată în jurnalul public.

În plus, o altă vulnerabilitate a fost descoperită în handler-ul care verifică regulile editorconfig. pași: — nume: Obține lista fișierelor modificate din PR run: gh api […] | jq [ … ] > «$HOME/changed_files» — utilizează: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 cu: ref: refs/pull/$/merge — nume: Verifică EditorConfig run: cat «$HOME/changed_files» | xargs -r editorconfig-checker
În acest caz, problema a fost utilizarea utilitarului „xargs” pentru a rula editorconfig-checker cu fiecare fișier din cererea de extragere. Deoarece numele fișierelor nu au fost validate, un atacator ar putea include un fișier care conține caractere speciale în cererea de extragere, care ar fi procesate ca argumente în linia de comandă la rularea editorconfig-checker. De exemplu, la crearea unui fișier „--help”, editorconfig-checker ar afișa un indiciu despre opțiunile disponibile.
Sursa: opennet.ru
