O 46 % dos paquetes de Python no repositorio de PyPI conteñen código potencialmente inseguro

Un grupo de investigadores da Universidade de Turku (Finlandia) publicou os resultados dunha análise de paquetes no repositorio PyPI para o uso de construcións potencialmente perigosas que poderían dar lugar a vulnerabilidades. Durante a análise de 197 mil paquetes, identificáronse 749 mil potenciais problemas de seguridade. O 46% dos paquetes teñen polo menos un problema deste tipo. Entre os problemas máis comúns están as deficiencias relacionadas co manexo de excepcións e o uso de funcións que permiten a substitución de código.

Dos 749 mil problemas identificados, 442 mil (41%) foron etiquetados como leves, 227 mil (30%) como problemas moderados e 80 mil (11%) como perigosos. Algúns paquetes destacan entre a multitude e conteñen miles de problemas: por exemplo, o paquete PyGGI identificou 2589 problemas, principalmente relacionados co uso da construción "try-except-pass", e o paquete appengine-sdk atopou 2356 problemas. Un gran número de problemas tamén están presentes nos paquetes genie.libs.ops, pbcore e genie.libs.parser.

Cómpre sinalar que os resultados obtivéronse en base á análise estática automatizada, que non ten en conta o contexto de aplicación de determinadas estruturas. O desenvolvedor do kit de ferramentas bandit, que se utilizou para escanear o código, expresou a opinión de que debido ao número bastante elevado de falsos positivos, os resultados da análise non se poden considerar directamente vulnerabilidades sen unha revisión manual adicional de cada problema.

Por exemplo, o analizador considera que o uso de xeradores de números aleatorios e algoritmos de hash non fiables, como MD5, é un problema de seguridade, mentres que no código tales algoritmos poden usarse para fins que non afectan á seguridade. O analizador tamén considera un problema calquera procesamento de datos externos en funcións non seguras como pickle, yaml.load, subprocess e eval, pero este uso non implica necesariamente unha vulnerabilidade e, de feito, o uso destas funcións pódese implementar sen unha ameaza de seguridade. .

Entre as probas utilizadas no estudo:

  • Usando funcións potencialmente inseguras exec, mktemp, eval, mark_safe, etc.
  • Configuración insegura dos dereitos de acceso aos ficheiros.
  • Conectar un socket de rede a todas as interfaces de rede.
  • Uso de contrasinais e claves estrictamente especificados no código.
  • Usando un directorio temporal predefinido.
  • Usando pasar e continuar nos manejadores de excepcións de estilo catch-all;
  • Lanzamento de aplicacións web baseadas no marco web Flask co modo de depuración activado.
  • Usando métodos de deserialización de datos inseguros.
  • Usa funcións hash MD2, MD4, MD5 e SHA1.
  • Uso de cifrados DES inseguros e modos de cifrado.
  • Uso dunha implementación HTTPSConnection insegura nalgunhas versións de Python.
  • Especificando o esquema file:// en urlopen.
  • Utilización de xeradores de números pseudoaleatorios na realización de tarefas criptográficas.
  • Usando o protocolo Telnet.
  • Usando analizadores XML inseguros.

Ademais, pódese observar que se detectaron 8 paquetes maliciosos no directorio PyPI. Antes da eliminación, os paquetes problemáticos descargáronse máis de 30 mil veces. Para ocultar a actividade maliciosa e evitar os avisos dos analizadores estáticos simples en paquetes, codificáronse bloques de código usando Base64 e executáronse despois de decodificalos mediante unha chamada de eval.

Os paquetes noblesse, genesisbot son, sufrir, noblesse2 e noblessev2 conteñen código para interceptar números de tarxetas de crédito e contrasinais almacenados nos navegadores Chrome e Edge, así como transferir tokens de conta desde a aplicación Discord e enviar datos do sistema, incluídas capturas de pantalla do contido da pantalla . Os paquetes pytagora e pytagora2 incluían a capacidade de cargar e executar código executable de terceiros.

Fonte: opennet.ru

Engadir un comentario