Um atacante distribuiu uma versão maliciosa do popular pacote elementary-data Python Package Index (PyPI) para roubar dados confidenciais de desenvolvedores e carteiras de criptomoedas.
A versão problemática é a 0.23.3, e o problema se estendeu à imagem Docker devido ao fluxo de trabalho do pacote, que cria a imagem a partir do código e a carrega em um registro de contêineres para implantação.
O membro da comunidade crisperik identificou o upload malicioso e abriu uma ocorrência no GitHub do projeto no sábado, alertando o mantenedor e diminuindo o período de exposição.
Uma versão limpa de substituição, elementary-data 0.23.4 , foi disponibilizada aos usuários. No entanto, os usuários que baixaram a variante maliciosa permaneceram com a segurança comprometida.
O pacote elementary-data é uma ferramenta de observabilidade de dados de código aberto para dbt, usada principalmente por engenheiros de dados/análise que trabalham com pipelines de dados. É uma ferramenta popular no ecossistema dbt (Data Build Tool), com mais de 1,1 milhão de downloads mensais no PyPI.
O invasor explorou uma falha no fluxo de trabalho do projeto, em vez de comprometer as contas dos mantenedores, como é mais comum em atualizações maliciosas; publicou um comentário malicioso em uma solicitação de pull request que explorava uma falha de injeção de script no GitHub Actions, fazendo com que o fluxo de trabalho executasse um código shell controlado pelo atacante. Isso expôs o GITHUB_TOKEN do fluxo de trabalho, que foi então usado para forjar um commit e uma tag assinados (v0.23.3) e acionar o pipeline de lançamento legítimo do projeto.
O pipeline construiu e publicou o pacote com backdoor no PyPI, bem como uma imagem maliciosa no GitHub Container Registry, fazendo com que parecesse uma versão oficial.
A versão maliciosa continha o arquivo elementary.pth, que era executado automaticamente na inicialização para carregar um programa ladrão de segredos que tinha como alvo os seguintes tipos de dados:
- Chaves SSH, credenciais Git, credenciais de nuvem (AWS/GCP/Azure)
- Segredos do Kubernetes, Docker e CI
- Arquivos .env e tokens de desenvolvedor
- Arquivos de carteira de criptomoedas (Bitcoin, Litecoin, Dogecoin, Zcash, Dash, Monero, Ripple)
- Dados do sistema (/etc/passwd, logs, histórico do shell)
Os pesquisadores afirmam que a mesma carga útil chegou à imagem Docker do projeto, porque o “fluxo de trabalho do pacote de lançamento que faz upload para o PyPI também possui uma tarefa de construção e envio de imagem Docker”.
Os sistemas que não utilizavam versões fixadas baixavam automaticamente a versão com backdoor. Quem baixou a versão maliciosa, elementary-data==0.23.3, e as imagens com as tags ghcr.io/elementary-data/elementary:0.23.3 e :latest, deve rotacionar todos os segredos e restaurar seus ambientes a partir de um ponto seguro conhecido.

