Um invasor desconhecido usou o repositório de código PyPI para fazer com que os desenvolvedores baixassem uma dependência comprometida do PyTorch que incluía código malicioso projetado para roubar dados do sistema.
Os desenvolvedores que baixaram na semana passada as compilações noturnas do framework PyTorch de código aberto também instalaram, sem saber, uma versão maliciosa da dependência torchtriton encontrada no Python Package Index, de acordo com os mantenedores do PyTorch.
Em uma postagem de blog esta semana, PyTorch recomendou aqueles que instalaram o PyTorch nightly no Linux através do pip entre 25 de dezembro e 30 de dezembro para desinstalá-lo e usar os binários noturnos mais recentes lançados após 30 de dezembro.
Eles disseram que os desenvolvedores que usam os pacotes estáveis do PyTorch não foram afetados pelo binário malicioso.
‘A pesquisa de segurança deu errado’
No entanto, a extensão do ataque não é clara. Uma pessoa que assumiu a responsabilidade pelo incidente disse que fazia parte de um projeto de pesquisa de segurança que deu errado. Eles pediram desculpas, dizendo que erraram ao não deixar isso claro e que deletaram todos os dados que foram exfiltrados. Uma cópia da nota pode ser encontrada no final deste blog da Checkmarx.
O ataque de confusão de dependência incluiu o upload de uma cópia do archtriton – uma dependência legítima – que continha malware para o PyPI, um repositório online de pacotes para desenvolvedores Python. O pacote archtriton comprometido veio com o mesmo nome que os mantenedores do PyTorch enviam no índice de pacotes noturnos do PyTorch.
“Como o índice PyPI tem precedência, este pacote malicioso estava sendo instalado em vez da versão do nosso repositório oficial”, escreveram eles. “Este design permite que alguém registre um pacote com o mesmo nome que existe em um índice de terceiros, e o pip instalará sua versão por padrão. Este pacote malicioso tem o mesmo nome archtriton, mas adicionado em um código que carrega dados confidenciais do máquina.”
Os dados confidenciais incluem servidores de nomes, nomes de host, o nome de usuário atual e o nome do diretório de trabalho. Além disso, ele acessou uma variedade de arquivos, incluindo /etc/hosts, /etc/passwd/, os primeiros 1.000 arquivos em $HOME/*, $HOME/.gitconfige $HOME/.ssh/.
O binário malicioso carregava arquivos com tamanho de até 99.999 bytes e enviava o conteúdo para um domínio especificado.
Dependência do PyTorch envenenada com código malicioso
PyTorch – como Keras, TensorFlow e Jax – é uma estrutura que os desenvolvedores podem usar para aplicativos de aprendizado de máquina, como processamento de linguagem natural e visão computacional. É baseado na biblioteca Torch e foi desenvolvido pela Meta AI, embora agora esteja sob os auspícios da Linux Foundation.
Os mantenedores do PyTorch tomaram várias medidas para corrigir o problema, incluindo remover o archtriton como uma dependência dos pacotes noturnos e substituí-lo por pytorch-triton. Além disso, eles registraram um pacote fictício no PyPI para evitar ataques semelhantes.
Todos os pacotes noturnos que dependem do archtriton foram removidos dos índices de pacotes e eles estão solicitando à equipe de segurança do PyPI uma maior propriedade do pacote archtriton e a exclusão da versão maliciosa.
O PyPI e outros repositórios de código-fonte aberto se tornaram um alvo em ataques à cadeia de suprimentos. Um pacote malicioso no PyPI foi encontrado no mês passado disfarçado de SDK legítimo do SentinelOne e Phylum em novembro identificou uma campanha distribuindo o malware W4SP por meio de pacotes PyPI.
Phishing
Durante o verão, PyPI falou sobre um ataque de phishing contra desenvolvedores usando o índice e disse que estava oferecendo chaves de segurança para autenticação de dois fatores para projetos com mais downloads nos últimos seis meses.
Em abril, a Open Source Security Foundation disse que criou um grupo de trabalho baseado na comunidade para abordar a questão da segurança dos repositórios de software.
“Este ataque é o primeiro ataque de confusão de dependência significativo conhecido no ecossistema PyPi”, escreveu Zack Tzachi, chefe da cadeia de suprimentos de software da Checkmarx, na postagem do blog. “Os ataques de confusão de dependência foram revelados pela primeira vez por Alex Birsan em 2021. Desde então, a técnica foi usada inúmeras vezes nos registros de pacotes PyPI e NPM.”
Embora os ataques às dependências de bibliotecas de software não sejam novos, eles se tornaram mais frequentes, disse Mike Parkin, engenheiro técnico sênior da Vulcan Cyber, acrescentando que a maior visibilidade deve levar a mais mitigações.
“A questão é se a correção principal recairá sobre os repositórios para garantir que as bibliotecas que eles distribuem não sejam comprometidas ou para os desenvolvedores que usam essas bibliotecas para garantir que a biblioteca esperada seja carregada”, disse Parkin.
John Bambenek, principal caçador de ameaças da Netenrich, disse ao The Register que, embora haja benefícios no software de código aberto, há pouca proteção institucional além de um esforço quase totalmente voluntário para lidar com os riscos inerentes à cadeia de suprimentos. Até que mais dinheiro seja direcionado para a questão, os problemas continuarão, disse Bambenek.