46% Python paketų PyPI saugykloje yra galimai nesaugaus kodo

Grupė mokslininkų iš Turku universiteto (Suomija) paskelbė PyPI saugykloje esančių paketų, skirtų naudoti potencialiai pavojingas konstrukcijas, kurios gali sukelti pažeidžiamumą, analizės rezultatus. Išanalizavus 197 tūkst. paketų, nustatyta 749 tūkst. galimų saugumo problemų. 46 % pakuočių turi bent vieną tokią problemą. Tarp dažniausiai pasitaikančių problemų yra trūkumai, susiję su išimčių tvarkymu ir funkcijų, leidžiančių pakeisti kodą, naudojimu.

Iš 749 tūkst. nustatytų problemų 442 tūkst. (41 proc.) buvo pažymėtos kaip nedidelės, 227 tūkst. (30 proc.) – vidutinio sunkumo, o 80 tūkst. (11 proc.) – kaip pavojingos. Kai kurie paketai išsiskiria iš minios ir turi tūkstančius problemų: pavyzdžiui, PyGGI paketas nustatė 2589 problemas, daugiausia susijusias su konstrukcijos „try-except-pass“ naudojimu, o paketas appengine-sdk aptiko 2356 problemas. Daug problemų taip pat yra genie.libs.ops, pbcore ir genie.libs.parser paketuose.

Pažymėtina, kad rezultatai gauti remiantis automatizuota statine analize, kurioje neatsižvelgiama į tam tikrų konstrukcijų taikymo kontekstą. Kodui nuskaityti naudoto bandito įrankių rinkinio kūrėjas išreiškė nuomonę, kad dėl gana didelio klaidingų teigiamų rezultatų skaičiaus nuskaitymo rezultatai negali būti tiesiogiai laikomi pažeidžiamumu, papildomai neperžiūrėjus kiekvienos problemos rankiniu būdu.

Pavyzdžiui, analizatorius saugumo problema laiko nepatikimų atsitiktinių skaičių generatorių ir maišos algoritmų, tokių kaip MD5, naudojimą, o kode tokie algoritmai gali būti naudojami tikslams, kurie neturi įtakos saugumui. Analizatorius taip pat mano, kad bet koks išorinių duomenų apdorojimas nesaugiose funkcijose, tokiose kaip „pickle“, „yaml.load“, „subprocess“ ir „eval“, yra problema, tačiau šis naudojimas nebūtinai yra susijęs su pažeidžiamumu ir iš tikrųjų šių funkcijų naudojimas gali būti įgyvendintas be grėsmės saugumui. .

Tarp tyrime naudotų testų:

  • Naudojant galimai nesaugias funkcijas exec, mktemp, eval, mark_safe ir kt.
  • Nesaugus failų prieigos teisių nustatymas.
  • Tinklo lizdo prijungimas prie visų tinklo sąsajų.
  • Kode griežtai nurodytų slaptažodžių ir raktų naudojimas.
  • Naudojant iš anksto nustatytą laikiną katalogą.
  • Perėjimo ir tęsimo naudojimas sugauti viską išimčių tvarkyklėse;
  • Paleidžiamos žiniatinklio programos, pagrįstos „Flask“ žiniatinklio sistema su įjungtu derinimo režimu.
  • Nesaugių duomenų deserializavimo metodų naudojimas.
  • Naudoja MD2, MD4, MD5 ir SHA1 maišos funkcijas.
  • Nesaugių DES šifrų ir šifravimo režimų naudojimas.
  • Nesaugaus HTTPSConnection diegimo naudojimas kai kuriose Python versijose.
  • Nurodykite file:// schemą urlopen.
  • Pseudoatsitiktinių skaičių generatorių naudojimas atliekant kriptografines užduotis.
  • Naudojant Telnet protokolą.
  • Nesaugių XML analizatorių naudojimas.

Be to, galima pastebėti, kad PyPI kataloge buvo aptikti 8 kenkėjiški paketai. Prieš pašalinimą probleminiai paketai buvo atsisiųsti daugiau nei 30 tūkstančių kartų. Siekiant paslėpti kenkėjišką veiklą ir apeiti įspėjimus iš paprastų statinių analizatorių paketuose, kodų blokai buvo užkoduoti naudojant Base64 ir vykdomi po dekodavimo naudojant eval iškvietimą.

Paketuose noblesse, genesisbot are, pain, noblesse2 ir noblessev2 yra kodas, skirtas perimti kredito kortelių numerius ir slaptažodžius, saugomus „Chrome“ ir „Edge“ naršyklėse, taip pat perkelti paskyros prieigos raktus iš programos „Discord“ ir siųsti sistemos duomenis, įskaitant ekrano turinio ekrano kopijas. Pytagora ir pytagora2 paketai apėmė galimybę įkelti ir vykdyti trečiosios šalies vykdomąjį kodą.

Šaltinis: opennet.ru

Добавить комментарий