Os atacantes utilizam o ambiente de execução JavaScript Bun para propagar o NWHStealer

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

Na nossainvestigação anterior, analisámos um Windows que identificamos comoNWHStealer. Os atacantes por trás deste programa estão constantemente a descobrir novos métodos para o distribuir. Durante as nossas atividades de deteção, reparámos que os atacantes estão a utilizar um ambiente de execução de JavaScript chamado Bun para ajudar a distribuí-lo.

O Bun é um conjunto de ferramentas completo, rápido e fiável para JavaScript e TypeScript, concebido para substituir o Node.js de forma moderna e com elevado desempenho. Foi desenvolvido de raiz para simplificar o desenvolvimento web moderno, integrando várias ferramentas essenciais num único executável. 

O facto de ser relativamente recente também o torna atraente para os atacantes. O Bun ainda não tem sido amplamente utilizado em campanhas de malware, o que permite aos atacantes incorporar código malicioso em executáveis de maior dimensão, que podem ser mais difíceis de detetar. 

O que é o NWHStealer e o que é que ele faz? 

O NWHStealer é umprograma de roubo de dados baseado em Rust, distribuído através de uma variedade de iscas e métodos de distribuição. Estes incluem scripts Node.js, instaladores MSI e, mais recentemente, carregadores JavaScript criados com o runtime Bun.  

É frequentemente alojado em plataformas legítimas, como o GitHub, o GitLab, o MediaFire, o Itch.io e o SourceForge, o que ajuda a disfarçá-lo como software normal e aumenta as hipóteses de os utilizadores o descarregarem. Os atacantes continuam a criar novos perfis e iscos para propagar o programa de roubo de dados. 

Depois de instalado no seu computador, o NWHStealer pode: 

  • Recolher informações do sistema, incluindo o sistema operativo, o hardware, o software de segurança, os dados do utilizador e os dispositivos ligados. 
  • Roubar dados de navegadores, extensões e carteiras de criptomoedas. 
  • Rouba dados de várias aplicações, incluindo aplicações FTP como o FileZilla e o CoreFTP, e aplicações de mensagens como o Steam e o Discord. 
  • Injetar código malicioso nos processos do navegador e executar cargas úteis adicionais (por exemplo, o XMRig).
  • Tentativa de contornar o Controlo de Contas de Utilizador (UAC). 
  • Assegure a persistência através de tarefas agendadas. 
  • Obtenha novos endereços de comando e controlo (C2) do Telegram. 

Como se manter seguro 

Os atacantes estão constantemente a adaptar as suas técnicas, e o uso de ferramentas mais recentes, como o Bun, demonstra como tentam antecipar-se à deteção. 

O NWHStealer é particularmente preocupante devido à amplitude da sua distribuição e aos tipos de dados que visa. Os dados de navegação roubados, as palavras-passe guardadas e as informações das carteiras de criptomoedas podem rapidamente conduzir à apropriação de contas, a perdas financeiras e a outros riscos de segurança. 

Aqui estão algumas formas simples de se manter em segurança: 

  • Faça o download de software apenas a partir de sites oficiais. 
  • Tenha cuidado com os downloads de plataformas como o GitHub, o SourceForge ou plataformas de partilha de ficheiros, a menos que confie na fonte. 
  • Os atacantes continuam a criar novos perfis para distribuir este programa malicioso em várias plataformas. Verifique o perfil do desenvolvedor ou editor, a sua reputação e há quanto tempo existe ao descarregar algo de sites de partilha de ficheiros ou de blogs. 
  • Verifique a estrutura dos arquivos compactados, para garantir que o conteúdo, as imagens e os ficheiros txt correspondem ao que descarregou. Verifique também o nome do arquivo compactado, pois estes costumam seguir padrões reconhecíveis. 
  • Verifique o editor e a assinatura do ficheiro antes de o executar. 


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 o seu site oficial, o Bun é um kit de ferramentas completo para JavaScript, TypeScript e JSX. Foi desenvolvido de raiz em Zig e funciona com o motor JavaScriptCore da Apple, com foco num arranque rápido e num baixo consumo de memória.

