Sono emersi dettagli sull'attacco all'infrastruttura utilizzata per lo sviluppo del framework di machine learning PyTorch, che ha permesso di estrarre chiavi di accesso sufficienti per caricare dati arbitrari nel repository delle release del progetto su GitHub e AWS, oltre a iniettare codice nel ramo principale del repository e aggiungere un backdoor tramite dipendenze. La sostituzione delle release di PyTorch potrebbe essere stata utilizzata per attaccare grandi aziende come Google, Meta, Boeing e Lockheed Martin, che utilizzano PyTorch nei loro progetti. Nell'ambito del programma Bug Bounty, la società Meta ha pagato 16.250 dollari ai ricercatori per informazioni sulla vulnerabilità.
Il punto centrale dell'attacco è la possibilità di eseguire il proprio codice su server un sistema di integrazione continua, che effettua il rebuild e l'esecuzione di compiti per testare le nuove modifiche inviate al repository. Il problema riguarda i progetti che utilizzano i propri gestori esterni «Self-Hosted Runner» con GitHub Actions. A differenza dei tradizionali GitHub Actions, i gestori Self-Hosted non vengono eseguiti nell'infrastruttura di GitHub, ma sui propri server o in macchine virtuali supportate dagli sviluppatori.
L'esecuzione di compiti di build sui propri server consente di avviare codice che può effettuare la scansione della rete interna dell'azienda, cercare nella FS locale chiavi di crittografia e token di accesso, analizzare le variabili ambientali con parametri di accesso a storage esterni o servizi cloud. In assenza di adeguata isolamento dell'ambiente di build, i dati riservati trovati possono essere inviati all'attaccante all'esterno, ad esempio tramite chiamate a API esterne. Per determinare l'uso da parte dei progetti dei «Self-Hosted Runner» può essere utilizzato lo strumento Gato, che analizza file di workflow pubblicamente accessibili e log di esecuzione dei compiti CI.
In PyTorch e in molti altri progetti che usano i «Self-Hosted Runner», l'esecuzione dei compiti di build è consentita solo agli sviluppatori le cui modifiche sono state precedentemente revisionate e incluse nella base di codice del progetto. Avere lo status di «contributor» quando si utilizzano le impostazioni predefinite nel repository consente di avviare gestori GitHub Actions durante l'invio di pull request e, di conseguenza, eseguire il proprio codice in qualsiasi ambiente GitHub Actions Runner collegato al repository o all'organizzazione destinataria del progetto.
L'associazione con lo stato di «contributor» è stata facilmente elusa: è stato sufficiente inviare una modifica insignificante e attendere che fosse accettata nel codice sorgente, dopo di che il sviluppatore otteneva automaticamente lo stato di partecipante attivo, i cui pull request erano autorizzati a essere testati nell'infrastruttura CI senza ulteriore verifica. Per ottenere lo status di sviluppatore attivo durante l'esperimento sono state utilizzate modifiche cosmetiche insignificanti, relative alla correzione di refusi nella documentazione. Per accedere al repository e al deposito delle versioni di PyTorch durante l'attacco, è stata effettuata l'acquisizione del token GitHub, utilizzato per accedere al repository durante i processi di build, così come delle chiavi AWS, coinvolte per salvare i risultati della build.
Il problema non è specifico di PyTorch e riguarda molti altri grandi progetti che utilizzano le impostazioni predefinite per i «Self-Hosted Runner» in GitHub Actions. Ad esempio, sono stati segnalati attacchi simili per inserire backdoor in alcuni grandi portafogli di criptovalute e progetti blockchain con capitalizzazioni miliardarie, effettuare modifiche nelle versioni Microsoft Deepspeed e TensorFlow, compromettere una delle applicazioni di CloudFlare, oltre a eseguire codice sui computer nella rete Microsoft. I dettagli di tali incidenti non sono ancora stati rivelati. Nell'ambito dei programmi Bug Bounty attivi, i ricercatori hanno inviato più di 20 richieste per ricevere ricompense per un totale di diverse centinaia di migliaia di dollari.
Fonte: opennet.ru
