46% dos pacotes Python no repositório PyPI contêm código potencialmente inseguro

Um grupo de pesquisadores da Universidade de Turku (Finlândia) publicou os resultados de uma análise de pacotes no repositório PyPI para o uso de construções potencialmente perigosas que poderiam levar a vulnerabilidades. Durante a análise de 197 mil pacotes, foram identificados 749 mil potenciais problemas de segurança. 46% dos pacotes apresentam pelo menos um desses problemas. Entre os problemas mais comuns estão deficiências relacionadas ao tratamento de exceções e ao uso de recursos que permitem a substituição de código.

Dos 749 mil problemas identificados, 442 mil (41%) foram classificados como problemas menores, 227 mil (30%) como problemas moderados e 80 mil (11%) como perigosos. Alguns pacotes se destacam da multidão e contêm milhares de problemas: por exemplo, o pacote PyGGI identificou 2589 problemas, principalmente relacionados ao uso da construção “try-except-pass”, e o pacote appengine-sdk encontrou 2356 problemas. Um grande número de problemas também está presente nos pacotes genie.libs.ops, pbcore e genie.libs.parser.

Ressalta-se que os resultados foram obtidos com base em análises estáticas automatizadas, que não levam em consideração o contexto de aplicação de determinadas estruturas. O desenvolvedor do kit de ferramentas bandit, que foi usado para escanear o código, expressou a opinião de que, devido ao número bastante alto de falsos positivos, os resultados da varredura não podem ser considerados diretamente vulnerabilidades sem uma revisão manual adicional de cada problema.

Por exemplo, o analisador considera o uso de geradores de números aleatórios não confiáveis ​​e algoritmos de hash, como MD5, um problema de segurança, enquanto no código tais algoritmos podem ser usados ​​para fins que não afetam a segurança. O analisador também considera qualquer processamento de dados externos em funções inseguras como pickle, yaml.load, subprocess e eval como um problema, mas esse uso não envolve necessariamente uma vulnerabilidade e de fato o uso dessas funções pode ser implementado sem uma ameaça à segurança .

Entre os testes utilizados no estudo:

  • Usando funções potencialmente inseguras exec, mktemp, eval, mark_safe, etc.
  • Configuração insegura de direitos de acesso para arquivos.
  • Anexando um soquete de rede a todas as interfaces de rede.
  • Utilização de senhas e chaves estritamente especificadas no código.
  • Usando um diretório temporário predefinido.
  • Usando pass e continue em manipuladores de exceção de estilo pega-tudo;
  • Lançamento de aplicativos web baseados na estrutura web Flask com modo de depuração habilitado.
  • Usando métodos inseguros de desserialização de dados.
  • Usa funções hash MD2, MD4, MD5 e SHA1.
  • Uso de cifras DES e modos de criptografia inseguros.
  • Uso de uma implementação HTTPSConnection insegura em algumas versões do Python.
  • Especificando o esquema file:// em urlopen.
  • Uso de geradores de números pseudoaleatórios ao executar tarefas criptográficas.
  • Usando o protocolo Telnet.
  • Usando analisadores XML inseguros.

Além disso, pode-se notar que 8 pacotes maliciosos foram detectados no diretório PyPI. Antes da remoção, os pacotes problemáticos foram baixados mais de 30 mil vezes. Para ocultar atividades maliciosas e ignorar avisos de analisadores estáticos simples em pacotes, os blocos de código foram codificados usando Base64 e executados após a decodificação usando uma chamada eval.

Os pacotes noblesse, genesisbot, are, sofrimento, noblesse2 e noblessev2 contêm código para interceptar números de cartão de crédito e senhas armazenadas nos navegadores Chrome e Edge, bem como transferir tokens de conta do aplicativo Discord e enviar dados do sistema, incluindo capturas de tela do conteúdo da tela. Os pacotes pytagora e pytagora2 incluíam a capacidade de carregar e executar código executável de terceiros.

Fonte: opennet.ru

Adicionar um comentário