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

Un grup de cercetători de la Universitatea Turku (Finlanda) a publicat rezultatele analizei pachetelor din depozitul PyPI în ceea ce privește utilizarea construcțiilor potențial periculoase, care ar putea duce la apariția unor vulnerabilități. În cadrul analizei, 197 de mii de pachete au fost identificate cu 749 de mii de probleme potențiale de securitate. În 46% dintre pachete există cel puțin o problemă de acest tip. Printre cele mai frecvente probleme se numără neglijențele legate de procesarea excepțiilor și utilizarea posibilităților care permit substituirea codului.

Dintre cele 749 de mii de probleme identificate, 442 de mii (41%) sunt marcate ca minore, 227 de mii (30%) ca probleme de gravitate moderată și 80 de mii (11%) ca problematice. Unele pachete se evidențiază printr-un număr mare de probleme: de exemplu, în pachetul PyGGI au fost identificate 2589 de probleme, în principal legate de utilizarea construcției 'try-except-pass', iar în pachetul appengine-sdk au fost găsite 2356 de probleme. Un număr mare de probleme se află și în pachetele genie.libs.ops, pbcore și genie.libs.parser.

Se cuvine să menționăm că rezultatele au fost obținute pe baza unui analiză statică automatizată, care nu ia în considerare contextul utilizării anumitor construcții. Dezvoltatorul instrumentului bandit, care a fost utilizat pentru scanarea codului, a exprimat opinia că, din cauza numărului relativ mare de alarme false, rezultatele verificării nu pot fi considerate direct vulnerabilități fără o revizuire manuală suplimentară a fiecărei probleme.

De exemplu, analizatorul consideră problemă de securitate utilizarea generatorilor nesiguri de numere aleatoare și algoritmelor de hashing, cum ar fi MD5, în timp ce în cod aceste algoritme pot fi utilizate în scopuri care nu afectează securitatea. De asemenea, analizatorul consideră problemă orice procesare a datelor externe în funcții nesigure, cum ar fi pickle, yaml.load, subprocess și eval, dar utilizarea respectivă nu este întotdeauna asociată cu apariția unei vulnerabilități, iar aplicarea acestor funcții poate fi realizată fără a prezenta amenințări de securitate.

Printre verificările utilizate în studiu:

  • Utilizarea funcțiilor potențial nesigure exec, mktemp, eval, mark_safe etc.
  • Setarea nesigură a permisiunilor pentru fișiere.
  • Conectarea unui socket de rețea la toate interfețele de rețea.
  • Folosirea parolelor și cheilor specificate direct în cod.
  • Folosirea unui director temporar predefinit.
  • Utilizarea pass și continue în handler-ele de excepții de tip catch-all;
  • Rularea aplicațiilor web bazate pe framework-ul web Flask cu modul de depanare activat.
  • Folosirea metodelor nesigure de deserializare a datelor.
  • Folosirea funcțiilor de hash MD2, MD4, MD5 și SHA1.
  • Folosirea algoritmilor de criptare nesiguri precum DES și modurile de criptare.
  • Folosirea unei implementări nesigure a HTTPSConnection în anumite versiuni de Python.
  • Specificația schemei file:// în urlopen.
  • Utilizarea generatorilor de numere pseudo-aleatoare în sarcini criptografice.
  • Folosirea protocolului Telnet.
  • Folosirea parser-elor XML nesigure.

De asemenea, se poate observa descoperirea a 8 pachete malware în directorul PyPI. Înainte de a fi eliminate, pachetele problematice au fost descărcate de peste 30.000 de ori. Pentru a ascunde activitatea malițioasă și a ocoli avertizările analizatorilor statici simpli, în pachete s-a folosit codificarea blocurilor de cod prin Base64 și execuția acestora după decodare prin apelul eval.

În pachetele noblesse, genesisbot, are, suffer, noblesse2 și noblessev2 a fost descoperit cod pentru interceptarea numerelor de carduri de credit și parolelor salvate în browserele Chrome și Edge, precum și pentru transmiterea tokenilor de cont din aplicația Discord și trimiterea de date despre sistem, inclusiv capturi de ecran ale conținutului ecranului. În pachetele pytagora și pytagora2 s-a găsit capacitatea de a descărca și executa cod executabil terț.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster