46 % paketov Python v repozitoriju PyPI vsebuje potencialno nevarno kodo

Skupina raziskovalcev z Univerze v Turkuju (Finska) je objavila rezultate analize paketov v repozitoriju PyPI za uporabo potencialno nevarnih konstruktov, ki bi lahko vodili do ranljivosti. Med analizo 197 tisoč paketov je bilo ugotovljenih 749 tisoč potencialnih varnostnih težav. 46 % paketov ima vsaj eno tako težavo. Med najpogostejšimi težavami so pomanjkljivosti, povezane z obravnavanjem izjem in uporabo funkcij, ki omogočajo zamenjavo kode.

Od 749 tisoč identificiranih težav jih je bilo 442 tisoč (41 %) označenih kot manjše, 227 tisoč (30 %) kot zmerne težave in 80 tisoč (11 %) kot nevarne. Nekateri paketi izstopajo iz množice in vsebujejo na tisoče težav: paket PyGGI je na primer odkril 2589 težav, povezanih predvsem z uporabo konstrukcije »poskusi-razen-prepusti«, paket appengine-sdk pa je odkril 2356 težav. Veliko težav je prisotnih tudi v paketih genie.libs.ops, pbcore in genie.libs.parser.

Opozoriti je treba, da so rezultati pridobljeni na podlagi avtomatizirane statične analize, ki ne upošteva konteksta uporabe določenih struktur. Razvijalec orodja bandit, ki je bil uporabljen za skeniranje kode, je izrazil mnenje, da zaradi dokaj velikega števila lažno pozitivnih rezultatov skeniranja ni mogoče neposredno šteti za ranljivosti brez dodatnega ročnega pregleda vsake težave.

Analizator na primer meni, da je uporaba nezanesljivih generatorjev naključnih števil in algoritmov zgoščevanja, kot je MD5, varnostni problem, medtem ko se lahko v kodi takšni algoritmi uporabljajo za namene, ki ne vplivajo na varnost. Analizator obravnava tudi vsako obdelavo zunanjih podatkov v nevarnih funkcijah, kot so pickle, yaml.load, subprocess in eval, kot težavo, vendar ta uporaba ne vključuje nujno ranljivosti in dejansko je uporabo teh funkcij mogoče izvesti brez varnostne grožnje. .

Med testi, uporabljenimi v študiji:

  • Uporaba potencialno nevarnih funkcij exec, mktemp, eval, mark_safe itd.
  • Nevarna nastavitev pravic dostopa do datotek.
  • Priključitev omrežne vtičnice na vse omrežne vmesnike.
  • Uporaba gesel in ključev, ki so strogo določeni v kodi.
  • Uporaba vnaprej določenega začasnega imenika.
  • Uporaba prehoda in nadaljevanja v obravnavalnikih izjem v stilu catch-vse;
  • Zagon spletnih aplikacij, ki temeljijo na spletnem ogrodju Flask z omogočenim načinom odpravljanja napak.
  • Uporaba nevarnih metod deserializacije podatkov.
  • Uporablja zgoščene funkcije MD2, MD4, MD5 in SHA1.
  • Uporaba nevarnih šifer DES in načinov šifriranja.
  • Uporaba nevarne implementacije HTTPSConnection v nekaterih različicah Pythona.
  • Določanje sheme file:// v urlopen.
  • Uporaba generatorjev psevdonaključnih števil pri izvajanju kriptografskih nalog.
  • Uporaba protokola Telnet.
  • Uporaba nevarnih razčlenjevalcev XML.

Poleg tega lahko opazimo, da je bilo v imeniku PyPI odkritih 8 zlonamernih paketov. Pred odstranitvijo so bili problematični paketi preneseni več kot 30 tisočkrat. Da bi skrili zlonamerno dejavnost in zaobšli opozorila preprostih statičnih analizatorjev v paketih, so bili kodni bloki kodirani z uporabo Base64 in izvedeni po dekodiranju s klicem eval.

Paketi noblesse, genesisbot, are, trpijo, noblesse2 in noblessev2 vsebujejo kodo za prestrezanje številk kreditnih kartic in gesel, shranjenih v brskalnikih Chrome in Edge, ter za prenos žetonov računa iz aplikacije Discord in pošiljanje sistemskih podatkov, vključno s posnetki zaslona vsebine zaslona. Paketa pytagora in pytagora2 sta vključevala možnost nalaganja in izvajanja izvršljive kode tretjih oseb.

Vir: opennet.ru

Dodaj komentar