Um ataque coordenado à cadeia de suprimentos foi descoberto, visando desenvolvedores que criam aplicativos no Strapi, um sistema de gerenciamento de conteúdo de código aberto amplamente utilizado. Trinta e seis pacotes npm maliciosos disfarçados de plugins legítimos do Strapi foram publicados no registro npm, carregando payloads projetados para explorar o Redis para execução remota de código (RCE), roubar credenciais e estabelecer acesso persistente de comando e controle em servidores de vítimas.
Descoberta e escopo do ataque
Analistas da SafeDep identificaram e documentaram a campanha em 3 de abril de 2026, após seu pipeline de análise dinâmica sinalizar strapi-plugin-events por realizar uma busca de segredos em todo o sistema de arquivos e registrar vinte e quatro conexões de saída para o servidor C2 do atacante em 144[.]31[.]107[.]231. Os pacotes foram distribuídos em quatro contas npm falsas — umarbek1233, kekylf12, tikeqemif26 e umar_bektembiev1 — todas acreditadas por serem operadas por um único ator de ameaça.
Cada pacote seguia uma estrutura de três arquivos idêntica e usava o número de versão 3.6.8 para parecer um plugin comunitário legítimo do Strapi. O código malicioso era executado automaticamente durante o npm install através de um script postinstall, sem exigir interação adicional do desenvolvedor.
Evolução dos payloads e vetor de ataque
A campanha carregava oito variantes de payload distintas, cada uma evoluindo ao longo de uma janela de treze horas — um sinal claro de que o atacante estava desenvolvendo e testando ativamente suas ferramentas contra um alvo vivo. As variantes variavam desde execução remota de código no Redis e escape de contêiner Docker nos pacotes mais antigos, até coleta de credenciais e exploração direta do banco de dados PostgreSQL nas versões posteriores.
A sexta variante, strapi-plugin-seed, conectava-se ao banco de dados PostgreSQL da vítima usando credenciais codificadas e sondava bancos de dados nomeados guardarian, guardarian_payments, exchange e custody. Referências a uma plataforma de pagamento de criptomoedas chamada "Guardarian" apareceram em múltiplos payloads desde o início, confirmando que esta era uma operação de roubo financeiro direcionada.
Implante persistente e execução sem arquivo
As duas variantes finais, ambas publicadas sob o nome de pacote strapi-plugin-api, representaram a fase mais avançada da campanha. A sétima variante, versão 3.6.8, só era ativada se o hostname do host correspondesse exatamente a prod-strapi, confirmando que o atacante já havia identificado o ambiente de produção da vítima.
Uma vez acionado, ele escrevia um agente C2 oculto chamado .node_gc.js no diretório /tmp/, iniciava-o como um processo em segundo plano desanexado e instalava uma entrada de crontab para reiniciá-lo a cada minuto se fosse encerrado. A oitava variante, versão 3.6.9, ia além ao remover a necessidade de qualquer arquivo em disco. Todo o agente C2 era passado como uma string inline para um processo node -e desanexado, deixando nenhum rastro de sistema de arquivos para ferramentas de detecção encontrarem.
Medidas de mitigação recomendadas
Organizações que usam Strapi devem auditar imediatamente os pacotes npm instalados e remover qualquer um que corresponda aos nomes maliciosos nos indicadores de comprometimento. Todas as credenciais em hosts afetados — senhas de banco de dados, chaves de API, segredos JWT e chaves privadas — devem ser rotacionadas sem demora. O administrador deve remover /tmp/.node_gc.js, /tmp/vps_shell.sh e qualquer webshell PHP do diretório de uploads.
Além disso, é necessário auditar entradas de crontab para referências node_gc ou curl e matar qualquer processo conectando-se a 144[.]31[.]107[.]231. Tokens de conta de serviço do Kubernetes expostos devem ser revogados imediatamente. A implementação de ferramentas de segurança de cadeia de suprimentos de software (SCA) é crucial para prevenir a instalação de pacotes maliciosos.
Perguntas frequentes
- Qual o objetivo do ataque? Roubo de credenciais financeiras e acesso persistente a plataformas de pagamento de criptomoedas.
- Como os pacotes foram detectados? Análise dinâmica da SafeDep identificou conexões de saída para C2 e busca de segredos.
- Como prevenir? Audite dependências npm, use ferramentas SCA e monitore tráfego de rede incomum.