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