Versões 1.14.1 e 0.30.4 do axios receberam a dependência maliciosa plain-crypto-js, que executava um postinstall para implantar cargas em Windows, macOS e Linux.
| Componente | Pacote NPM axios nas versões 1.14.1 e 0.30.4, com inclusão da dependência maliciosa plain-crypto-js. |
| Vetor | Execução automática de postinstall no package.json da dependência plain-crypto-js, acionando o dropper setup.js durante a instalação pelo NPM. |
| Impacto | Implantação do backdoor WAVESHAPER.V2 em Windows, macOS e Linux, com enumeração de sistema, execução de comandos, listagem recursiva de diretórios e persistência em Windows. |
| Prioridade | Auditar lockfiles, caches e ambientes de build para axios 1.14.1 ou 0.30.4 e plain-crypto-js 4.2.0 ou 4.2.1; isolar hosts afetados e rotacionar segredos acessíveis. |
| Versões | Evitar axios 1.14.1 e 0.30.4; usar versões conhecidas como seguras, como 1.14.0 ou anterior e 0.30.3 ou anterior, conforme a árvore de dependências. |
| Artefatos | setup.js, package.json, package.md, %PROGRAMDATA%\wt.exe, %TEMP%\6202033.ps1, /Library/Caches/com.apple.act.mond, /tmp/ld.py, %PROGRAMDATA%\system.bat e chave HKCU:\Software\Microsoft\Windows\CurrentVersion\Run\MicrosoftUpdate. |
| IoCs | C2 sfrclak[.]com, http://sfrclak[.]com:8000, http://sfrclak[.]com:8000/6202033, IP 142.11.206.73 e infraestrutura suspeita 23.254.167.216. |
Um ataque de cadeia de suprimentos atingiu o pacote NPM axios, biblioteca amplamente usada em aplicações JavaScript para simplificar requisições HTTP. Entre 2026-03-31T00:21:00Z e 2026-03-31T03:20:00Z, as publicações 1.14.1 e 0.30.4 passaram a incluir a dependência plain-crypto-js. Essa dependência não atuava como biblioteca criptográfica legítima no fluxo observado: ela servia como veículo de entrega para um dropper JavaScript ofuscado, executado automaticamente durante a instalação do pacote por meio do gancho postinstall. O risco operacional é alto porque a execução ocorre no momento em que desenvolvedores, servidores de CI/CD ou ambientes de build resolvem dependências, antes de qualquer revisão manual do código da aplicação consumidora.
A intrusão envolveu indícios de comprometimento da conta mantenedora associada ao pacote, incluindo alteração do e-mail para ifstap@proton.me. O componente central da carga inicial foi o setup.js, rastreado como SILKBELL, com SHA256 e10b1fa84f1d6481625f741b69892780140d4e0e7769e7491e5f4d894c2e0e09. O script identifica o sistema operacional, seleciona uma rotina por plataforma e baixa uma variante de WAVESHAPER.V2. O malware se comunica com infraestrutura C2 na porta 8000, usa beacons JSON codificados em Base64 e mantém polling em intervalos de 60 segundos. A atribuição técnica liga a atividade ao ator UNC1069, associado à Coreia do Norte e financeiramente motivado, com base na evolução do backdoor WAVESHAPER, em sobreposição de infraestrutura e em padrões de comunicação incomuns.
O ponto de execução inicial fica no package.json da dependência maliciosa, onde o campo scripts define postinstall como node setup.js. Quando o NPM instala a versão comprometida do axios, o gerenciador executa esse comando em segundo plano como parte normal do ciclo de instalação. O setup.js carrega dinamicamente módulos como fs, os e execSync, usa uma rotina de ofuscação baseada em XOR e Base64 para esconder URL de C2 e comandos por sistema operacional, e reduz indicadores estáticos óbvios antes da execução. Após acionar a etapa seguinte, tenta remover o próprio arquivo, excluir o package.json alterado e restaurar uma cópia armazenada como package.md, o que dificulta análise retrospectiva quando apenas o diretório final de node_modules é preservado.
No Windows, o dropper procura powershell.exe, copia o binário legítimo para %PROGRAMDATA%\wt.exe e baixa um script PowerShell para %TEMP%\6202033.ps1 usando curl com método POST e corpo packages.npm.org/product1. A execução usa flags de janela oculta e bypass de política de execução, combinando cmd.exe, curl, o binário copiado e posterior remoção de artefatos. A persistência observada nessa plataforma cria %PROGRAMDATA%\system.bat como arquivo oculto e adiciona a entrada MicrosoftUpdate em HKCU:\Software\Microsoft\Windows\CurrentVersion\Run, permitindo relançamento no logon do usuário. Em macOS, a rotina baixa um binário Mach-O para /Library/Caches/com.apple.act.mond usando o corpo packages.npm.org/product0, ajusta permissões com chmod 770 e executa via /bin/zsh em segundo plano. Em Linux, a carga é um backdoor Python gravado em /tmp/ld.py com corpo POST packages.npm.org/product2.
As variantes entregues convergem para WAVESHAPER.V2, que opera como RAT. A comunicação usa o C2 recebido por argumento de linha de comando, beacons JSON codificados em Base64 e o User-Agent fixo mozilla/4.0 (compatible; msie 8.0; windows nt 5.1; trident/4.0). Depois do beacon inicial, o implante consulta o servidor a cada 60 segundos e interpreta a resposta como instrução. Entre os comandos conhecidos estão kill, para encerrar o processo; rundir, para retornar listagens detalhadas de diretórios a partir de ReqPaths; runscript, para decodificar e executar AppleScript; e peinject, para decodificar, gravar, assinar de forma ad hoc e executar um binário arbitrário com parâmetros opcionais. No Windows, a variante também aceita execução de PowerShell quando não recebe script separado, e pode gravar scripts em arquivo dependendo do tamanho do conteúdo recebido.
A exposição principal envolve estáções de desenvolvimento, agentes de CI/CD, runners efêmeros, imagens de build, caches compartilhados e repositórios internos que tenham resolvido axios 1.14.1 ou 0.30.4 durante a janela de comprometimento ou que tenham armazenado os pacotes em caches locais. O risco não se limita a projetos que declaram axios diretamente; aplicações e ferramentas que recebem axios por dependência transitiva também podem ter acionado o postinstall, especialmente quando lockfiles estavam ausentes, quando builds aceitavam resolução por latest ou quando proxies corporativos de NPM espelhavam versões recém-publicadas sem validação adicional.
A consequência técnica mais sensível é a execução no contexto do usuário ou serviço que instalou as dependências. Em workstations, isso pode expor chaves de API, tokens de nuvem, credenciais de registries, arquivos .npmrc, configurações de CLI, diretórios de código-fonte e segredos em variáveis de ambiente. Em pipelines, o impacto inclui acesso a tokens de publicação, credenciais de implantação, chaves de assinatura, permissões de repositório e variáveis protegidas carregadas durante jobs. Como o backdoor possui enumeração de diretórios e execução remota de comandos, qualquer host que tenha executado plain-crypto-js deve ser tratado como comprometido até que a análise confirme o contrário.
- Projetos com
package-lock.json,yarn.lockoupnpm-lock.yamlapontando paraaxios1.14.1,axios0.30.4,plain-crypto-js4.2.0ouplain-crypto-js4.2.1. - Estáções Windows com
%PROGRAMDATA%\wt.exe,%TEMP%\6202033.ps1,%PROGRAMDATA%\system.batou entradaMicrosoftUpdateemHKCU:\Software\Microsoft\Windows\CurrentVersion\Run. - Hosts macOS com
/Library/Caches/com.apple.act.mondcriado ou executado por processos descendentes denode,npm,bash,curl,osascriptouzsh. - Hosts Linux com
/tmp/ld.pycriado durante instalação de dependências e processos Python iniciados a partir de uma cadeia de execução envolvendonodeounpm.
A busca deve começar por artefatos de dependência, porque lockfiles e caches preservam evidências mesmo quando o dropper tenta limpar o diretório instalado. Equipes devem consultar repositórios e artefatos de build por plain-crypto-js, axios@1.14.1, axios@0.30.4, pelo hash do tarball 58401c195fe0a6204b42f5f90995ece5fab74ce7c69c67a24c61a057325af668 e pelo hash do setup.js e10b1fa84f1d6481625f741b69892780140d4e0e7769e7491e5f4d894c2e0e09. Em ambientes com proxy de pacotes, também é necessário revisar logs de cache, horários de primeira solicitação e quais projetos consumiram as versões comprometidas. A ausência do arquivo setup.js no diretório final não elimina o incidente, porque a rotina tenta apagar o próprio arquivo e restaurar o package.json original.
Na telemetria de endpoint, a cadeia de processo é um sinal forte: node ou npm gerando shells, curl, powershell.exe, cmd.exe, wscript.exe, osascript, bash, zsh ou python durante instalação de dependências deve ser investigado. Em Windows, eventos de criação de %PROGRAMDATA%\wt.exe são especialmente relevantes, pois o nome imita o Windows Terminal, mas o arquivo resulta de uma cópia de powershell.exe para local de staging. Também devem ser correlacionados comandos com -ep bypass, execução oculta, criação de system.bat e escrita em Run com nome MicrosoftUpdate. Em macOS, o caminho /Library/Caches/com.apple.act.mond e o uso de chmod 770 por processo descendente de instalação são indicadores de alta fidelidade. Em rede, qualquer conexão para sfrclak[.]com, 142.11.206.73, http://sfrclak[.]com:8000/6202033 ou infraestrutura adjacente 23.254.167.216 deve ser tratada como comunicação de C2 ou tentativa de estágio.
- Consultas em lockfiles por
plain-crypto-js,4.2.0,4.2.1,axios1.14.1eaxios0.30.4. - Processos
nodeounpmcriandocurl,powershell.exe,cmd.exe,wscript.exe,osascript,bash,zshoupython. - Tráfego HTTP para
sfrclak[.]comou142.11.206.73na porta8000, especialmente com beacons em intervalos próximos de 60 segundos. - Strings de detecção como
packages.npm.org/product1,packages.npm.org/product0,packages.npm.org/product2,rsp_peinject,rsp_runscript,rsp_rundir,OrDeR_7077eString.fromCharCode(S^a^333).
A resposta deve priorizar contenção de execução e proteção de segredos. Sistemas que instalaram as versões comprometidas devem ser isolados da rede, preservados para análise e reconstruídos a partir de estado confiável quando houver confirmação de execução do postinstall. A simples remoção do pacote não é suficiente, porque a carga secundária pode persistir fora de node_modules, especialmente em Windows por meio de %PROGRAMDATA%\system.bat e da chave Run. Depois da contenção, credenciais presentes no host, no ambiente de build ou no job de CI/CD precisam ser rotacionadas: tokens NPM, chaves de nuvem, credenciais de SaaS, segredos de repositório, tokens de implantação e chaves carregadas em variáveis de ambiente durante o build entram no escopo se o host executou a dependência maliciosa.
No controle de dependências, organizações devem impedir o uso de axios 1.14.1 e 0.30.4, fixar versões conhecidas em lockfiles e configurar registries corporativos para servir apenas versões aprovadas, como 1.14.0 ou anterior e 0.30.3 ou anterior quando compatíveis com a aplicação. Caches de npm, yarn e pnpm em workstations, servidores de build e proxies internos devem ser limpos ou invalidados para evitar reinstalação. Pipelines que resolvem dependências dinamicamente devem ser pausados até que lockfiles sejam revisados, a resolução por latest seja removida e a árvore transitiva seja recalculada de forma reprodutível. Para reduzir impacto de ataques semelhantes, ambientes de desenvolvimento devem isolar instalação de pacotes em contêineres ou sandboxes, limitar acesso ao sistema de arquivos do host e mover segredos em texto claro para mecanismos de cofre ou chaveiro do sistema, como uso de aws-vault quando aplicável.
- Bloquear
sfrclak[.]com,http://sfrclak[.]com:8000,http://sfrclak[.]com:8000/6202033,142.11.206.73e monitorar23.254.167.216. - Remover ou invalidar caches locais e compartilhados de
npm,yarnepnpmdepois de confirmar versões aprovadas nos lockfiles. - Caçar e remover persistência em Windows:
%PROGRAMDATA%\system.bat,%PROGRAMDATA%\wt.exee valorMicrosoftUpdateemHKCU:\Software\Microsoft\Windows\CurrentVersion\Run. - Reconstruir hosts comprometidos a partir de imagem confiável e rotacionar todos os segredos acessíveis ao usuário, serviço ou pipeline que executou a instalação.
- Aplicar pinagem de dependências, revisão de pacotes transitivos, bloqueio de scripts de instalação quando viável e alertas para processos de shell iniciados por gerenciadores de pacotes.
0 Comentários