Os invasores utilizam o ambiente de execução de JavaScript Bun para disseminar o NWHStealer

| 6 de maio de 2026
Os invasores utilizam o ambiente de execução de JavaScript Bun para disseminar o NWHStealer

Em nossapesquisa anterior, analisamos um Windows que monitoramos comoNWHStealer. Os invasores por trás desse programa estão constantemente descobrindo novos métodos para distribuí-lo. Durante nossas atividades de investigação, percebemos que os invasores estão utilizando um ambiente de execução de JavaScript chamado Bun para auxiliar na sua distribuição.

O Bun é um kit de ferramentas completo, rápido e confiável para JavaScript e TypeScript, projetado para ser uma alternativa moderna e de alto desempenho ao Node.js. Ele foi desenvolvido desde o início para simplificar o desenvolvimento web moderno, integrando várias ferramentas essenciais em um único executável. 

Sua relativa novidade também o torna atraente para os invasores. O Bun ainda não foi amplamente observado em campanhas de malware, e permite que eles incorporem código malicioso em executáveis maiores, que podem ser mais difíceis de detectar. 

O que é o NWHStealer e o que ele pode fazer? 

O NWHStealer é umprograma de roubo de dados baseado em Rust, distribuído por meio de diversos iscas e métodos de entrega. Entre eles estão scripts Node.js, instaladores MSI e, mais recentemente, carregadores de JavaScript criados com o runtime Bun.  

Muitas vezes, ele é hospedado em plataformas legítimas, como GitHub, GitLab, MediaFire, Itch.io e SourceForge, o que ajuda a disfarçá-lo como um software comum e aumenta as chances de os usuários baixá-lo. Os invasores continuam criando novos perfis e iscas para espalhar o roubador de dados. 

Depois de instalado no seu computador, o NWHStealer pode: 

  • Recolher informações do sistema, incluindo sistema operacional, hardware, software de segurança, dados do usuário e dispositivos conectados. 
  • Roubar dados de navegadores, extensões e carteiras de criptomoedas. 
  • Rouba dados de diversos aplicativos, incluindo aplicativos FTP, como FileZilla e CoreFTP, e aplicativos de mensagens, como Steam e Discord. 
  • Injetar código malicioso nos processos do navegador e executar cargas úteis adicionais (por exemplo, XMRig).
  • Tentativa de contornar o Controle de Conta de Usuário (UAC). 
  • Garanta a persistência por meio de tarefas agendadas. 
  • Obtenha novos endereços de comando e controle (C2) do Telegram. 

Como se manter seguro 

Os invasores estão constantemente adaptando suas técnicas, e o uso de ferramentas mais recentes, como o Bun, mostra como eles tentam se antecipar à detecção. 

O NWHStealer é particularmente preocupante devido à ampla disseminação e aos tipos de dados que tem como alvo. Dados roubados do navegador, senhas salvas e informações de carteiras de criptomoedas podem levar rapidamente à invasão de contas, a prejuízos financeiros e a outros riscos de segurança. 

Aqui estão algumas maneiras simples de se manter seguro: 

  • Baixe software apenas de sites oficiais. 
  • Tenha cuidado ao fazer downloads de plataformas como GitHub, SourceForge ou plataformas de compartilhamento de arquivos, a menos que você confie na fonte. 
  • Os invasores continuam criando novos perfis para distribuir esse programa malicioso em várias plataformas. Verifique o perfil do desenvolvedor ou editor, sua reputação e há quanto tempo ele existe ao baixar algo de sites de hospedagem de arquivos ou blogs. 
  • Verifique a estrutura dos arquivos compactados para garantir que o conteúdo, as imagens e os arquivos de texto correspondam ao que você baixou. Verifique também o nome do arquivo compactado, pois eles geralmente seguem padrões reconhecíveis. 
  • Verifique o editor e a assinatura do arquivo antes de executá-lo. 


Dica profissional: Instale Malwarebytes Browser Guard para bloquear sites maliciosos antes que eles sejam carregados. 


Análise técnica

O novo método de distribuição: Bun JavaScript Runtime 

De acordo com seu site oficial, o Bun é um kit de ferramentas completo para JavaScript, TypeScript e JSX. Ele foi desenvolvido do zero em Zig e é alimentado pelo mecanismo JavaScriptCore da Apple, com foco em inicialização rápida e baixo consumo de memória.

