46% PyPI hoidlas olevatest Pythoni pakettidest sisaldavad potentsiaalselt ohtlikku koodi

Turu ülikooli (Soome) teadlaste rühm avaldas PyPI repositooriumis olevate pakettide analüüsi tulemused potentsiaalselt ohtlike konstruktsioonide kasutamiseks, mis võivad põhjustada haavatavust. 197 tuhande paki analüüsi käigus tuvastati 749 tuhat potentsiaalset turvaprobleemi. 46% pakettidest on vähemalt üks selline probleem. Levinumate probleemide hulgas on puudused, mis on seotud erandite käsitlemise ja koodi asendamist võimaldavate funktsioonide kasutamisega.

749 tuhandest tuvastatud probleemist märgiti 442 tuhat (41%) kergeks, 227 tuhat (30%) mõõdukaks ja 80 tuhat (11%) ohtlikuks. Mõned paketid eristuvad massist ja sisaldavad tuhandeid probleeme: näiteks PyGGI pakett tuvastas 2589 probleemi, mis olid peamiselt seotud konstruktsiooni “try-except-pass” kasutamisega, ja pakett appengine-sdk 2356 probleemi. Suur hulk probleeme esineb ka pakettides genie.libs.ops, pbcore ja genie.libs.parser.

Tuleb märkida, et tulemused saadi automatiseeritud staatilise analüüsi põhjal, mis ei võta arvesse teatud struktuuride rakenduskonteksti. Koodi skannimiseks kasutatud bandiidi tööriistakomplekti arendaja avaldas arvamust, et üsna suure valepositiivsete arvu tõttu ei saa skannimistulemusi ilma iga probleemi täiendava käsitsi ülevaatamiseta turvaaukudeks pidada.

Näiteks peab analüsaator turvaprobleemiks ebausaldusväärsete juhuslike arvude generaatorite ja räsimisalgoritmide (nt MD5) kasutamist, samas kui koodis võidakse selliseid algoritme kasutada eesmärkidel, mis turvalisust ei mõjuta. Analüsaator peab probleemiks ka igasugust väliste andmete töötlemist ebaturvalistes funktsioonides, nagu pickle, yaml.load, alamprotsess ja eval, kuid see kasutamine ei pruugi hõlmata haavatavust ja tegelikult saab nende funktsioonide kasutamist rakendada ilma turvaohuta. .

Uuringus kasutatud testide hulgas:

  • Kasutades potentsiaalselt ohtlikke funktsioone exec, mktemp, eval, mark_safe jne.
  • Failide juurdepääsuõiguste ebaturvaline seadistus.
  • Võrgupesa ühendamine kõigi võrguliidestega.
  • Koodis rangelt määratud paroolide ja võtmete kasutamine.
  • Eelmääratletud ajutise kataloogi kasutamine.
  • Läbipääsu ja jätkamise kasutamine kõikehõlmavates erandite käsitlejates;
  • Veebirakenduste käivitamine Flask veebiraamistikul, kus silumisrežiim on lubatud.
  • Ebaturvaliste andmete deserialiseerimismeetodite kasutamine.
  • Kasutab MD2, MD4, MD5 ja SHA1 räsifunktsioone.
  • Ebaturvaliste DES-šifrite ja krüpteerimisrežiimide kasutamine.
  • Ebaturvalise HTTPSConnectioni juurutamine Pythoni mõnes versioonis.
  • Skeemi file:// määramine urlopenis.
  • Pseudojuhuslike numbrite generaatorite kasutamine krüptoülesannete täitmisel.
  • Telneti protokolli kasutamine.
  • Ebaturvaliste XML-parserite kasutamine.

Lisaks võib märkida, et PyPI kataloogis tuvastati 8 pahatahtlikku paketti. Enne eemaldamist laaditi probleemseid pakette alla üle 30 tuhande korra. Pahatahtliku tegevuse peitmiseks ja lihtsate staatiliste analüsaatorite hoiatustest möödahiilimiseks pakettides kodeeriti koodiplokid Base64 abil ja käivitati pärast dekodeerimist eval-kutse abil.

Paketid noblesse, genesisbot are, patient, noblesse2 ja noblessev2 sisaldavad koodi Chrome'i ja Edge'i brauseritesse salvestatud krediitkaardinumbrite ja paroolide pealtkuulamiseks, samuti kontolubade ülekandmiseks rakendusest Discord ja süsteemiandmete, sh ekraani sisu ekraanipiltide saatmiseks. Paketid pytagora ja pytagora2 sisaldasid võimalust laadida ja käivitada kolmanda osapoole käivitatavat koodi.

Allikas: opennet.ru

Lisa kommentaar