Informații despre vulnerabilitățile din handlerii GitHub Actions, apelate automat la trimiterea cererilor de pull în repository-ul pachetelor Nixpkgs, utilizat în distribuția NixOS și în ecosistemul asociat cu managerul de pachete Nix, au fost dezvăluite. Vulnerabilitatea permitea unei terțe părți să extragă un token care oferea acces de scriere și citire la codul sursă al tuturor pachetelor găzduite în Nixpkgs. Acest token permitea modificarea directă a oricărui pachet prin repository-ul Git al proiectului, ocolind procesele de revizuire și aprobat.
Posibilitatea de a compromite Nixpkgs și de a injecta propriul cod în orice pachet a fost demonstrată de cercetătorii de securitate în octombrie anul trecut la conferința NixCon și a fost imediat remediată în infrastructura proiectului. Cu toate acestea, detaliile despre atacul efectuat au fost dezvăluite abia după un an. Problema a fost legată de utilizarea în repository-ul GitHub Nixpkgs a handlerilor GitHub Actions, legate de evenimentul „pull_request_target” și care efectuează verificări automatizate la primirea unor noi cereri de pull.
Spre deosebire de evenimentul „pull_request”, handlerii din „pull_request_target” au acces de scriere și citire la mediu de construcție, ceea ce necesită o atenție deosebită la gestionarea datelor transmise în cererea de pull. Într-unul dintre handlerii legați de „pull_request_target”, a avut loc verificarea fișierului „OWNERS” menționat în cererea de pull, pentru care a fost apelată și utilizată un utilitar 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
Problema a fost că, în cazul unei erori la formatarea fișierului OWNERS, utilitarul codeowners-validator a afișat conținutul liniei incorect formate în log-ul standard, disponibil public. Atacul a constat în plasarea într-o cerere de pull a unui link simbolic numit OWNERS, care făcea referire la fișierul „.credentials”, în care erau stocate acreditivele în mediul de construcție. Prin urmare, procesarea acestui fișier a dus la o eroare și la afișarea în log-ul public a primei linii, conținând token-ul de acces la repository.

În plus, a fost descoperită o altă vulnerabilitate în handler-ul care verifică regulile editorconfig. steps: — name: Obține lista fișierelor modificate din PR run: gh api […] | jq [ … ] > "$HOME/changed_files" — uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 with: ref: refs/pull/$/merge — name: Verificare EditorConfig run: cat "$HOME/changed_files" | xargs -r editorconfig-checker
În acest caz, problema a fost utilizarea utilitarului „xargs” pentru a rula programul editorconfig-checker cu fiecare fișier din pull-request. Deoarece numele fișierelor nu erau verificate pentru corectitudine, atacatorul putea plasa în pull-request un fișier cu caractere speciale, care ar fi fost procesate în timpul rulării utilitarului editorconfig-checker ca argumente în linia de comandă. De exemplu, la crearea unui fișier „—help”, utilitarul editorconfig-checker ar fi afisat opțiunile disponibile.
Sursa: opennet.ro
