46 % av Python-paketen i PyPI-förvaret innehåller potentiellt osäker kod

En grupp forskare från Åbo universitet (Finland) publicerade resultaten av en analys av paket i PyPI-förvaret för användning av potentiellt farliga konstruktioner som kan leda till sårbarheter. Under analysen av 197 tusen paket identifierades 749 tusen potentiella säkerhetsproblem. 46 % av paketen har minst ett sådant problem. Bland de vanligaste problemen är brister relaterade till undantagshantering och användning av funktioner som tillåter kodsubstitution.

Av de 749 tusen identifierade problemen märktes 442 tusen (41%) som mindre, 227 tusen (30%) som måttliga problem och 80 tusen (11%) som farliga. Vissa paket sticker ut från mängden och innehåller tusentals problem: till exempel identifierade PyGGI-paketet 2589 problem, huvudsakligen relaterade till användningen av "försök-utom-pass"-konstruktionen, och appengine-sdk-paketet hittade 2356 problem. Ett stort antal problem finns också i paketen genie.libs.ops, pbcore och genie.libs.parser.

Det bör noteras att resultaten erhölls baserat på automatiserad statisk analys, som inte tar hänsyn till sammanhanget för tillämpningen av vissa strukturer. Utvecklaren av bandit-verktygslådan, som användes för att skanna koden, uttryckte åsikten att på grund av det ganska höga antalet falska positiva, kan skanningsresultaten inte direkt betraktas som sårbarheter utan ytterligare manuell granskning av varje problem.

Till exempel anser analysatorn användningen av opålitliga slumptalsgeneratorer och hashalgoritmer, såsom MD5, som ett säkerhetsproblem, medan sådana algoritmer i koden kan användas för ändamål som inte påverkar säkerheten. Analysatorn betraktar även all bearbetning av extern data i osäkra funktioner som pickle, yaml.load, subprocess och eval som ett problem, men denna användning innebär inte nödvändigtvis en sårbarhet och i själva verket kan användningen av dessa funktioner implementeras utan ett säkerhetshot. .

Bland testerna som används i studien:

  • Använder potentiellt osäkra funktioner exec, mktemp, eval, mark_safe, etc.
  • Osäker inställning av åtkomsträttigheter för filer.
  • Ansluta ett nätverksuttag till alla nätverksgränssnitt.
  • Användning av lösenord och nycklar strikt specificerade i koden.
  • Använda en fördefinierad tillfällig katalog.
  • Använda pass and continue i catch-all-style undantagshanterare;
  • Startar webbapplikationer baserade på Flask-webbramverket med felsökningsläge aktiverat.
  • Använder osäkra datadeserialiseringsmetoder.
  • Använder MD2, MD4, MD5 och SHA1 hashfunktioner.
  • Användning av osäkra DES-chiffer och krypteringslägen.
  • Användning av en osäker HTTPSConnection-implementering i vissa versioner av Python.
  • Specificerar file://-schemat i urlopen.
  • Använda pseudoslumptalsgeneratorer när du utför kryptografiska uppgifter.
  • Använder Telnet-protokollet.
  • Använder osäkra XML-tolkare.

Dessutom kan det noteras att 8 skadliga paket upptäcktes i PyPI-katalogen. Innan borttagningen laddades problematiska paket ner mer än 30 tusen gånger. För att dölja skadlig aktivitet och kringgå varningar från enkla statiska analysatorer i paket, kodades kodblock med Base64 och exekverades efter avkodning med ett eval-anrop.

Paketen noblesse, genesisbot, are, suffer, noblesse2 och noblessev2 innehåller kod för att fånga upp kreditkortsnummer och lösenord lagrade i Chrome- och Edge-webbläsare, samt överföra kontotokens från Discord-applikationen och skicka systemdata, inklusive skärmdumpar av skärmens innehåll. Paketen pytagora och pytagora2 inkluderade möjligheten att ladda och köra exekverbar kod från tredje part.

Källa: opennet.ru

Lägg en kommentar