Pacotes Maliciosos npm Visam Strapi CMS com Backdoors e Roubo de Credenciais
Pesquisadores de cibersegurança descobriram 36 pacotes maliciosos no registro npm, disfarçados de plugins para **Strapi CMS**. Esses pacotes contêm payloads maliciosos projetados para explorar bancos de dados **Redis** e **PostgreSQL**, implantar reverse shells, roubar credenciais e estabelecer implantes persistentes.

**SafeDep** relatou que, "Cada pacote contém três arquivos (package.json, index.js, postinstall.js), não possui descrição, repositório ou página inicial, e utiliza a versão 3.6.8 para parecer um plugin comunitário maduro do Strapi v3."
### Disfarçados de Plugins Legítimos
Os pacotes maliciosos seguem uma convenção de nomenclatura começando com "strapi-plugin-" seguida por termos como "cron", "database" ou "server". Isso tem o objetivo de enganar os desenvolvedores para que os baixem. É importante notar que os plugins oficiais do Strapi são escopados sob "@strapi/".
Esses pacotes foram carregados por quatro contas fantoches: "umarbek1233", "kekylf12", "tikeqemif26" e "umar_bektembiev1" durante um período de 13 horas. Os pacotes identificados incluem:
* strapi-plugin-cron
* strapi-plugin-config
* strapi-plugin-server
* strapi-plugin-database
* strapi-plugin-core
* strapi-plugin-hooks
* strapi-plugin-monitor
* strapi-plugin-events
* strapi-plugin-logger
* strapi-plugin-health
* strapi-plugin-sync
* strapi-plugin-seed
* strapi-plugin-locale
* strapi-plugin-form
* strapi-plugin-notify
* strapi-plugin-api
* strapi-plugin-sitemap-gen
* strapi-plugin-nordica-tools
* strapi-plugin-nordica-sync
* strapi-plugin-nordica-cms
* strapi-plugin-nordica-api
* strapi-plugin-nordica-recon
* strapi-plugin-nordica-stage
* strapi-plugin-nordica-vhost
* strapi-plugin-nordica-deep
* strapi-plugin-nordica-lite
* strapi-plugin-nordica
* strapi-plugin-finseven
* strapi-plugin-hextest
* strapi-plugin-cms-tools
* strapi-plugin-content-sync
* strapi-plugin-debug-tools
* strapi-plugin-health-check
* strapi-plugin-guardarian-ext
* strapi-plugin-advanced-uuid
* strapi-plugin-blurhash
### Execução de Código Malicioso
O código malicioso está embutido no hook de script `postinstall`. Este script é executado automaticamente durante o processo de "npm install", sem exigir interação do usuário. Ele roda com os privilégios do usuário que está instalando, potencialmente abusando de acesso root em ambientes CI/CD e contêineres **Docker**.
### Evolução do Payload
Os payloads evoluíram ao longo da campanha:
1. **Exploração do Redis:** Armamentação de instâncias Redis acessíveis localmente para execução remota de código, injetando uma entrada crontab. Isso baixa e executa um script shell de um servidor remoto, escrevendo um web shell PHP e um reverse shell Node.js via SSH no diretório de uploads público do Strapi. Também tenta escanear o disco em busca de segredos como **Elasticsearch** e frases de semente de carteiras de criptomoedas, e exfiltra um módulo de API **Guardarian**.
2. **Fuga de Contêiner Docker e Reverse Shells:** Combinando a exploração do Redis com a fuga de contêiner Docker para escrever payloads de shell no host. Lança um reverse shell Python direto e escreve um gatilho de reverse shell no diretório node_modules da aplicação via Redis.
3. **Implantação de Reverse Shell:** Implantação de um reverse shell e escrita de um downloader de shell via Redis.
4. **Coleta de Credenciais:** Escaneamento do sistema em busca de variáveis de ambiente e strings de conexão com bancos de dados PostgreSQL.
5. **Reconhecimento Expandido:** Coleta de dumps de ambiente, configurações do Strapi, extração de banco de dados Redis, mapeamento de topologia de rede e segredos Docker/Kubernetes, chaves criptográficas e arquivos de carteiras de criptomoedas.
6. **Exploração do PostgreSQL:** Conexão com o banco de dados PostgreSQL do alvo usando credenciais hard-coded e consulta a tabelas específicas do Strapi em busca de segredos. Também despeja padrões relacionados a criptomoedas e tenta se conectar a seis bancos de dados Guardarian.
7. **Implante Persistente:** Implantação de um implante persistente para manter acesso remoto a um nome de host específico ("prod-strapi").
8. **Roubo de Credenciais:** Facilitação do roubo de credenciais escaneando caminhos hard-coded e gerando um reverse shell persistente.
SafeDep afirmou: "Os oito payloads mostram uma narrativa clara: o atacante começou agressivamente (Redis RCE, fuga de Docker), descobriu que essas abordagens não estavam funcionando, mudou para reconhecimento e coleta de dados, usou credenciais hard-coded para acesso direto ao banco de dados e, finalmente, se estabeleceu com acesso persistente e roubo de credenciais direcionado."
### Ataque Direcionado?
A natureza dos payloads, o foco em ativos digitais e o uso de credenciais de banco de dados hard-coded e nome de host sugerem um ataque direcionado contra uma plataforma de criptomoedas. Usuários que instalaram algum dos pacotes listados devem assumir comprometimento e rotacionar todas as credenciais.
### Ataques Recentes à Cadeia de Suprimentos
Esta descoberta coincide com um aumento em ataques à cadeia de suprimentos visando o ecossistema de código aberto:
* Uma conta **GitHub** chamada "ezmtebo" submeteu mais de 256 pull requests contendo um payload de exfiltração de credenciais, roubando segredos através de logs de CI e comentários de PR.
* A organização GitHub "dev-protocol" foi sequestrada para distribuir bots de negociação **Polymarket** maliciosos com dependências npm typosquatted que roubam chaves privadas de carteira e abrem um backdoor SSH.
* O pacote **Emacs** "kubernetes-el/kubernetes-el" foi comprometido, explorando a vulnerabilidade Pwn Request em seu fluxo de trabalho GitHub Actions para roubar o GITHUB_TOKEN do repositório e injetar código destrutivo.
* O fluxo de trabalho GitHub Actions "xygeni/xygeni-action" foi comprometido usando credenciais de mantenedor roubadas para plantar um backdoor de reverse shell. **Xygeni** desde então implementou novos controles de segurança.
* O pacote npm "mgc" foi comprometido via takeover de conta para enviar versões maliciosas contendo um script dropper que busca payloads específicos da plataforma – um trojan Python para Linux e uma variante PowerShell para Windows. Este ataque compartilha sobreposição com o recente ataque à cadeia de suprimentos visando **Axios**, atribuído a **UNC1069**.
* Um pacote npm malicioso chamado "express-session-js" faz typosquatting de "express-session" e contém um dropper que recupera um trojan de acesso remoto (RAT).
* O pacote **PyPI** "bittensor-wallet" (versão 4.0.2) foi comprometido para implantar um backdoor que exfiltra chaves de carteira.
* Um pacote npm malicioso chamado "@azure/service-bus-node" contém um dropper que recupera um RAT do JSON Keeper para realizar roubo de dados e acesso persistente conectando-se a "216.126.237[.]71" usando a biblioteca Socket.IO.