46 % balíčků Python v úložišti PyPI obsahuje potenciálně nebezpečný kód

Skupina výzkumníků z University of Turku (Finsko) zveřejnila výsledky analýzy balíčků v úložišti PyPI pro použití potenciálně nebezpečných konstrukcí, které by mohly vést ke zranitelnosti. Při analýze 197 tisíc balíčků bylo identifikováno 749 tisíc potenciálních bezpečnostních problémů. 46 % balíčků má alespoň jeden takový problém. Mezi nejčastější problémy patří nedostatky související se zpracováním výjimek a používání funkcí, které umožňují nahrazování kódu.

Ze 749 tisíc identifikovaných problémů bylo 442 tisíc (41 %) označeno jako méně závažné, 227 tisíc (30 %) jako středně těžké a 80 tisíc (11 %) jako nebezpečné. Některé balíčky vyčnívají z davu a obsahují tisíce problémů: například balíček PyGGI identifikoval 2589 problémů, které souvisely hlavně s použitím konstrukce „try-except-pass“, a balíček appengine-sdk našel 2356 problémů. Velké množství problémů je také přítomno v balíčcích genie.libs.ops, pbcore a genie.libs.parser.

Je třeba poznamenat, že výsledky byly získány na základě automatizované statické analýzy, která nebere v úvahu kontext aplikace určitých konstrukcí. Vývojář sady nástrojů bandit, která byla použita ke skenování kódu, vyjádřil názor, že vzhledem k poměrně vysokému počtu falešných poplachů nelze výsledky skenování přímo považovat za zranitelnosti bez dodatečné ruční kontroly každého problému.

Analyzátor například považuje použití nespolehlivých generátorů náhodných čísel a hashovacích algoritmů, jako je MD5, za bezpečnostní problém, zatímco v kódu mohou být takové algoritmy použity pro účely, které nemají vliv na bezpečnost. Analyzátor také považuje jakékoli zpracování externích dat v nebezpečných funkcích, jako je pickle, yaml.load, subprocess a eval, za problém, ale toto použití nemusí nutně zahrnovat zranitelnost a ve skutečnosti lze použití těchto funkcí implementovat bez ohrožení bezpečnosti .

Mezi testy použité ve studii:

  • Používání potenciálně nebezpečných funkcí exec, mktemp, eval, mark_safe atd.
  • Nezabezpečené nastavení přístupových práv k souborům.
  • Připojení síťové zásuvky ke všem síťovým rozhraním.
  • Použití hesel a klíčů přísně specifikovaných v kódu.
  • Použití předdefinovaného dočasného adresáře.
  • Použití pass and continue v obslužných programech výjimek ve stylu catch-all;
  • Spouštění webových aplikací založených na webovém frameworku Flask s povoleným režimem ladění.
  • Používání nebezpečných metod deseralizace dat.
  • Používá hashovací funkce MD2, MD4, MD5 a SHA1.
  • Použití nezabezpečených DES šifer a režimů šifrování.
  • Použití nezabezpečené implementace HTTPSConnection v některých verzích Pythonu.
  • Určení schématu file:// v urlopen.
  • Použití generátorů pseudonáhodných čísel při provádění kryptografických úloh.
  • Použití protokolu Telnet.
  • Používání nezabezpečených analyzátorů XML.

Kromě toho lze poznamenat, že v adresáři PyPI bylo zjištěno 8 škodlivých balíčků. Před odstraněním byly problematické balíčky staženy více než 30 tisíckrát. Aby bylo možné skrýt škodlivou aktivitu a obejít varování před jednoduchými statickými analyzátory v balíčcích, byly bloky kódu zakódovány pomocí Base64 a spouštěny po dekódování pomocí volání eval.

Balíčky noblesse, genesisbot jsou, trp, noblesse2 a noblessev2 obsahují kód pro zachycení čísel kreditních karet a hesel uložených v prohlížečích Chrome a Edge, stejně jako přenos tokenů účtů z aplikace Discord a odesílání systémových dat, včetně snímků obsahu obrazovky. Balíčky pytagora a pytagora2 obsahovaly možnost načíst a spustit spustitelný kód třetích stran.

Zdroj: opennet.ru

Přidat komentář