Cercetătorii GitGuardian au publicat rezultatele unei analize a datelor sensibile uitate de dezvoltatori în codul încărcat în depozitul de pachete Python PyPI (Python Package Index). După analizarea a peste 9,5 milioane de fișiere și 5 milioane de versiuni ale pachetelor, legate de 450 de mii de proiecte, au fost identificate 56866 de cazuri de scurgeri de date confidențiale. Dacă luăm în considerare doar datele unice, fără duplicare în versiuni diferite, numărul scurgerilor identificate a fost de 3938, iar numărul proiectelor în care a existat cel puțin o scurgere a fost de 2922.
În total, au fost identificate peste 150 de tipuri de scurgeri de informații confidențiale, printre care parole obişnuite, chei criptografice, token-uri de acces la servicii cloud, sisteme de integrare continuă și API-uri. Cel puțin 768 de acreditive erau active în momentul desfășurării studiului. Printre exemplele de scurgeri populare, care rămân relevante, se menționează cheile de acces la Azure Active Directory, acreditivele pentru SSH, MongoDB, MySQL și PostgreSQL, cheile pentru GitHub OAuth App, Dropbox și Auth0, parametrii de autentificare pentru Coinbase și Twilio.
Printre tipurile de scurgeri care câștigă popularitate se numără token-urile de acces pentru boți în Telegram, numărul acestora dublându-se la începutul anului 2021 și apoi din nou dublându-se în primăvara anului 2023. O creștere constantă a scurgerilor a fost observată din 2020 pentru cheile de acces la Google API, iar din 2022 pentru acreditivele de SGBD. Dintre pachetele care conduc în termeni de număr de scurgeri, se menționează pachetele chatllm și safire, în care au fost uitate 209 chei pentru OpenAI și 320 chei pentru Google Cloud.
Printre tipurile de fișiere în care au fost identificate cele mai numeroase scurgeri, pe lângă fișierele cu extensia „.py”, se numără fișiere cu extensia .json (610 scurgeri), .md (270), PKG-INFO (240), METADATA (210), .txt (170), precum și fișiere README (209) și fișiere din directoare numite test (675). Multe scurgeri sunt, de asemenea, asociate cu neatenția și erorile în configurarea excluderii fișierelor la generarea pachetelor. De exemplu, fișierele cu fișierele de configurare locale (.cookiecutterrc, .env, .pypirc etc.) pot fi excluse din depozitul Git prin intermediul fișierului „.gitignore”, care nu este considerat la crearea pachetului. În special, în depozit au fost găsite 43 de fișiere .pypirc care conțineau acreditive pentru acces la PyPI. În 15 cazuri de scurgere, dezvoltatorii nu intenționau să publice pachete public, care fuseseră inițial create pentru utilizare internă, dar le-au publicat din greșeală în PyPI.
De asemenea, se pot menționa alte două evenimente legate de PyPI:
- În depozitul PyPI au fost descoperite 8 pachete malware, prezentate ca utilitare pentru obfuscare, adică pentru transformarea codului într-o formă ilizibilă, care îngreunează recuperarea algoritmului de funcționare. Pachetele identificate conțineau în denumire termenul „pyobf” (Pyobftoexe, Pyobfusfile, Pyobfexecute, Pyobfpremium, Pyobflight, Pyobfadvance, Pyobfuse și pyobfgood) și au fost descărcate de peste 2000 de ori.
Codul malițios integrat în pachete era specific platformei Windows și permitea conectarea la un control extern server, rularea de comenzi arbitrare pe computerul dezvoltatorului, găsirea și trimiterea de informații confidențiale, cum ar fi cheile de acces, precum și transferul de fișiere arbitrare din sistem. În plus, codul malițios putea efectua funcții de keylogger, interceptând parolele introduse în Chrome, creând capturi de ecran, înregistrând sunetul și chiar controlând webcam-ul.
- Au fost publicate rezultatele unui audit independent al bazei de cod a instrumentului utilizat pentru organizarea funcționării depozitului pypi.org și al framework-ului „cabotage”, implicat în infrastructura pentru orquestrarea containerelor. Auditul a fost realizat cu sprijinul organizației non-profit OTF (Open Technology Fund). În timpul auditului nu au fost descoperite probleme cu un nivel ridicat de pericol, iar codul sursă a fost recunoscut ca respectând cerințele de bază pentru scrierea sigură a codului. Totuși, s-a observat o acoperire insuficientă a testelor pentru baza de cod cabotage și au fost identificate 29 de probleme, dintre care opt au fost clasificate cu un nivel moderat de pericol, 6 cu un nivel scăzut, iar 14 au fost marcate ca observații informative.
Cele mai notabile probleme:
- Verificarea insuficientă a semnăturilor digitale utilizate pentru integrarea PyPI cu AWS SNS, care permitea trimiterea de notificări pe email către utilizatori individuali.
- Scurgerea de informații în handlerul de descărcări, care permitea determinarea existenței unui cont fără a genera evenimente referitoare la încercările de autentificare.
- Utilizarea hash-urilor criptografice nesigure, care nu exclud atacurile de tip cache poisoning.
- În cazul în care existau drepturi pentru a rula procesele de construcție prin cabotage, un atacator ar putea obține potențial substituirea comenzilor sale.
- În cazul în care existau drepturi de desfășurare în cabotage, un atacator ar putea potențial desfășura o imagine care pare legitimă.
Sursa: opennet.ro
