A PyPI-tárolóban található Python-csomagok 46%-a potenciálisan nem biztonságos kódot tartalmaz

A Turku Egyetem (Finnország) kutatóinak egy csoportja közzétette a PyPI repository-ban található csomagok elemzésének eredményeit olyan potenciálisan veszélyes konstrukciók használatára vonatkozóan, amelyek sebezhetőséghez vezethetnek. 197 ezer csomag elemzése során 749 ezer lehetséges biztonsági problémát azonosítottak. A csomagok 46%-ánál van legalább egy ilyen probléma. A leggyakoribb problémák közé tartoznak a kivételkezeléssel és a kódhelyettesítést lehetővé tevő funkciók használatával kapcsolatos hiányosságok.

Az azonosított 749 ezer problémából 442 ezret (41%) enyhe, 227 ezret (30%) mérsékeltnek, 80 ezret (11%) veszélyesnek minősítettek. Egyes csomagok kiemelkednek a tömegből, és több ezer problémát tartalmaznak: például a PyGGI csomag 2589 problémát azonosított, elsősorban a „try-except-pass” konstrukció használatával kapcsolatban, az appengine-sdk csomag pedig 2356 problémát talált. A genie.libs.ops, pbcore és genie.libs.parser csomagokban is számos probléma van.

Megjegyzendő, hogy az eredményeket automatizált statikus elemzés alapján kaptuk, amely nem veszi figyelembe bizonyos szerkezetek alkalmazási kontextusát. A kód átvizsgálására használt bandit toolkit fejlesztője azon véleményének adott hangot, hogy a téves pozitívumok meglehetősen magas száma miatt a vizsgálati eredmények nem tekinthetők közvetlenül sebezhetőségnek az egyes problémák további manuális áttekintése nélkül.

Például az elemző a megbízhatatlan véletlenszám-generátorok és kivonatoló algoritmusok, például az MD5 használatát biztonsági problémának tekinti, míg a kódban az ilyen algoritmusok olyan célokra használhatók, amelyek nem befolyásolják a biztonságot. Az elemző problémának tekinti a külső adatok nem biztonságos funkciókban történő feldolgozását is, mint például a pickle, yaml.load, subprocess és eval, de ez a használat nem feltétlenül jár sebezhetőséggel, és valójában e funkciók használata biztonsági fenyegetés nélkül is megvalósítható. .

A tanulmányban használt tesztek közül:

  • Potenciálisan nem biztonságos függvények használata: exec, mktemp, eval, mark_safe stb.
  • A fájlok hozzáférési jogainak nem biztonságos beállítása.
  • Hálózati aljzat csatlakoztatása az összes hálózati interfészhez.
  • A kódban szigorúan meghatározott jelszavak és kulcsok használata.
  • Egy előre meghatározott ideiglenes könyvtár használata.
  • A pass és a folytatás használata a mindenre kiterjedő kivételkezelőkben;
  • A Flask webes keretrendszeren alapuló webalkalmazások indítása engedélyezett hibakeresési móddal.
  • Nem biztonságos adatszerializálási módszerek használata.
  • MD2, MD4, MD5 és SHA1 hash függvényeket használ.
  • Nem biztonságos DES-rejtjelek és titkosítási módok használata.
  • Nem biztonságos HTTPSConnection megvalósítás használata a Python egyes verzióiban.
  • A file:// séma megadása urlopenben.
  • Álvéletlen számgenerátorok használata kriptográfiai feladatok végrehajtása során.
  • A Telnet protokoll használata.
  • Nem biztonságos XML-elemzők használata.

Ezenkívül megjegyzendő, hogy 8 rosszindulatú csomagot észleltünk a PyPI-könyvtárban. Az eltávolítás előtt a problémás csomagokat több mint 30 ezer alkalommal töltötték le. A rosszindulatú tevékenységek elrejtése és a csomagokban lévő egyszerű statikus elemzők figyelmeztetései elkerülése érdekében a kódblokkokat a Base64 segítségével kódolták, és az eval hívás dekódolása után végrehajtották.

A noblesse, genesisbot are, patient, noblesse2 és noblessev2 csomagok kódot tartalmaznak a Chrome és Edge böngészőkben tárolt hitelkártyaszámok és jelszavak lehallgatására, valamint fióktokenek átvitelére a Discord alkalmazásból és rendszeradatok küldésére, beleértve a képernyő tartalmáról készült képernyőképeket is. A pytagora és pytagora2 csomagok tartalmazták a harmadik féltől származó végrehajtható kód betöltésének és végrehajtásának lehetőségét.

Forrás: opennet.ru

Hozzászólás