46% dintre pachetele Python din depozitul PyPI conțin cod potențial nesigur

Un grup de cercetători de la Universitatea din Turku (Finlanda) a publicat rezultatele unei analize a pachetelor din depozitul PyPI pentru utilizarea unor construcții potențial periculoase care ar putea duce la vulnerabilități. În timpul analizei a 197 mii de pachete, au fost identificate 749 mii potenţiale probleme de securitate. 46% dintre pachete au cel puțin o astfel de problemă. Printre cele mai frecvente probleme se numără deficiențele legate de gestionarea excepțiilor și utilizarea caracteristicilor care permit înlocuirea codului.

Din cele 749 mii de probleme identificate, 442 mii (41%) au fost etichetate drept minore, 227 mii (30%) probleme moderate și 80 mii (11%) ca periculoase. Unele pachete ies în evidență din mulțime și conțin mii de probleme: de exemplu, pachetul PyGGI a identificat 2589 de probleme, în principal legate de utilizarea constructului „try-except-pass”, iar pachetul appengine-sdk a găsit 2356 de probleme. Un număr mare de probleme sunt prezente și în pachetele genie.libs.ops, pbcore și genie.libs.parser.

De menționat că rezultatele au fost obținute pe baza analizei statice automate, care nu ține cont de contextul de aplicare a anumitor structuri. Dezvoltatorul setului de instrumente bandit, care a fost folosit pentru a scana codul, și-a exprimat opinia că, din cauza numărului destul de mare de fals pozitive, rezultatele scanării nu pot fi considerate direct vulnerabilități fără o revizuire manuală suplimentară a fiecărei probleme.

De exemplu, analizorul consideră că utilizarea unor generatoare de numere aleatoare nesigure și a algoritmilor de hashing, cum ar fi MD5, este o problemă de securitate, în timp ce în cod astfel de algoritmi pot fi utilizați în scopuri care nu afectează securitatea. Analizatorul consideră, de asemenea, orice prelucrare a datelor externe în funcții nesigure precum pickle, yaml.load, subprocess și eval o problemă, dar această utilizare nu implică neapărat o vulnerabilitate și de fapt utilizarea acestor funcții poate fi implementată fără o amenințare de securitate .

Printre testele utilizate în studiu:

  • Folosind funcții potențial nesigure exec, mktemp, eval, mark_safe etc.
  • Setare nesigură a drepturilor de acces pentru fișiere.
  • Atașarea unei prize de rețea la toate interfețele de rețea.
  • Utilizarea parolelor și a cheilor strict specificate în cod.
  • Folosind un director temporar predefinit.
  • Folosind pass și continue în tratatorii de excepții catch-all-style;
  • Lansarea aplicațiilor web bazate pe cadrul web Flask cu modul de depanare activat.
  • Utilizarea metodelor nesigure de deserializare a datelor.
  • Utilizează funcțiile hash MD2, MD4, MD5 și SHA1.
  • Utilizarea cifrurilor DES nesigure și a modurilor de criptare.
  • Utilizarea unei implementări HTTPSConnection nesigure în unele versiuni de Python.
  • Specificarea schemei file:// în urlopen.
  • Utilizarea generatoarelor de numere pseudoaleatoare la efectuarea sarcinilor criptografice.
  • Folosind protocolul Telnet.
  • Folosind parsere XML nesigure.

În plus, se poate observa că 8 pachete rău intenționate au fost detectate în directorul PyPI. Înainte de eliminare, pachetele problematice au fost descărcate de peste 30 de mii de ori. Pentru a ascunde activitatea rău intenționată și pentru a ocoli avertismentele de la analizoarele statice simple din pachete, blocurile de cod au fost codificate folosind Base64 și executate după decodare folosind un apel eval.

Pachetele noblesse, genesisbot sunt, suferă, noblesse2 și noblessev2 conțin cod pentru a intercepta numerele cardurilor de credit și parolele stocate în browserele Chrome și Edge, precum și pentru a transfera jetoane de cont din aplicația Discord și pentru a trimite date de sistem, inclusiv capturi de ecran ale conținutului ecranului . Pachetele pytagora și pytagora2 au inclus capacitatea de a încărca și executa cod executabil terță parte.

Sursa: opennet.ru

Adauga un comentariu