46 % af Python-pakkerne i PyPI-lageret indeholder potentielt usikker kode

En gruppe forskere fra Universitetet i Turku (Finland) offentliggjorde resultaterne af en analyse af pakker i PyPI-depotet til brug af potentielt farlige konstruktioner, der kunne føre til sårbarheder. Under analysen af ​​197 tusind pakker blev 749 tusind potentielle sikkerhedsproblemer identificeret. 46 % af pakkerne har mindst ét ​​sådant problem. Blandt de mest almindelige problemer er mangler relateret til undtagelseshåndtering og brugen af ​​funktioner, der tillader kodesubstitution.

Af de 749 tusinde identificerede problemer blev 442 tusinde (41%) mærket som mindre, 227 tusinde (30%) som moderate problemer og 80 tusinde (11%) som farlige. Nogle pakker skiller sig ud fra mængden og indeholder tusindvis af problemer: for eksempel identificerede PyGGI-pakken 2589 problemer, primært relateret til brugen af ​​"try-except-pass"-konstruktionen, og appengine-sdk-pakken fandt 2356 problemer. Et stort antal problemer er også til stede i pakkerne genie.libs.ops, pbcore og genie.libs.parser.

Det skal bemærkes, at resultaterne blev opnået baseret på automatiseret statisk analyse, som ikke tager hensyn til konteksten for anvendelse af visse strukturer. Udvikleren af ​​bandit-værktøjssættet, som blev brugt til at scanne koden, udtrykte den opfattelse, at på grund af det ret høje antal falske positiver, kan scanningsresultaterne ikke direkte betragtes som sårbarheder uden yderligere manuel gennemgang af hvert problem.

For eksempel anser analysatoren brugen af ​​upålidelige tilfældige talgeneratorer og hashing-algoritmer, såsom MD5, for at være et sikkerhedsproblem, mens sådanne algoritmer i koden kan bruges til formål, der ikke påvirker sikkerheden. Analysatoren betragter også enhver behandling af eksterne data i usikre funktioner som pickle, yaml.load, subprocess og eval som et problem, men denne brug involverer ikke nødvendigvis en sårbarhed, og faktisk kan brugen af ​​disse funktioner implementeres uden en sikkerhedstrussel .

Blandt de test, der blev brugt i undersøgelsen:

  • Brug af potentielt usikre funktioner exec, mktemp, eval, mark_safe osv.
  • Usikker indstilling af adgangsrettigheder til filer.
  • Tilslutning af et netværksstik til alle netværksgrænseflader.
  • Brug af adgangskoder og nøgler strengt specificeret i koden.
  • Brug af en foruddefineret midlertidig mappe.
  • Brug af pass og fortsæt i catch-all-stil undtagelsesbehandlere;
  • Lancering af webapplikationer baseret på Flask-webframeworket med debugging-tilstand aktiveret.
  • Brug af usikre dataserialiseringsmetoder.
  • Bruger MD2, MD4, MD5 og SHA1 hash-funktioner.
  • Brug af usikre DES-cifre og krypteringstilstande.
  • Brug af en usikker HTTPSConnection-implementering i nogle versioner af Python.
  • Angivelse af file://-skemaet i urlopen.
  • Brug af pseudorandom-talgeneratorer ved udførelse af kryptografiske opgaver.
  • Brug af Telnet-protokollen.
  • Brug af usikre XML-parsere.

Derudover kan det bemærkes, at 8 ondsindede pakker blev opdaget i PyPI-mappen. Før fjernelse blev problematiske pakker downloadet mere end 30 tusinde gange. For at skjule ondsindet aktivitet og omgå advarsler fra simple statiske analysatorer i pakker, blev kodeblokke kodet ved hjælp af Base64 og udført efter afkodning ved hjælp af et eval-kald.

Noblesse, genesisbot, are, suffer, noblesse2 og noblessev2-pakker indeholder kode til at opsnappe kreditkortnumre og adgangskoder gemt i Chrome- og Edge-browsere, samt overføre kontotokens fra Discord-applikationen og sende systemdata, inklusive skærmbilleder af skærmindhold. Pakkerne pytagora og pytagora2 inkluderede muligheden for at indlæse og udføre tredjeparts eksekverbar kode.

Kilde: opennet.ru

Tilføj en kommentar