O pão é composto por quatro componentes principais: 

  • Runtime JavaScript:um runtime JavaScript concebido para substituir diretamente o Node.js. 
  • Package Manager: umaalternativa rápida ao npm. 
  • Test Runner: umexecutor integrado, compatível com o Jest, que executa os testes muito mais rapidamente do que os executores padrão. 
  • Bundler: substituiferramentas como o Webpack, o Vite ou o esbuild na compilação de código. 

Em campanhas recentes, detetámos que o NWHStealer está a ser distribuído através de um pacote do Bun JavaScript Runtime.  

Como vimos na nossa investigação anterior, são utilizados iscos relacionados com jogos e outro tipo de software para iniciar a cadeia de infeção. Alguns dos nomes de ficheiros ZIP detetados nestas campanhas recentes incluem: 

  • Software e truques relacionados com 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 programas, 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 ficheiro compactado 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 descodificação diferente. Este carregador não está presente em todos os ficheiros ZIP analisados. 

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

Readme.txt O ficheiro solicita ao utilizador que o inicie manualmente dw.exe se o principal .exe o ficheiro não funciona corretamente. Isto dá ao atacante duas formas 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 ficheiro «Readme» contido no arquivo ZIP
O ficheiro Readme contido no arquivo ZIP
A configuração falsa das Ferramentas de Compilação apresentada quando se inicia o dw.exe
A configuração falsa das Ferramentas de Compilação apresentada se dw.exe é iniciado

Neste artigo, não analisamos dw.exe, uma vez que se trata de uma variante dos carregadores anteriores. Em vez disso, centramos a nossa atenção no carregador JavaScript executado com o ambiente de execução Bun JavaScript. 

Análise do carregador de JavaScript  

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

A secção .bun com o código JavaScript ofuscado
.bun secçã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 através de um sistema de pontuação. 
  • memload.js: comunica com o servidor C2, realiza a descodificação e carrega a fase seguinte. 
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 detetar ambientes virtuais. Existem vários controlos relacionados com o número de CPUs, espaço em disco, resolução do ecrã, dispositivos USB, fabricantes e produtos de hardware, número de programas instalados, presença de pastas específicas, como pastas do navegador, número de processos em execução e nome de utilizador. É implementado um sistema de pontuação e, com base nessa pontuação, o carregador decide se deve continuar com a infeção ou encerrá-la.

Para detetar 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 utilizador da sandbox: sandbox, malware, vírus, amostra, vmuser, wdagutilityaccount, defaultuser0
  • MAC a ambientes virtuais

As cadeias de caracteres são descodificadas através da operação XOR e da descodificação Base64; existem matrizes de tuplas, sendo que cada uma contém as cadeias de caracteres encriptadas e uma chave utilizada para a descodificação XOR. 

Dados encriptados com chaves XOR
Dados encriptados com chaves XOR 

Existem várias funções que tratam da descodificação de cadeias de caracteres, incluindo uma que descodifica a configuração utilizada 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 um pedido inicial para o ponto de extremidade https://C2-server/api/report com dados encriptados sobre o sistema comprometido: 

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

Em seguida, efetua 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 encriptada com o nonce AES e a tag de autenticação. 

A fase seguinte é descodificada utilizando o algoritmo AES-256-CBC, com os dados AES devolvidos pelo C2 e carregados por um carregador de autoinjeção através das seguintes APIs: 

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

Estas APIs Win32 são executadas através do módulo Bun bun:ffi, o que permite ao JavaScript aceder a bibliotecas nativas. 

No final deste processo, o NWHStealer foi implementado 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

Segundo a CNET.Leia a análise deles


Sobre o autor

O Gabriele é um engenheiro de investigação de malware que adora combater o malware. Quando não está a fazer isso, pode encontrá-lo a desfrutar da natureza, da arte e dos animais.