46% Python pakotņu PyPI repozitorijā satur potenciāli nedrošu kodu

Pētnieku grupa no Turku Universitātes (Somija) publicēja PyPI repozitorijā esošo pakotņu analīzes rezultātus potenciāli bīstamu konstrukciju izmantošanai, kas varētu radīt ievainojamības. Analizējot 197 tūkstošus paku, tika identificētas 749 tūkstoši iespējamās drošības problēmas. 46% iepakojumu ir vismaz viena šāda problēma. Starp visbiežāk sastopamajām problēmām ir trūkumi, kas saistīti ar izņēmumu apstrādi un funkciju izmantošanu, kas ļauj aizstāt kodu.

No 749 tūkstošiem konstatēto problēmu 442 tūkstoši (41%) tika atzīmēti kā nelielas, 227 tūkstoši (30%) kā vidēji smagas un 80 tūkstoši (11%) kā bīstamas. Dažas pakotnes izceļas no pūļa un satur tūkstošiem problēmu: piemēram, PyGGI pakotne identificēja 2589 problēmas, galvenokārt saistītas ar konstrukcijas “try-except-pass” izmantošanu, bet pakotnē appengine-sdk tika konstatētas 2356 problēmas. Liels skaits problēmu ir arī pakotnēs genie.libs.ops, pbcore un genie.libs.parser.

Jāatzīmē, ka rezultāti iegūti, balstoties uz automatizētu statisko analīzi, kurā nav ņemts vērā atsevišķu konstrukciju pielietojuma konteksts. Koda skenēšanai izmantotā bandītu rīkkopas izstrādātājs pauda viedokli, ka diezgan lielā viltus pozitīvo gadījumu skaita dēļ skenēšanas rezultātus nevar tieši uzskatīt par ievainojamībām bez katras problēmas papildu manuālas pārskatīšanas.

Piemēram, analizators par drošības problēmu uzskata neuzticamu nejaušo skaitļu ģeneratoru un jaukšanas algoritmu izmantošanu, piemēram, MD5, savukārt kodā šādus algoritmus var izmantot mērķiem, kas neietekmē drošību. Analizators arī uzskata par problēmu jebkādu ārējo datu apstrādi nedrošās funkcijās, piemēram, pickle, yaml.load, apakšprocesā un eval, taču šī izmantošana ne vienmēr ir saistīta ar ievainojamību, un faktiski šo funkciju izmantošanu var īstenot bez drošības apdraudējuma. .

Starp pētījumā izmantotajiem testiem:

  • Izmantojot potenciāli nedrošas funkcijas exec, mktemp, eval, mark_safe utt.
  • Nedrošs piekļuves tiesību iestatījums failiem.
  • Tīkla ligzdas pievienošana visām tīkla saskarnēm.
  • Kodā stingri norādīto paroļu un atslēgu izmantošana.
  • Izmantojot iepriekš definētu pagaidu direktoriju.
  • Pieslēgšanās un turpināšanas izmantošana visu veidu izņēmumu apstrādātājos;
  • Tīmekļa lietojumprogrammu palaišana, pamatojoties uz Flask tīmekļa ietvaru ar iespējotu atkļūdošanas režīmu.
  • Izmantojot nedrošas datu deserializācijas metodes.
  • Izmanto MD2, MD4, MD5 un SHA1 jaucējfunkcijas.
  • Nedrošu DES šifru un šifrēšanas režīmu izmantošana.
  • Dažās Python versijās tiek izmantota nedroša HTTPSConnection ieviešana.
  • Shēmas file:// norādīšana urlopenā.
  • Pseidogadījuma skaitļu ģeneratoru izmantošana, veicot kriptogrāfijas uzdevumus.
  • Izmantojot Telnet protokolu.
  • Izmantojot nedrošos XML parsētājus.

Turklāt var atzīmēt, ka PyPI direktorijā tika atklātas 8 ļaunprātīgas pakotnes. Pirms noņemšanas problemātiskās pakotnes tika lejupielādētas vairāk nekā 30 tūkstošus reižu. Lai paslēptu ļaunprātīgu darbību un apietu brīdinājumus no vienkāršiem statiskiem analizatoriem pakotnēs, kodu bloki tika kodēti, izmantojot Base64, un izpildīti pēc dekodēšanas, izmantojot eval zvanu.

Noblesse, genesisbot, are, pain, noblesse2 un noblessev2 pakotnes satur kodu, lai pārtvertu pārlūkprogrammās Chrome un Edge saglabātos kredītkaršu numurus un paroles, kā arī pārsūtītu konta marķierus no lietojumprogrammas Discord un nosūtītu sistēmas datus, tostarp ekrānuzņēmumus ar ekrāna saturu. Pytagora un pytagora2 pakotnes ietvēra iespēju ielādēt un izpildīt trešās puses izpildāmo kodu.

Avots: opennet.ru

Pievieno komentāru