Vulnerabilidade no PyPi permite sequestro de pacotes excluídos para espalhar malwares
A falha permite que um pacote seja carregado com o mesmo nome de outro previamente excluído, resultando em infecção automática caso esse pacote, anteriormente confiável, seja baixado por ferramentas de integração contínua, como o Jenkins.
Os pesquisadores explicam que, ao remover um projeto do PyPi, os nomes dos pacotes utilizados se tornam imediatamente disponíveis para outros usuários. Se um indivíduo mal-intencionado reutilizar o nome, um desenvolvedor pode inadvertidamente baixar uma versão maliciosa, sem perceber que ela não é mais segura.
Essa técnica é potencialmente mais perigosa do que o typosquatting—que consiste em carregar um pacote com um nome similar a um popular e confiável—pois não há nenhuma indicação de que um pacote previamente seguro esteja sob nova propriedade.
Os pesquisadores testaram essa abordagem criando um pacote, excluindo-o e, em seguida, substituindo-o por um novo, com o mesmo nome, mas de uma conta diferente e com um número de versão mais alto. Quando executaram o comando "pip" para listar pacotes desatualizados, o sistema exibiu o "pacote impostor como 'apenas uma nova versão' do pacote original", segundo eles.
A equipe também reservou um pequeno subconjunto dos nomes de pacotes vulneráveis mais populares, utilizando pacotes vazios para prevenir o sequestro. Em três meses, esses pacotes vazios foram baixados quase 200.000 vezes, indicando que "há scripts e trabalhos desatualizados que ainda buscam pelos pacotes excluídos, ou usuários que baixaram manualmente esses pacotes devido ao typosquatting".
Até o momento, a equipe do PyPi não se pronunciou sobre a vulnerabilidade. Recomenda-se que as rotinas de CI/CD sejam configuradas para evitar a instalação de pacotes que já foram removidos do repositório.
Estima-se que cerca de 300 pacotes sejam removidos do PyPi mensalmente, com mais de 22 mil vulneráveis a sequestro.