
Campanha StegaBin publicou 26 pacotes que simulam ferramentas de desenvolvimento, executam código na instalação e recuperam infraestrutura C2 codificada em textos no Pastebin.
| Componente | 26 pacotes maliciosos publicados no registro npm, com install.js executado durante a instalação e carga em vendor/scrypt-js/version.js. |
| Vetor | Typosquatting contra ferramentas de desenvolvedor, uso de dependências legítimas para aparência de credibilidade e resolução de C2 por textos no Pastebin. |
| Impacto | Instalação de stealer e RAT multiplataforma com persistência em VS Code, coleta de credenciais, segredos, chaves SSH, dados de navegadores, área de transferência e repositórios Git. |
| Prioridade | Bloquear instalação automática de pacotes suspeitos, revisar scripts de pós-instalação, inspecionar tráfego para Pastebin, Vercel e os endereços defangados associados. |
| Infraestrutura | C2 hospedado em 31 implantações na Vercel, com exemplo ext-checkdin.vercel[.]app e comunicação posterior com 103.106.67[.]63 nas portas 1244 e 1247. |
| Atribuição | Atividade associada à campanha Contagious Interview, no conjunto rastreado como StegaBin e vinculado ao cluster norte-coreano Famous Chollima. |
Uma nova iteração da campanha Contagious Interview expôs uma operação de supply chain no ecossistema npm baseada em 26 pacotes maliciosos direcionados a desenvolvedores. Os pacotes se apresentam como ferramentas de desenvolvimento, mas incluem uma cadeia de execução acionada durante a instalação. O ponto inicial observado é um script install.js, executado automaticamente pelo fluxo normal do npm, que transfere a execução para uma carga em vendor/scrypt-js/version.js. Esse desenho transforma uma ação rotineira de dependência em ponto de entrada para um stealer e um trojan de acesso remoto multiplataforma.
A campanha recebeu o nome StegaBin por usar textos aparentemente inofensivos no Pastebin como mecanismo de resolução de comando e controle. Em vez de gravar domínios de C2 de forma direta no pacote, o loader consulta pastes que parecem ensaios de ciência da computação e extrai caracteres em posições específicas para reconstruir endereços de infraestrutura. O método reduz a visibilidade de indicadores óbvios em análise estática e tenta fazer com que a comunicação inicial pareça acesso a conteúdo público comum. A infraestrutura decodificada leva a implantações na Vercel, descritas no contexto como 31 endpoints usados para etapas seguintes.
A operação foi associada ao cluster Famous Chollima e segue um padrão já observado contra candidatos, desenvolvedores e ambientes de engenharia. O diferencial desta rodada é a combinação de typosquatting no npm, dependências legítimas declaradas para dar aparência de pacote real, resolução de C2 por esteganografia textual e entrega de cargas para Windows, macOS e Linux. O risco principal está em estáções de trabalho de desenvolvimento, onde tokens, chaves SSH, credenciais Git, segredos em repositórios e sessões de navegador costumam coexistir com permissões amplas em plataformas internas.
Todos os pacotes identificados compartilham um comportamento central: incluem install.js e fazem com que a instalação acione código adicional em vendor/scrypt-js/version.js. O arquivo funciona como decodificador de esteganografia textual. Ele acessa conteúdo no Pastebin, remove caracteres Unicode de largura zero, lê um marcador inicial de cinco dígitos para determinar comprimento e calcula posições espaçadas dentro do texto. Os caracteres extraídos são concatenados e divididos por separadores internos para formar uma lista de domínios C2. O marcador de término descrito na amostra encerra a recuperação dos endereços.
Depois da reconstrução dos domínios, o malware consulta a infraestrutura resolvida para obter payloads específicos por sistema operacional. Esse comportamento permite que uma mesma isca npm alcance ambientes Windows, macOS e Linux sem manter todos os binários ou scripts finais dentro do pacote inicial. Um dos domínios defangados, ext-checkdin.vercel[.]app, foi observado servindo um script shell que consulta o mesmo endereço para recuperar um componente RAT. A carga subsequente estabelece comunicação com 103.106.67[.]63 na porta 1244 para aguardar instruções e pode mudar diretório corrente e executar comandos de shell, sem que seja necessário publicar aqui comandos operacionais.
A suíte implantada é modular. O módulo vs cria persistência em ambientes Visual Studio Code por meio de um tasks.json malicioso disparado quando um projeto é aberto, abusando do gatilho runOn: folderOpen. O módulo procura diretórios de configuração do VS Code nos três sistemas operacionais e grava a tarefa diretamente nesses caminhos. O módulo clip combina keylogging, rastreamento de mouse, roubo de área de transferência e acompanhamento de janela ativa, com exfiltração periódica a cada 10 minutos. O módulo j mira navegadores e carteiras de criptomoedas, incluindo Chrome, Brave, Firefox, Opera, Edge e extensões como MetaMask, Phantom, Coinbase Wallet, Binance, Trust, Exodus e Keplr; no macOS, também mira o iCloud Keychain.
Outros módulos ampliam o impacto sobre ambientes de engenharia. z enumera o sistema de arquivos e busca arquivos que correspondem a padrões predefinidos. n atua como RAT em tempo real por WebSocket persistente para 103.106.67[.]63 na porta 1247 e exfiltra dados de interesse por FTP. truffle baixa o scanner legítimo TruffleHog a partir do GitHub oficial para localizar segredos e exfiltrá-los. git coleta arquivos em diretórios .ssh, extrai credenciais Git e varre repositórios. sched reutiliza a lógica de vendor/scrypt-js/version.js como mecanismo de persistência, mantendo a capacidade de recontato e execução em etapas posteriores.
A superfície de risco principal é o fluxo de consumo de pacotes npm por desenvolvedores, pipelines e estáções usadas para revisão, build ou teste. O uso de typosquatting cria risco quando nomes de pacotes são digitados manualmente, copiados de instruções não verificadas ou aceitos sem revisão em projetos temporários. O fato de os pacotes declararem como dependência o pacote legítimo que tentam imitar aumenta a chance de o resultado parecer funcional, reduzindo suspeitas quando a instalação não falha de forma evidente.
Ambientes de desenvolvimento são particularmente sensíveis porque concentram credenciais de múltiplos domínios. Uma estáção comprometida pode ter tokens de registro de pacotes, chaves SSH, credenciais Git, extensões de navegador, carteiras, configurações de VS Code, caches de build e repositórios com segredos acidentalmente versionados. O contexto sustenta impacto de coleta e exfiltração desses artefatos pelos módulos descritos, além de controle remoto por RAT. Não há base no material recebido para afirmar exploração ativa de uma vulnerabilidade específica, vazamento público de dados corporativos ou uso de CVE; o caso é uma cadeia maliciosa de pacote e execução pós-instalação.
A presença de cargas para Windows, macOS e Linux amplia a exposição para equipes heterogêneas. A persistência via VS Code também é relevante porque se integra ao fluxo normal do editor: a ação de abrir um projeto pode disparar a tarefa maliciosa caso a configuração tenha sido implantada. Em pipelines, a execução automática de scripts npm durante instalação pode expor segredos de CI/CD se a política permitir instalação de pacotes não fixados ou execução de lifecycle scripts em jobs com variáveis sensíveis.
- Projetos que instalaram pacotes npm desconhecidos ou com nomes semelhantes a ferramentas legítimas de desenvolvimento.
- Estáções com
install.js,vendor/scrypt-js/version.js,tasks.jsoninesperado em diretórios do VS Code ou tráfego para Pastebin e Vercel no momento da instalação. - Ambientes com chaves SSH, credenciais Git, tokens de registro, segredos em repositórios, extensões de carteira ou sessões de navegador armazenadas no endpoint.
- Pipelines que permitem instalação de dependências sem lockfile confiável, sem revisão de scripts de lifecycle e com variáveis de segredo disponíveis durante o build.
A investigação deve começar por inventário de dependências e histórico de instalação. Registros de proxy, EDR, terminal e gerenciadores de pacotes podem revelar instalação de pacotes npm recém-adicionados, execução de install.js e criação de arquivos sob caminhos incomuns dentro de dependências. Como a cadeia usa Pastebin como dead drop resolver, acessos a pastes durante ou imediatamente após instalação de pacotes devem ser correlacionados com processos node, npm e shells filhos. O acesso isolado ao Pastebin não confirma comprometimento, mas a combinação com execução de lifecycle script e conexão posterior para Vercel aumenta a confiança do alerta.
No endpoint, a telemetria deve procurar criação ou alteração de tasks.json em diretórios de configuração do VS Code, especialmente quando o conteúdo usa execução no evento de abertura de pasta. Também é necessário revisar processos que iniciem conexões WebSocket persistentes ou FTP a partir de hosts de desenvolvimento. O endereço 103.106.67[.]63 e as portas 1244 e 1247 são indicadores específicos do contexto, mas a defesa não deve depender apenas deles, pois a campanha usa resolução dinâmica por textos externos e infraestrutura hospedada em Vercel.
Em repositórios e ambientes de identidade, a resposta deve correlacionar eventos de leitura anormal de .ssh, acesso a configurações Git, varredura de diretórios de código e execução de scanners de segredo em estáções que não deveriam realizar esse tipo de varredura. A presença do TruffleHog legítimo baixado durante uma cadeia suspeita deve ser tratada como comportamento ambíguo: a ferramenta é defensiva em uso normal, mas aqui aparece como componente para descoberta de segredos. Logs de navegação e extensões podem indicar acesso a perfis de Chrome, Brave, Firefox, Opera e Edge, além de diretórios de extensões de carteiras.
- Execução de
install.jsseguida pornodeacessando Pastebin, Vercel ou domínios defangados derivados de conteúdo textual. - Arquivo
vendor/scrypt-js/version.jspresente em pacote npm recém-instalado e executado como parte de lifecycle script. - Criação de
tasks.jsonem configuração do VS Code com acionamento no eventorunOn: folderOpen. - Conexões para
103.106.67[.]63nas portas 1244 ou 1247, especialmente com sessão persistente, WebSocket ou transferência FTP. - Acesso anormal a diretórios
.ssh, credenciais Git, repositórios locais, perfis de navegador, iCloud Keychain no macOS e extensões de carteira.
A contenção deve priorizar estáções e pipelines que instalaram pacotes suspeitos no período investigado. Em hosts com sinais da cadeia, a ação defensiva deve incluir isolamento de rede, preservação de evidências, coleta de árvore de processos, listagem de pacotes instalados, revisão dos diretórios do VS Code e bloqueio temporário de conexões para os indicadores conhecidos. Como a cadeia inclui coleta de chaves, credenciais Git, segredos e dados de navegador, a limpeza do endpoint sem rotação de credenciais não é suficiente.
Em engenharia, a mitigação estrutural passa por reduzir execução automática de scripts de pacotes quando ela não for necessária, aplicar lockfiles revisados, controlar fontes de pacotes, exigir revisão para novas dependências e bloquear typosquatting por política interna. Pipelines que consomem npm devem limitar privilégios de tokens, evitar exposição de segredos durante etapas de instalação e separar jobs de resolução de dependências de jobs que possuem credenciais sensíveis. Caches de dependências precisam ser invalidados quando houver suspeita de pacote malicioso, para evitar reintrodução silenciosa.
A resposta também deve revisar contas e artefatos acessíveis a partir dos endpoints afetados. Chaves SSH, tokens de registro npm, credenciais Git, tokens de CI/CD, segredos encontrados em repositórios e sessões de serviços internos devem ser rotacionados conforme escopo do host comprometido. Organizações que usam VS Code devem procurar persistência por tarefas de projeto e diferenciar configurações legítimas de automação local de arquivos criados sem aprovação. Bloqueios de rede para Pastebin ou Vercel podem reduzir parte da cadeia, mas devem ser aplicados com análise de impacto, pois esses serviços também podem ter usos legítimos; a decisão mais robusta é combinar egress control, inspeção de processo e governança de dependências.
- Inventariar instalações npm recentes e remover pacotes suspeitos, preservando cópias para análise interna quando a política permitir.
- Desabilitar ou restringir lifecycle scripts do npm em ambientes de build quando não forem necessários para o projeto.
- Revisar lockfiles, caches de dependências e jobs de CI/CD que instalaram pacotes fora de uma lista aprovada.
- Rotacionar chaves SSH, tokens Git, credenciais de registro, segredos de CI/CD e credenciais expostas em repositórios dos hosts afetados.
- Monitorar e bloquear, conforme política, acessos a
ext-checkdin.vercel[.]app,103.106.67[.]63nas portas 1244 e 1247 e padrões semelhantes de resolução C2 por Pastebin.
0 Comentários