Skupina výskumníkov z Univerzity v Turku (Fínsko) zverejnila výsledky analýzy balíkov v repozitári PyPI z hľadiska používania potenciálne nebezpečných konštrukcií, ktoré môžu viesť k vzniku zraniteľností. Počas analýzy 197 tisíc balíkov bolo zistených 749 tisíc potenciálnych bezpečnostných problémov. V 46 % balíkov sa nachádza aspoň jeden takýto problém. Medzi najčastejšie sa vyskytujúcimi problémami sú nedostatky súvisiace s spracovaním výnimiek a používaním funkcionalít, ktoré umožňujú zasahovanie kódu.
Z identifikovaných 749 tisíc problémov je 442 tisíc (41 %) označených ako nevýznamné, 227 tisíc (30 %) ako problémy strednej závažnosti a 80 tisíc (11 %) ako nebezpečné. Niektoré balíky sa od ostatných odlišujú a obsahujú tisíce problémov: napríklad v balíku PyGGI bolo zistených 2589 problémov, prevažne súvisiacich s používaním konštrukcie „try-except-pass“, v balíku appengine-sdk bolo nájdených 2356 problémov. Veľké množstvo problémov sa tiež nachádza v balíkoch genie.libs.ops, pbcore a genie.libs.parser.
Je potrebné poznamenať, že výsledky boli získané na základe automatizovanej statickej analýzy, ktorá nezohľadňuje kontext použitia týchto konštrukcií. Vývojár nástroja bandit, ktorý bol použitý na skenovanie kódu, vyjadril názor, že vzhľadom na vysoký počet falošných pozitívnych výsledkov nemožno výsledky kontroly považovať za zraniteľnosti bez dodatočného ručného preskúmania každého problému.
Napríklad analyzátor považuje za bezpečnostný problém používanie nespolehlivých generátorov náhodných čísel a hashovacích algoritmov, ako je MD5, pričom rovnaké algoritmy môžu byť v kóde použité na účely, ktoré neovplyvňujú bezpečnosť. Analyzátor tiež považuje za problém akúkoľvek manipuláciu s externými dátami v nezabezpečených funkciách, ako sú pickle, yaml.load, subprocess a eval, no takéto použitie nemusí nevyhnutne súvisieť s vznikom zraniteľnosti a v skutočnosti môže byť aplikácia uvedených funkcií realizovaná bez bezpečnostného rizika.
Medzi kontrolami použitými v štúdii:
- Používanie potenciálne nebezpečných funkcií exec, mktemp, eval, mark_safe a podobne.
- Nezabezpečené nastavenie prístupových práv pre súbory.
- Pripojenie sieťového soketu ku všetkým sieťovým rozhraniam.
- Používanie tvrdo zadaných hesiel a kľúčov v kóde.
- Používanie preddefinovaného dočasného adresára.
- Používanie pass a continue v spracovateľoch výnimiek typu catch-all.
- Spúšťanie webových aplikácií na báze webového frameworku Flask s povoleným režimom ladenia.
- Používanie nebezpečných metód deserializácie údajov.
- Používanie hashovacích funkcií MD2, MD4, MD5 a SHA1.
- Používanie nebezpečných šifrovacích metód DES a režimov šifrovania.
- Používanie nebezpečnej implementácie HTTPSConnection v niektorých verziách Pythonu.
- Určenie schémy file:// v urlopen.
- Používanie generátorov pseudonáhodných čísel pri vykonávaní kryptografických úloh.
- Používanie protokolu Telnet.
- Používanie nebezpečných XML parserov.
Ďalšie možné poznámky, objavenie 8 škodlivých balíčkov v adresári PyPI. Pred odstránením stihli problémy balíky stiahnuť viac ako 30-tisíc krát. Na skrytie škodlivej aktivity a obídenie varovaní jednoduchých statických analyzátorov bolo v balíčkoch použité kódovanie blokov kódu pomocou Base64 a organizácia z vykonania po dekódovaní cez volanie eval.
V balíčkoch noblesse, genesisbot, are, suffer, noblesse2 a noblessev2 bol odhalený kód na zachytávanie čísel kreditných kariet a hesiel uložených v prehliadačoch Chrome a Edge, ako aj na prenos tokenov účtov z aplikácie Discord a odosielanie údajov o systéme, vrátane snímok obrazovky obsahu. V balíčkoch pytagora a pytagora2 bola prítomná možnosť načítania a vykonania externého spustiteľného kódu.
Zdroj: opennet.ru
