46 % av Python-pakkene i PyPI-depotet inneholder potensielt usikker kode

En gruppe forskere fra Universitetet i Turku (Finland) publiserte resultatene av en analyse av pakker i PyPI-depotet for bruk av potensielt farlige konstruksjoner som kan føre til sårbarheter. Under analysen av 197 tusen pakker ble 749 tusen potensielle sikkerhetsproblemer identifisert. 46 % av pakkene har minst ett slikt problem. Blant de vanligste problemene er mangler knyttet til unntakshåndtering og bruk av funksjoner som tillater kodeerstatning.

Av de 749 tusen problemene som ble identifisert, ble 442 tusen (41%) merket som mindre, 227 tusen (30%) som moderate problemer og 80 tusen (11%) som farlige. Noen pakker skiller seg ut fra mengden og inneholder tusenvis av problemer: for eksempel identifiserte PyGGI-pakken 2589 problemer, hovedsakelig relatert til bruken av "try-except-pass"-konstruksjonen, og appengine-sdk-pakken fant 2356 problemer. Et stort antall problemer er også tilstede i pakkene genie.libs.ops, pbcore og genie.libs.parser.

Det skal bemerkes at resultatene ble oppnådd basert på automatisert statisk analyse, som ikke tar hensyn til konteksten for anvendelse av visse strukturer. Utvikleren av bandit-verktøysettet, som ble brukt til å skanne koden, uttrykte den oppfatning at på grunn av det ganske høye antallet falske positiver, kan ikke skanneresultatene direkte betraktes som sårbarheter uten ytterligere manuell gjennomgang av hvert problem.

Analysatoren anser for eksempel bruken av upålitelige tilfeldige tallgeneratorer og hashing-algoritmer, slik som MD5, som et sikkerhetsproblem, mens i koden kan slike algoritmer brukes til formål som ikke påvirker sikkerheten. Analysatoren anser også all behandling av eksterne data i usikre funksjoner som pickle, yaml.load, subprocess og eval som et problem, men denne bruken innebærer ikke nødvendigvis en sårbarhet og faktisk kan bruken av disse funksjonene implementeres uten en sikkerhetstrussel .

Blant testene brukt i studien:

  • Bruk av potensielt usikre funksjoner exec, mktemp, eval, mark_safe, etc.
  • Usikker innstilling av tilgangsrettigheter for filer.
  • Koble til en nettverkskontakt til alle nettverksgrensesnitt.
  • Bruk av passord og nøkler strengt spesifisert i koden.
  • Bruke en forhåndsdefinert midlertidig katalog.
  • Bruke pass og fortsett i catch-all-style unntaksbehandlere;
  • Lansering av nettapplikasjoner basert på Flask-nettrammeverket med feilsøkingsmodus aktivert.
  • Bruk av usikre datadeserialiseringsmetoder.
  • Bruker MD2, MD4, MD5 og SHA1 hash-funksjoner.
  • Bruk av usikre DES-chiffer og krypteringsmoduser.
  • Bruk av en usikker HTTPSConnection-implementering i enkelte versjoner av Python.
  • Spesifiserer file://-skjemaet i urlopen.
  • Bruke pseudorandom-tallgeneratorer når du utfører kryptografiske oppgaver.
  • Bruker Telnet-protokollen.
  • Bruk av usikre XML-parsere.

I tillegg kan det bemerkes at 8 ondsinnede pakker ble oppdaget i PyPI-katalogen. Før fjerning ble problematiske pakker lastet ned mer enn 30 tusen ganger. For å skjule ondsinnet aktivitet og omgå advarsler fra enkle statiske analysatorer i pakker, ble kodeblokker kodet ved hjelp av Base64 og utført etter dekoding ved hjelp av et eval-kall.

Noblesse, genesisbot, are, suffer, noblesse2 og noblessev2-pakkene inneholder kode for å fange opp kredittkortnumre og passord lagret i Chrome- og Edge-nettlesere, samt overføre kontotokens fra Discord-applikasjonen og sende systemdata, inkludert skjermbilder av skjerminnhold. Pakkene pytagora og pytagora2 inkluderte muligheten til å laste og kjøre tredjeparts kjørbar kode.

Kilde: opennet.ru

Legg til en kommentar