Descoberta pela primeira vez pela Sonatype, um stream de pacotes npm e PyPi maliciosos está roubando chaves SSH.
Um stream de pacotes npm e PyPi maliciosos foi encontrado roubando uma ampla gama de dados confidenciais de desenvolvedores de software nas plataformas.
A campanha começou em 12 de setembro de 2023 e foi descoberta pela primeira vez pela Sonatype, cujos analistas descobriram 14 pacotes maliciosos no npm.
O Phylum relata que após um breve hiato operacional em 16 e 17 de setembro, o ataque foi retomado e expandido para o ecossistema PyPI.
Stream de pacotes npm e PyPi maliciosos está roubando chaves SSH
Desde o início da campanha, os invasores fizeram upload de 45 pacotes em npm (40) e PyPI (5), com variantes no código indicando uma rápida evolução no ataque.
A lista completa dos pacotes maliciosos distribuídos nesta campanha pode ser encontrada na seção inferior do relatório do Phylum.
No entanto, é importante notar que os seguintes pacotes utilizaram typosquatting para se parecerem com pacotes populares legítimos, o que pode induzir os desenvolvedores a instalá-los:
- Shineouts e @dynamic-form-components/shineout – imitando a popular biblioteca React “Shineout”
- apm-web-vitals – poderia passar como “APM” (monitoramento de desempenho de aplicativos) para a biblioteca “web-vitals” do Google que mede o desempenho da web
- eslint-plugin-shein-soc-raw e @spgy/eslint-plugin-spgy-fe – fingindo ser plugins ESLint
- ssc-concurrent-log-handler & sc-concurrent-log-handler – fingindo ser utilitários de registro legítimos
De acordo com Phylum, pelo menos sete ondas de ataque distintas e várias fases apresentavam modificações de código para aumentar a furtividade e adicionar alvos mais específicos.
As primeiras ondas de ataques ocorreram entre 12 e 15 de setembro, com os agentes da ameaça carregando novos conjuntos de pacotes diariamente, atingindo um total de 33 pacotes.
As ondas de ataque posteriores ocorreram em 18 de setembro (três pacotes), 20 de setembro (cinco pacotes) e 24 de setembro (4 pacotes).
Nas ondas iniciais, os pacotes possuíam rotinas de coleta e exfiltração de dados codificadas, contendo internamente o código de coleta de dados em formato de texto simples, o que os tornava suscetíveis à detecção.
As iterações intermediárias introduziram mecanismos mais complexos, como recuperação e execução do script bash de coleta de dados de um domínio externo.
Além disso, os autores adicionaram um gancho de “pré-instalação” para executar JavaScript malicioso automaticamente após a instalação.
Os pacotes mais recentes utilizavam codificação base64 para evitar a análise, que mais tarde foi atualizada para codificação base64 dupla.
Em geral, os invasores se envolveram em um processo contínuo de teste e refinamento de código e até entregaram pacotes especializados em alguns aspectos da coleta de dados mais do que em outros.
Os dados roubados pelos pacotes incluem informações confidenciais da máquina e do usuário.
Os detalhes coletados da máquina e do usuário incluem nome do host, nome de usuário, caminho atual, versão do sistema operacional, endereços IP externos e internos e versão Python para pacotes PyPI.
Esses detalhes e as configurações do Kubernetes armazenadas em arquivos kubeconfig e chaves privadas SSH em ~/.ssh/id_rsa são escritos em um arquivo de texto (ConceptualTest.txt) e enviados aos servidores dos invasores.
As informações roubadas podem ser usadas para expor as identidades reais dos desenvolvedores e dar aos invasores acesso não autorizado a sistemas, servidores ou infraestrutura acessíveis por meio das chaves privadas SSH roubadas.
Se as configurações roubadas do Kubernetes contiverem credenciais para acessar clusters, os invasores poderão modificar implantações, adicionar contêineres maliciosos, acessar dados confidenciais armazenados no cluster, mover-se lateralmente ou lançar um ataque de ransomware.
Os usuários de plataformas de distribuição de código como PyPI e npm são aconselhados a serem cautelosos com os pacotes que baixam e lançam em seus sistemas, pois há um fluxo constante de malware nesses ecossistemas.