46% Python paketa u PyPI spremištu sadrži potencijalno nesiguran kod

Grupa istraživača sa Univerziteta u Turkuu (Finska) objavila je rezultate analize paketa u PyPI repozitorijumu za korištenje potencijalno opasnih konstrukcija koje bi mogle dovesti do ranjivosti. Tokom analize 197 hiljada paketa identifikovano je 749 hiljada potencijalnih bezbednosnih problema. 46% paketa ima barem jedan takav problem. Među najčešćim problemima su nedostaci koji se odnose na rukovanje izuzecima i korištenje funkcija koje omogućavaju zamjenu koda.

Od 749 hiljada identifikovanih problema, 442 hiljade (41%) je označeno kao manji, 227 hiljada (30%) kao umereni problemi i 80 hiljada (11%) kao opasni. Neki paketi se izdvajaju iz gomile i sadrže hiljade problema: na primjer, PyGGI paket je identifikovao 2589 problema, uglavnom povezanih sa upotrebom konstrukcije „pokušaj-izuzev-prođi“, a appengine-sdk paket je pronašao 2356 problema. Veliki broj problema prisutan je iu paketima genie.libs.ops, pbcore i genie.libs.parser.

Treba napomenuti da su rezultati dobijeni na osnovu automatizovane statičke analize, koja ne uzima u obzir kontekst primene pojedinih struktura. Programer bandit toolkita, koji je korišten za skeniranje koda, izrazio je mišljenje da se zbog prilično velikog broja lažnih pozitivnih rezultata, rezultati skeniranja ne mogu direktno smatrati ranjivostima bez dodatnog ručnog pregleda svakog problema.

Na primjer, analizator smatra korištenje nepouzdanih generatora slučajnih brojeva i algoritama za heširanje, kao što je MD5, sigurnosnim problemom, dok se u kodu takvi algoritmi mogu koristiti u svrhe koje ne utiču na sigurnost. Analizator također smatra problemom svaku obradu vanjskih podataka u nesigurnim funkcijama kao što su pickle, yaml.load, subprocess i eval, ali ova upotreba ne uključuje nužno ranjivost i zapravo se korištenje ovih funkcija može implementirati bez prijetnje sigurnosti .

Među testovima korištenim u studiji:

  • Korištenje potencijalno nesigurnih funkcija exec, mktemp, eval, mark_safe, itd.
  • Nebezbedno podešavanje prava pristupa za fajlove.
  • Priključivanje mrežne utičnice na sva mrežna sučelja.
  • Upotreba lozinki i ključeva strogo navedenih u kodu.
  • Korištenje unaprijed definiranog privremenog direktorija.
  • Korištenje prolaza i nastavljanja u obrađivačima izuzetaka u stilu catch-all;
  • Pokretanje web aplikacija baziranih na Flask web frameworku sa omogućenim načinom za otklanjanje grešaka.
  • Korištenje nesigurnih metoda deserializacije podataka.
  • Koristi MD2, MD4, MD5 i SHA1 hash funkcije.
  • Upotreba nesigurnih DES šifri i načina šifriranja.
  • Upotreba nesigurne implementacije HTTPSConnection u nekim verzijama Pythona.
  • Određivanje file:// šeme u urlopen.
  • Korištenje generatora pseudoslučajnih brojeva prilikom izvođenja kriptografskih zadataka.
  • Korištenje Telnet protokola.
  • Korištenje nesigurnih XML parsera.

Dodatno, može se primijetiti da je u PyPI direktoriju otkriveno 8 zlonamjernih paketa. Prije uklanjanja, problematični paketi su preuzeti više od 30 hiljada puta. Da bi se sakrila zlonamjerna aktivnost i zaobišla upozorenja od jednostavnih statičkih analizatora u paketima, blokovi koda su kodirani pomoću Base64 i izvršeni nakon dekodiranja korištenjem eval poziva.

Paketi noblesse, genesisbot su, suffer, noblesse2 i noblessev2 sadrže kod za presretanje brojeva kreditnih kartica i lozinki pohranjenih u preglednicima Chrome i Edge, kao i za prijenos tokena računa iz Discord aplikacije i slanje sistemskih podataka, uključujući snimke ekrana sadržaja ekrana. Paketi pytagora i pytagora2 su uključivali mogućnost učitavanja i izvršavanja izvršnog koda treće strane.

izvor: opennet.ru

Dodajte komentar