46 % balíkov Python v úložisku PyPI obsahuje potenciálne nebezpečný kód

Skupina výskumníkov z University of Turku (Fínsko) zverejnila výsledky analýzy balíkov v úložisku PyPI na použitie potenciálne nebezpečných konštruktov, ktoré by mohli viesť k zraniteľnostiam. Počas analýzy 197 tisíc balíkov bolo identifikovaných 749 tisíc potenciálnych bezpečnostných problémov. 46 % balíkov má aspoň jeden takýto problém. Medzi najčastejšie problémy patria nedostatky súvisiace so spracovaním výnimiek a používaním funkcií, ktoré umožňujú nahrádzanie kódu.

Zo 749 tisíc identifikovaných problémov bolo 442 tisíc (41 %) označených za menej závažné, 227 tisíc (30 %) za stredne závažné problémy a 80 tisíc (11 %) za nebezpečné. Niektoré balíky vyčnievajú z davu a obsahujú tisíce problémov: napríklad balík PyGGI identifikoval 2589 problémov, ktoré súvisia najmä s použitím konštrukcie „try-except-pass“ a balík appengine-sdk našiel 2356 problémov. Veľké množstvo problémov sa vyskytuje aj 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 aplikácie určitých štruktúr. Vývojár sady nástrojov bandit, ktorý bol použitý na skenovanie kódu, vyjadril názor, že vzhľadom na pomerne vysoký počet falošných poplachov nemožno výsledky skenovania priamo považovať za zraniteľné miesta bez dodatočnej ručnej kontroly každého problému.

Analyzátor napríklad považuje používanie nespoľahlivých generátorov náhodných čísel a hašovacích algoritmov, ako je MD5, za bezpečnostný problém, zatiaľ čo v kóde môžu byť takéto algoritmy použité na účely, ktoré neovplyvňujú bezpečnosť. Analyzátor tiež považuje akékoľvek spracovanie externých údajov v nebezpečných funkciách, ako je pickle, yaml.load, subprocess a eval, za problém, ale toto použitie nemusí nevyhnutne zahŕňať zraniteľnosť a v skutočnosti je možné použitie týchto funkcií implementovať bez ohrozenia bezpečnosti. .

Medzi testy použité v štúdii:

  • Používanie potenciálne nebezpečných funkcií exec, mktemp, eval, mark_safe atď.
  • Nezabezpečené nastavenie prístupových práv k súborom.
  • Pripojenie sieťovej zásuvky ku všetkým sieťovým rozhraniam.
  • Používanie hesiel a kľúčov presne špecifikovaných v kóde.
  • Použitie preddefinovaného dočasného adresára.
  • Použitie pass and continue v obslužných programoch výnimiek v štýle catch-all;
  • Spúšťanie webových aplikácií založených na webovom frameworku Flask s povoleným režimom ladenia.
  • Používanie nebezpečných metód deserializácie údajov.
  • Používa hašovacie funkcie MD2, MD4, MD5 a SHA1.
  • Použitie nezabezpečených DES šifier a režimov šifrovania.
  • Použitie nezabezpečenej implementácie HTTPSConnection v niektorých verziách Pythonu.
  • Zadanie 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 nezabezpečených analyzátorov XML.

Okrem toho je možné poznamenať, že v adresári PyPI bolo zistených 8 škodlivých balíkov. Pred odstránením boli problematické balíky stiahnuté viac ako 30 tisíc krát. Aby sa skryla škodlivá aktivita a obišli sa varovania pred jednoduchými statickými analyzátormi v balíkoch, bloky kódu boli zakódované pomocou Base64 a spustené po dekódovaní pomocou volania eval.

Balíky noblesse, genesisbot sú, trpieť, noblesse2 a noblessev2 obsahujú kód na zachytenie čísel kreditných kariet a hesiel uložených v prehliadačoch Chrome a Edge, ako aj prenos tokenov účtov z aplikácie Discord a odosielanie systémových údajov vrátane snímok obsahu obrazovky. Balíky pytagora a pytagora2 obsahovali možnosť načítať a spustiť spustiteľný kód tretích strán.

Zdroj: opennet.ru

Pridať komentár