Detaliile atacului asupra infrastructurii utilizate pentru dezvoltarea cadrelor de învățare automată PyTorch au fost dezvăluite, permițând extragerea cheilor de acces suficiente pentru a plasa date arbitrare în depozitul cu versiunile proiectului pe GitHub și AWS, precum și pentru a insera cod în ramura principală a depozitului și a adăuga un backdoor prin dependențe. Înlocuirea versiunilor PyTorch ar fi putut fi folosită pentru a efectua atacuri asupra unor mari companii, precum Google, Meta, Boeing și Lockheed Martin, care utilizează PyTorch în proiectele lor. În cadrul programului Bug Bounty, Meta a plătit cercetătorilor 16.250 de dolari pentru informații despre problemă.
Esenta atacului constă în posibilitatea de a rula propriul cod pe servere integrarea continuă, care efectuează reîmpachetări și execută sarcini pentru a testa modificările noi trimise în depozit. Problema afectează proiectele care folosesc gestionari externi auto-găzduiți - „Self-Hosted Runner” cu GitHub Actions. Spre deosebire de gestionarii tradiționali GitHub Actions, gestionarii auto-găzduiți nu funcționează în infrastructura GitHub, ci pe propriile lor servere sau pe mașini virtuale susținute de dezvoltatori.
Executarea sarcinilor de construcție pe propriile servere permite lansarea codului care poate scana rețeaua internă a întreprinderii, căuta în sistemul de fișiere local chei de criptare și token-uri de acces, analiza variabilelor de mediu cu parametrii de acces la stocări externe sau servicii cloud. În absența unei izolații adecvate a mediului de construcție, datele confidențiale găsite pot fi trimise atacatorilor în afară, de exemplu, prin apeluri către API externe. Pentru a determina utilizarea proiectelor „Self-Hosted Runner”, poate fi folosit instrumentul Gato, care analizează fișierele workflow publice și log-urile de execuție CI.
În PyTorch și în multe alte proiecte care folosesc „Self-Hosted Runner”, executarea sarcinilor de construcție este permisă doar dezvoltatorilor, a căror modificare a fost anterior revizuită și inclusă în baza de cod a proiectului. A avea statutul de „contributor” atunci când se folosesc setările implicite în depozit oferă posibilitatea de a rula gestionarii GitHub Actions atunci când se transmit cereri de pull, și, prin urmare, de a executa propriul cod în orice mediu GitHub Actions Runner legat de depozit sau organizația care coordonează proiectul.
Legătura cu statutul de „contributor” s-a dovedit a fi ușor de ocolit – era suficient să se trimită o modificare nesemnificativă și să se aștepte acceptarea acesteia în codul de bază, după care dezvoltatorul obținea automat statutul de participant activ, iar pull request-urile sale erau permise pentru testare în infrastructura CI fără o verificare separată. Pentru a obține statutul de dezvoltator activ, în cadrul experimentului s-au folosit modificări cosmetice minore legate de corectarea greșelilor din documentație. Pentru a obține accesul la depozitul și la stocarea versiunilor PyTorch în timpul atacului, prin executarea codului în „Self-Hosted Runner” a fost efectuată interceptarea token-ului GitHub, utilizat pentru accesul la depozit din procesele de construcție, precum și a cheilor AWS, folosite pentru a salva rezultatele construcției.
Problema nu este specifică pentru PyTorch și afectează multe alte proiecte mari care folosesc setările implicite pentru „Self-Hosted Runner” în GitHub Actions. De exemplu, se menționează realizarea de atacuri similare pentru a introduce un backdoor în câteva portofele mari de criptomonedă și proiecte blockchain cu o capitalizare de miliarde, modificările aduse versiunilor Microsoft Deepspeed și TensorFlow, compromiterea uneia dintre aplicațiile companiei CloudFlare, precum și executarea codului pe computer în rețeaua Microsoft. Detaliile acestor incidente nu au fost deocamdată dezvăluite. În cadrul programelor active de Bug Bounty, cercetătorii au trimis mai mult de 20 de solicitări pentru a primi recompense în valoare de câteva sute de mii de dolari.
Sursa: opennet.ro