O pão é composto por quatro ingredientes principais: 

  • JavaScript Runtime:um ambiente de execução de JavaScript projetado para substituir diretamente o Node.js. 
  • Gerenciador de pacotes: umaalternativa rápida ao npm. 
  • Test Runner: umexecutor integrado e compatível com o Jest que executa testes muito mais rapidamente do que os executores padrão. 
  • Bundler: substituiferramentas como Webpack, Vite ou esbuild para empacotar código. 

Em campanhas recentes, detectamos que o NWHStealer está sendo distribuído por meio de um pacote do Bun JavaScript Runtime.  

Como vimos em nossa pesquisa anterior, iscas relacionadas a jogos e outros tipos de software são usadas para iniciar a cadeia de infecção. Alguns dos nomes de arquivos ZIP detectados nessas campanhas recentes incluem: 

  • Softwares e truques relacionados a jogos, tais como: 
    • MOUSE_PI_Trainer_v1.0.zip
    • FiveM Mod.zip
    • VampireCrawlers_Trainer_v1.0.zip
    • MagicalPrincess_Trainer_v1.0.zip 
    • TerraTechLegion_Trainer_v1.0.zip 
  • Outros softwares, tais como: 
    • TradingView-Activation-Script-0.9.zip 
    • AutoTune 2026.zip
    • Metatune by Slate Digital 2026.zip
    • GoGoTv_Plus.zipAutodesk.zip

No caso analisado neste artigo, a cadeia de infecção começa com um arquivo que contém Installer.exe, que incorpora código JavaScript incluído no ambiente de execução do Bun. 

A pasta “DW” contém outro carregador, chamado dw.exe. Este carregador de autoinjeção é semelhante ao analisado anteriormente, mas possui uma rotina de descriptografia diferente. Este carregador não está presente em todos os arquivos ZIP analisados. 

O arquivo ZIP malicioso contém dois carregadores
O arquivo ZIP malicioso contém dois carregadores 

Readme.txt O arquivo solicita que o usuário execute manualmente dw.exe se o principal .exe o arquivo não é executado corretamente. Isso dá ao invasor duas maneiras de distribuir o programa de roubo de dados caso o servidor C2 do carregador principal do Bun esteja offline. O carregador em dw.exe funciona independentemente do carregador de JavaScript do Bun. 

O arquivo Readme dentro do arquivo ZIP
O arquivo Readme contido no arquivo ZIP
A configuração falsa das Ferramentas de Compilação exibida ao iniciar o dw.exe
A configuração falsa das Ferramentas de Compilação exibida se dw.exe é iniciado

Neste artigo, não analisamos dw.exe, já que se trata de uma variante dos carregadores anteriores. Em vez disso, vamos nos concentrar no carregador de JavaScript executado com o ambiente de execução Bun JavaScript. 

Análise do carregador de JavaScript  

O código JavaScript executado pelo ambiente de execução Bun JavaScript está dentro do .bun seção e está ofuscado.  

A seção .bun com o código JavaScript ofuscado
.bun seção com o código JavaScript ofuscado 

O código malicioso está implementado em duas partes do código: 

  • sysreq.js: realiza as verificações anti-virtualização por meio de um sistema de pontuação. 
  • memload.js: comunica-se com o servidor C2, realiza a descriptografia e carrega a próxima fase. 
Ponto de entrada do carregador de JavaScript

O carregador executa vários comandos CIM (Common Information Model) do PowerShell e comandos WMI (Windows Instrumentation) para detectar ambientes virtuais. Existem diversos controles relacionados a números de CPU, espaço em disco, resolução de tela, dispositivos USB, fabricantes e produtos de hardware, número de softwares instalados, presença de pastas específicas, como pastas do navegador, número de processos em execução e nome de usuário. Um sistema de pontuação é implementado e, com base nessa pontuação, o carregador decide se deve continuar com a infecção ou encerrá-la.

Para detectar um ambiente virtual, o carregador executa mais de 10 comandos do PowerShell, tais como: 

  • Get-CimInstance -ClassName Win32_DiskDrive | Select-Object Model  
  • Get-CimInstance -ClassName Win32_PhysicalMemory | Select-Object Manufacturer,Speed  
  • Get-CimInstance -ClassName Win32_BIOS | Select-Object Manufacturer  
  • Get-CimInstance -ClassName Win32_BaseBoard | Select-Object Manufacturer,Product  
  • Get-CimInstance -ClassName Win32_DiskDrive | Select-Object PNPDeviceID 
  • (Get-Process -ErrorAction SilentlyContinue).Count 

