Voltar para o Blog
Vulnerabilidades Críticas
36 Pacotes npm Maliciosos se Disfarçaram de Plugins do Strapi para Implantar Backdoors e Roubar Credenciais
5 de abril de 2026
#npm#supply chain#strapi#redis#postgresql#malware#CI/CD#criptomoedas#SafeDep#TeamPCP
Pesquisadores da SafeDep identificaram 36 pacotes npm falsos que imitavam plugins legítimos do Strapi CMS para explorar Redis e PostgreSQL, instalar implantes persistentes e roubar credenciais, chaves de criptomoedas e segredos de CI/CD.
Pesquisadores de segurança da SafeDep descobriram 36 pacotes maliciosos no registro npm disfarçados de plugins da comunidade do Strapi CMS. A campanha combinou exploração de Redis e PostgreSQL, escape de containers Docker, instalação de implantes persistentes e roubo de credenciais, segredos de CI/CD e chaves de carteiras de criptomoedas.
Todos os pacotes seguem o mesmo padrão de nomenclatura, começando com "strapi-plugin-" seguido de termos comuns como "cron", "database", "server" ou "health", para enganar desenvolvedores que trabalham com o ecossistema Strapi. O detalhe que pode passar despercebido: os plugins oficiais do Strapi usam o escopo "@strapi/", com a barra. Os pacotes maliciosos não têm escopo — essa diferença de um caractere é suficiente para enganar quem não está atento.
Os pacotes foram carregados por quatro contas-fantoche — "umarbek1233", "kekylf12", "tikeqemif26" e "umar_bektembiev1" — em uma janela de apenas 13 horas, o que indica coordenação deliberada para maximizar downloads antes da detecção.
## Como o ataque funciona
O código malicioso está embutido no script postinstall, que é executado automaticamente no momento do "npm install" sem nenhuma interação do usuário. O script roda com os mesmos privilégios de quem fez a instalação, o que significa que em ambientes CI/CD e containers Docker ele frequentemente opera como root.
A campanha evoluiu em pelo menos oito variantes de payload ao longo do tempo, o que revela uma estratégia adaptativa:
Na fase inicial, o ataque weaponizava instâncias Redis acessíveis localmente para execução remota de código, injetando uma entrada de crontab para baixar e executar um shell script de um servidor remoto a cada minuto. Esse script escrevia um web shell PHP e um reverse shell em Node.js no diretório público de uploads do Strapi via SSH, além de varrer o disco em busca de segredos como frases-semente de carteiras de criptomoedas.
Nas versões seguintes, os atacantes combinaram a exploração do Redis com escape de containers Docker para escrever payloads diretamente no host fora do container, lançaram um reverse shell Python direto na porta 4444 e injetaram um gatilho de reverse shell no diretório node_modules da aplicação.
Quando essas abordagens agressivas não produziram os resultados esperados, os atacantes pivotaram para reconhecimento e coleta de dados: varredura de variáveis de ambiente, strings de conexão PostgreSQL, configurações do Strapi, topologia de rede, segredos do Docker e Kubernetes, chaves criptográficas e arquivos de carteiras de criptomoedas.
A fase mais reveladora foi a exploração direta do PostgreSQL usando credenciais hard-coded para acessar tabelas específicas do Strapi e extrair padrões relacionados a criptomoedas. O uso de credenciais hard-coded sugere que os atacantes já tinham acesso prévio aos dados do alvo — o que levanta a possibilidade de que a campanha foi um ataque direcionado contra uma plataforma de criptomoedas específica, e não uma operação oportunista ampla.
A fase final foi a instalação de um implante persistente voltado para manter acesso remoto a um hostname específico chamado "prod-strapi", combinado com roubo de credenciais em caminhos hard-coded e um reverse shell persistente.
## Um padrão que se repete
A descoberta dos 36 pacotes maliciosos coincide com uma série de outros ataques à cadeia de suprimentos de código aberto identificados na mesma semana. Uma conta no GitHub chamada "ezmtebo" submeteu mais de 256 pull requests em repositórios open-source com um payload de exfiltração de credenciais. O pacote legítimo "mgc" no npm foi comprometido via takeover de conta para distribuir um dropper que detecta o sistema operacional e baixa um trojan Python para Linux ou uma variante PowerShell para Windows chamada WAVESHAPER.V2 — ataque atribuído ao grupo norte-coreano UNC1069.
Também foram encontradas extensões maliciosas do VS Code publicadas pela conta "IoliteLabs" que ficaram dormentes desde 2018 antes de serem atualizadas em março de 2026 com um backdoor multi-estágio. E o pacote PyPI "bittensor-wallet" foi comprometido para exfiltrar chaves de carteiras via HTTPS, tunelamento DNS e TLS.
O relatório da Group-IB publicado em fevereiro de 2026 resume bem o cenário: ataques de supply chain se tornaram "a força dominante que está remodelando o panorama global de ameaças cibernéticas". Repositórios como npm e PyPI viraram alvos primários, e os pipelines de desenvolvimento se tornaram canais de distribuição em larga escala para código malicioso.
## O que fazer
Quem instalou qualquer um dos 36 pacotes deve assumir comprometimento imediato e rotacionar todas as credenciais. Em ambientes de CI/CD, auditar os scripts postinstall de dependências antes de instalar é uma camada de defesa que evita boa parte desses ataques. Verificar o escopo correto dos pacotes antes de instalar — "@strapi/" em vez de "strapi-plugin-" sem escopo — é uma checagem simples que teria bloqueado essa campanha inteira.