El 46% dels paquets Python del repositori PyPI contenen codi potencialment insegur

Un grup d'investigadors de la Universitat de Turku (Finlàndia) va publicar els resultats d'una anàlisi de paquets al repositori PyPI per a l'ús de construccions potencialment perilloses que podrien generar vulnerabilitats. Durant l'anàlisi de 197 mil paquets, es van identificar 749 mil problemes potencials de seguretat. El 46% dels paquets tenen almenys un d'aquests problemes. Entre els problemes més habituals es troben les mancances relacionades amb el maneig d'excepcions i l'ús de funcions que permeten la substitució de codi.

Dels 749 mil problemes identificats, 442 mil (41%) van ser qualificats de lleus, 227 mil (30%) de problemes moderats i 80 mil (11%) de perillosos. Alguns paquets destaquen entre la multitud i contenen milers de problemes: per exemple, el paquet PyGGI va identificar 2589 problemes, principalment relacionats amb l'ús de la construcció "try-except-pass", i el paquet appengine-sdk va trobar 2356 problemes. També hi ha un gran nombre de problemes als paquets genie.libs.ops, pbcore i genie.libs.parser.

Cal destacar que els resultats s'han obtingut a partir de l'anàlisi estàtica automatitzada, que no té en compte el context d'aplicació de determinades estructures. El desenvolupador del conjunt d'eines de bandit, que es va utilitzar per escanejar el codi, va expressar l'opinió que, a causa del nombre bastant elevat de falsos positius, els resultats de l'anàlisi no es poden considerar directament vulnerabilitats sense una revisió manual addicional de cada problema.

Per exemple, l'analitzador considera que l'ús de generadors de nombres aleatoris i algorismes de hash poc fiables, com MD5, és un problema de seguretat, mentre que en el codi aquests algorismes es poden utilitzar per a finalitats que no afecten la seguretat. L'analitzador també considera un problema qualsevol processament de dades externes en funcions insegures com pickle, yaml.load, subprocess i eval, però aquest ús no implica necessàriament una vulnerabilitat i, de fet, l'ús d'aquestes funcions es pot implementar sense una amenaça de seguretat. .

Entre les proves utilitzades en l'estudi:

  • Utilitzant funcions potencialment insegures exec, mktemp, eval, mark_safe, etc.
  • Configuració insegura dels drets d'accés als fitxers.
  • Connexió d'un sòcol de xarxa a totes les interfícies de xarxa.
  • Ús de contrasenyes i claus estrictament especificades al codi.
  • Utilitzant un directori temporal predefinit.
  • Ús de passar i continuar als controladors d'excepcions d'estil catch-all;
  • Llançament d'aplicacions web basades en el marc web Flask amb el mode de depuració activat.
  • Ús de mètodes de deserialització de dades no segurs.
  • Utilitza funcions hash MD2, MD4, MD5 i SHA1.
  • Ús de xifratge DES insegurs i modes de xifratge.
  • Ús d'una implementació HTTPSConnection insegura en algunes versions de Python.
  • Especificant l'esquema file:// a urlopen.
  • Ús de generadors de nombres pseudoaleatoris quan es realitzen tasques criptogràfiques.
  • Utilitzant el protocol Telnet.
  • Ús d'analitzadors XML insegurs.

A més, es pot observar que s'han detectat 8 paquets maliciosos al directori PyPI. Abans de l'eliminació, els paquets problemàtics es van baixar més de 30 mil vegades. Per ocultar l'activitat maliciosa i evitar els avisos d'analitzadors estàtics simples en paquets, els blocs de codi es van codificar amb Base64 i es van executar després de descodificar-los mitjançant una trucada d'eval.

Els paquets noblesse, genesisbot, are, suffer, noblesse2 i noblessev2 contenen codi per interceptar números de targetes de crèdit i contrasenyes emmagatzemades als navegadors Chrome i Edge, així com transferir fitxes de compte des de l'aplicació Discord i enviar dades del sistema, incloses captures de pantalla del contingut de la pantalla . Els paquets pytagora i pytagora2 incloïen la possibilitat de carregar i executar codi executable de tercers.

Font: opennet.ru

Afegeix comentari