46% Python paketa u PyPI repozitoriju sadrži potencijalno nesiguran kod

Grupa istraživača sa Sveučilišta Turku (Finska) objavila je rezultate analize paketa u PyPI repozitoriju za korištenje potencijalno opasnih konstrukcija koje bi mogle dovesti do ranjivosti. Tijekom analize 197 tisuća paketa identificirano je 749 tisuća potencijalnih sigurnosnih problema. 46% paketa ima barem jedan takav problem. Među najčešćim problemima su nedostaci vezani uz rukovanje iznimkama i korištenje značajki koje dopuštaju zamjenu koda.

Od 749 tisuća identificiranih problema, 442 tisuće (41%) označeno je kao manje, 227 tisuća (30%) kao umjereno teško i 80 tisuća (11%) kao opasno. Neki se paketi izdvajaju iz gomile i sadrže tisuće problema: na primjer, paket PyGGI identificirao je 2589 problema, uglavnom povezanih s upotrebom konstrukcije "try-except-pass", a paket appengine-sdk pronašao je 2356 problema. Velik broj problema prisutan je i kod paketa genie.libs.ops, pbcore i genie.libs.parser.

Treba napomenuti da su rezultati dobiveni na temelju automatizirane statičke analize, koja ne uzima u obzir kontekst primjene pojedinih konstrukcija. Programer alata bandit, koji je korišten za skeniranje koda, izrazio je mišljenje da se zbog prilično velikog broja lažno pozitivnih rezultata skeniranja ne može izravno smatrati ranjivostima bez dodatnog ručnog pregleda svakog problema.

Na primjer, analizator smatra korištenje nepouzdanih generatora slučajnih brojeva i algoritama raspršivanja, kao što je MD5, sigurnosnim problemom, dok se u kodu takvi algoritmi mogu koristiti u svrhe koje ne utječ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 ta upotreba ne uključuje nužno ranjivost i zapravo se upotreba ovih funkcija može implementirati bez sigurnosne prijetnje .

Među testovima korištenim u studiji:

  • Korištenje potencijalno nesigurnih funkcija exec, mktemp, eval, mark_safe itd.
  • Nesigurna postavka prava pristupa datotekama.
  • Spajanje mrežne utičnice na sva mrežna sučelja.
  • Korištenje lozinki i ključeva strogo navedenih u kodu.
  • Korištenje unaprijed definiranog privremenog imenika.
  • Korištenje pass i continue u catch-sstyle rukovateljima iznimkama;
  • Pokretanje web aplikacija temeljenih na Flask web okviru s omogućenim načinom otklanjanja pogrešaka.
  • Korištenje nesigurnih metoda deserijalizacije podataka.
  • Koristi MD2, MD4, MD5 i SHA1 hash funkcije.
  • Korištenje nesigurnih DES šifri i načina šifriranja.
  • Upotreba nesigurne implementacije HTTPSConnection u nekim verzijama Pythona.
  • Određivanje file:// sheme u urlopen.
  • Korištenje generatora pseudoslučajnih brojeva pri izvođenju 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 preuzeti su više od 30 tisuća puta. Kako bi se sakrila zlonamjerna aktivnost i zaobišla upozorenja jednostavnih statičkih analizatora u paketima, blokovi koda kodirani su pomoću Base64 i izvršeni nakon dekodiranja pomoću eval poziva.

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

Izvor: opennet.ru

Dodajte komentar