Sono state rivelate informazioni sulle vulnerabilità nei gestori di GitHub Actions, attivati automaticamente al momento dell'invio di pull request nel repository dei pacchetti Nixpkgs, utilizzato nella distribuzione NixOS e nell'ecosistema associato al gestore di pacchetti Nix. La vulnerabilità permetteva a un attaccante esterno di estrarre un token che consentiva accesso in scrittura e lettura al codice sorgente di tutti i pacchetti presenti in Nixpkgs. Questo token permetteva di apportare modifiche direttamente a qualsiasi pacchetto tramite il repository Git del progetto, eludendo i processi di revisione e verifica delle modifiche.
La possibilità di compromettere Nixpkgs e di sostituire il proprio codice in qualsiasi pacchetto è stata dimostrata dai ricercatori di sicurezza nell'ottobre dello scorso anno durante la conferenza NixCon e è stata immediatamente corretta nell'infrastruttura del progetto. Tuttavia, i dettagli dell'attacco sono stati rivelati solo un anno dopo. Il problema era legato all'uso nel repository Git di Nixpkgs di gestori di GitHub Actions associati all'evento "pull_request_target" che eseguivano controlli automatizzati all'arrivo di nuove pull request.
A differenza dell'evento "pull_request", nei gestori associati a "pull_request_target" viene fornito accesso in scrittura e lettura all'ambiente di build, il che richiede particolare attenzione nel lavorare con i dati trasmessi nella pull request. In uno dei gestori legati a "pull_request_target", veniva effettuato un controllo sul file "OWNERS" incluso nella pull request, per il quale veniva raccolto e richiamato lo strumento 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
Il problema era che, in caso di errore nella formattazione del file OWNERS, lo strumento codeowners-validator stampava il contenuto della riga malformata nel log standard, accessibile pubblicamente. L'attacco consisteva nell'inserire nella pull request un collegamento simbolico chiamato OWNERS, che puntava a un file ".credentials", dove nell'ambiente di build sono archiviati i dati di accesso. Di conseguenza, l'elaborazione di questo file portava a un errore e all'uscita nel log pubblico della prima riga contenente il token di accesso al repository.

Inoltre, è stata trovata un'altra vulnerabilità nell'elaboratore che esegue il controllo delle regole editorconfig. steps: — name: Ottieni l'elenco dei file modificati dal PR run: gh api […] | jq [ … ] > «$HOME/changed_files» — uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 with: ref: refs/pull/$/merge — name: Controllo EditorConfig run: cat «$HOME/changed_files» | xargs -r editorconfig-checker
In questo caso, il problema era l'uso dello strumento «xargs» per avviare il programma editorconfig-checker su ciascun file della pull request. Poiché i nomi dei file non venivano verificati per correttezza, un attaccante poteva includere nella pull request un file con caratteri speciali, che sarebbero stati elaborati durante l'esecuzione dello strumento editorconfig-checker come argomenti della riga di comando. Ad esempio, creando un file «—help», lo strumento editorconfig-checker avrebbe visualizzato un messaggio di aiuto con le opzioni disponibili.
Fonte: opennet.ru