Os resultados são comparados com diferentes sequências de caracteres, por exemplo:

  • Indicadores de virtualização: qemu, seabios, bochs, vbox, vmware, virtualbox, kvm, xen, parallels, virtio, vmbus, red hat, edk ii
  • Nome de usuário da área de teste: sandbox, malware, vírus, amostra, vmuser, wdagutilityaccount, defaultuser0
  • MAC a ambientes virtuais

As cadeias de caracteres são descriptografadas por meio da operação XOR e da decodificação Base64; há matrizes de tuplas, e cada uma delas contém as cadeias de caracteres criptografadas e uma chave usada para a descriptografia XOR. 

Dados criptografados com chaves XOR
Dados criptografados com chaves XOR 

Várias funções lidam com a descriptografia de strings, incluindo uma que descriptografa a configuração usada na comunicação C2. Configuração parcial: 

C2 server: https://silent-harvester.cc
BUILD_ID: 0ddbfec60307
C2 Path: /api/status, /api/update

O carregador obtém e envia uma solicitação inicial para o ponto de extremidade https://C2-server/api/report com dados criptografados sobre o sistema comprometido: 

  • IP público obtido por meio de uma solicitação à API do site api.ipify.org. 
  • Informações do sistema 
  • Resultado anti-VM 
  • Captura de tela codificada em Base-64 
  • Data e hora 

Em seguida, ele faz duas solicitações HTTP GET: 

  • https://C2-server/api/status?v={BUILD_ID}, para obter a semente utilizada na derivação da chave AES. 
  • https://C2-server/api/update?v={BUILD_ID}, para obter a carga útil criptografada com o nonce AES e a tag de autenticação. 

A próxima etapa é descriptografada usando AES-256-CBC, com os dados AES retornados pelo C2 e carregados por um carregador de autoinjeção utilizando as seguintes APIs: 

  • VirtualAlloc 
  • VirtualProtect 
  • LoadLibraryA 
  • GetProcAddress 
  • RtlAddFunctionTable
  • CreateThread 
  • SearchPathA 

Essas APIs Win32 são executadas por meio do módulo Bun bun:ffi, o que permite que o JavaScript chame bibliotecas nativas. 

No final desse processo, o NWHStealer foi implantado nos casos analisados. 

Indicadores de Compromisso (IOCs) 

Domínios 

whale-ether[.]pro: Servidor C2 do NWH Stealer 

cosmic-nebula[.]cc: Servidor C2 do NWH Stealer 

silent-harvester[.]cc: Servidor Bun Loader C2 

silent-orbit[.]cc: Servidor Bun Loader C2 

support-onion[.]club: Servidor Bun Loader C2 

Hash 

d3a896f450561b2546b418b469a8e10949c7320212eb1c72b48e2b1e37c34ba5 

96fe4ddfe256dc9d2c6faea7c18e2583cd9d9c0099a4ad2cf082f569ee8379f4 

3710fb27d2032ef1eb1252ebf5c4dd516d2b2c0a83fb82c664c89e504b990fa9 

33d07aa24b217f27df6a483295c817da198e12511a6989bcc6b917feaf8e491d 

5427b4cefb329ed0e9585b3ce58a2788baf87e3b0c7221373f9bbd5f32c85b62 

308da9f49ffa1d1744e428b567792ab22712159974e9da8d8e0414ecd81de93e 

021838f30a43026084978bce187c165c6b640d8d474ec009d48078d21ec62025 

c8e96b55f13435c4b43b7209d2403f1a0e0f9deb05edc50e0f777430be693b07 

0614c4cc6375ab6bdcdd2dfa913a67d32c3e8be9b95a4a2aa09bb131b98191c8 

0020999b2e3e4d1b2cfb69e4df9440d3ce05d508573889fdc12b724ce75a0cd8 

0fa42df08cc467ec52b2d388b5575114a8ec067d13f6b1a653ec33fe879f88ca 

15f79980650393d182f81cd6e389210568aa1f5f875e515efe6cb9485d64b7fb 

20454ba58d509300fd694ae6159db4efa1b7ff965f98c29e7d087e20f96578c1 


Prêmio Escolha dos Editores da CNET 2026

De acordo com a CNET.Leia a resenha deles


Sobre o autor

Gabriele é um engenheiro de pesquisa de malware que adora combater malware. Quando não está fazendo isso, você o encontrará curtindo a natureza, a arte e os animais.