Turku Ülikooli teadlaste rühm avaldas analüüsi tulemused PyPI hoidlast pakettide kohta, et tuvastada potentsiaalselt ohtlikke konstruktsioone, mis võivad viia haavatavuste tekkimiseni. Analüüsi käigus uuriti 197 tuhat paketti ja tuvastati 749 tuhat potentsiaalset turvaprobleemi. 46% pakettidest sisaldab vähemalt ühte sarnast probleemi. Kõige sagedamini esinevad probleemid on seotud erandite töötlemise ja koodi asendamise võimalustega.
Tuvastatud 749 tuhande probleemi hulgast on 442 tuhat (41%) märgitud mitteolulisteks, 227 tuhat (30%) mõõduka ohu probleemideks ja 80 tuhat (11%) ohtlikeks. Mõned paketid eristuvad ülejäänud seas ja sisaldavad tuhandeid probleeme: näiteks pakettides PyGGI tuvastati 2589 probleemi, mis on peamiselt seotud konstruktsiooni "try-except-pass" kasutamisega, ja pakett appengine-sdk's leiti 2356 probleemi. Suur hulk probleeme esineb samuti pakettides genie.libs.ops, pbcore ja genie.libs.parser.
Oluline on märkida, et tulemused on saadud automatiseeritud staatilise analüüsi põhjal, mis ei arvesta konkreetse konstruktsiooni rakendamise konteksti. Banditi tööriista arendaja, mida kasutati koodi skaneerimiseks, väljendas arvamust, et kõrge valehäirete arvu tõttu ei saa kontrolli tulemusi otse nõrkustena pidada ilma iga probleemi täiendava käsitsi läbi vaatamiseta.
Näiteks peab analüsaator turvaprobleemiks ebaturvaliste juhuslike arvugeneraatorite ja hash-algoritmide, nagu MD5, kasutamist, samas kui koodis võivad sellised algoritmid olla kasutusel eesmärkidel, mis ei mõjuta turvalisust. Analüsaator peab probleemiks ka igasugust väliste andmete töötlemist ebaturvalistes funktsioonides, nagu pickle, yaml.load, subprocess ja eval, kuid selline kasutamine ei pruugi tingimata kaasa tuua nõrkusi, ning tegelikult võib nende funktsioonide rakendamine olla teostatav ilma turvaohtudeta.
Uuringus kasutatud kontrollide seas:
- Potentsiaalselt ohtlike funktsioonide nagu exec, mktemp, eval, mark_safe jne kasutamine.
- Ohtlikud failiõiguste seadistused.
- Võrgusoketi ühendamine kõigi võrgu liideste külge.
- Koodis kindlaks määratud paroolide ja võtmete kasutamine.
- Eelmääritud ajutise katalooge kasutamine.
- Pass ja continue kasutamine kõikide erandite käitlejate jaoks.
- Flaski veebiraamistiku põhjal loodud veebirakenduste käitamine tõrkerežiimis.
- Ohtlike andmete deserialiseerimise meetodite kasutamine.
- MD2, MD4, MD5 ja SHA1 hash-funktsioonide kasutamine.
- Ohtlike DES krüptograafiliste algoritmide ja krüpteerimise režiimide kasutamine.
- Ohtlik HTTPSConnection'i rakendamine mõnedes Python'i versioonides.
- urlopen'is file:// skeemi määramine.
- Valepsed juhuslike arvu genereerijate kasutamine krüptograafiliste ülesannete teostamisel.
- Telnet protokolli kasutamine.
- Ohtlike XML parserite kasutamine.
Lisaks võib märkida, et kataloogis PyPI leiti 8 pahavara paketti. Enne nende eemaldamist on probleemsed paketid jõudnud koguni 30 000 allalaadimiseni. Pahatahtliku tegevuse varjamiseks ja lihtsate staatiliste analüsaatorite hoiatuste vältimiseks kasutati pakettides koodi plokkide kodeerimist Base64 abil ning nende täitmise korraldamist dekodeerimise kaudu eval-kutsega.
Pakettides noblesse, genesisbot, are, suffer, noblesse2 ja noblessev2 tuvastati krediitkaartide numbrite ja Chrome'i ning Edge'i brauseritesse salvestatud paroolide püüdmiseks mõeldud kood, samuti rakenduse Discord konto tokenite edastamine ja süsteemiandmete, sealhulgas ekraanipiltide saatmine. Paketis pytagora ja pytagora2 oli võimalus laadida ja käivitada kolmanda osapoole täidetavat koodi.
Allikas: opennet.ru
