Soome Turku Ülikooli teadlaste rühm avaldas analüüsi tulemused pakettide kohta PyPI hoidlas, et tuvastada potentsiaalsete ohtlike konstruktsioonide kasutamine, mis võivad viia haavatavuste tekkimiseni. Analüüsi käigus tuvastati 197 000 paketti, millel oli 749 000 potentsiaalset turvaprobleemi. 46% pakettidest sisaldab vähemalt üht sellist probleemi. Kõige sagedamini esinevad probleemid on seotud erandite käsitlemise ja koodisubstitutsioonivõimalustega.
Tuvastatud 749 000 probleemist 442 000 (41%) klassifitseeritakse väheoluliseks, 227 000 (30%) mõõdukalt ohtlikuks ja 80 000 (11%) ohtlikuks. Mõned paketid eristuvad teiste seas ja sisaldavad tuhandeid probleeme: näiteks paketis PyGGI leiti 2589 probleemi, peamiselt seotud konstruktsiooniga "try-except-pass", paketis appengine-sdk leiti 2356 probleemi. Suures koguses probleeme esineb ka pakettides genie.libs.ops, pbcore ja genie.libs.parser.
Tuleb märkida, et tulemused on saadud automaatse staatilise analüüsi põhjal, mis ei arvesta konkreetseid kontekste, kus neid konstruktsioone kasutatakse. Bandit'i tööriistade arendaja, keda kasutati koodi skannimiseks, väljendas arvamust, et suhteliselt kõrge valehäirete arvu tõttu ei saa kontrolli tulemusi otse haavatavustena pidada ilma iga probleemi täiendava käsitsi ülevaatuseta.
Näiteks peab analüsaator koodis usaldamatute juhuslike arvugeneraatorite ja hajutamisalgoritmide, nagu MD5, kasutamist turvaprobleemiks, samas kui neid algoritme võib koodis kasutada eesmärkidel, mis ei mõjuta turvalisust. Samuti peab analüsaator probleemiks igasugust väliste andmete töötlemist ohtlike funktsioonide, näiteks pickle, yaml.load, subprocess ja eval, kaudu, kuid selline kasutamine ei ole tingimata seotud haavatavuste tekkimisega ja tegelikult võivad nende funktsioonide kasutamine toimuda turvaohtudeta.
Uurimises kasutatud kontrollide hulka kuulus:
- Potentsiaalselt ohtlike funktsioonide, nagu exec, mktemp, eval, mark_safe jne, kasutamine.
- Kahtlane failide juurdepääsulubade seadistamine.
- Võrgusoketi ühendamine kõikide võrgu liidesega.
- Hard-kooditud paroole ja võtmeid sisaldavate koodide kasutamine.
- Eelmääratud ajakatalooge kasutamine.
- Pass ja continue kasutamine catch-all stiilis eranditöötluses;
- Web-rakenduste käivitamine Flaski veebiraamistiku baasil koos debug-režiimi aktiveerimisega.
- Ebaturvaliste andmete deserialiseerimise meetodite kasutamine.
- MD2, MD4, MD5 ja SHA1 hash-funktsioonide kasutamine.
- Ebaturvaliste DES-šifreerimismeetodite ja krüpteerimise režiimide kasutamine.
- Mõnede Python'i versioonide ebaturvalise HTTPSConnection rakenduse kasutamine.
- file:// skeemi määramine urlopen'is.
- Krüptograafiliste tehted teostamiseks pseudojuhuslike arvu generaatorite kasutamine.
- Telnet protokolli kasutamine.
- Ebaturvaliste XML-i parserite kasutamine.
Lisaks võib märkida, et PyPI kataloogis tuvastati 8 pahatahtlikku paketti. Probleemide pakette on enne eemaldamist alla laaditud üle 30 000 korra. Pahatahtliku tegevuse varjamiseks ja lihtsate staatiliste analüsaatorite hoiatuste möödahiilimiseks rakendati pakettides koodi plokkide encodeeringut Base64 abil ja dekodeerimisel kasutati eval'i käivitamist.
Pakettides noblesse, genesisbot, are, suffer, noblesse2 ja noblessev2 tuvastati krediitkaartide ja Chrome'i ning Edge'i brauseridest salvestatud paroolide püüdmise kood ning Discord'i rakenduse kontode tokenite edastamine, samuti süsteemi andmete, sealhulgas ekraani sisu ekraanivõtetega edastamine. Pakettides pytagora ja pytagora2 oli olemas võimalus laadida ja käivitada kolmandate osapoolte täitmisfaile.
Allikas: opennet.ru
