Extensão Windsurf IDE descarta malware via Solana Blockchain

Os pesquisadores da Bitdefender descobriram uma extensão maliciosa do Windsurf IDE (ambiente de desenvolvimento integrado) que implanta um ladrão NodeJS de vários estágios usando o blockchain Solana como infraestrutura de carga útil.

A extensão, disfarçada como uma extensão de suporte à linguagem R para Visual Studio Code, recupera JavaScript criptografado de transações blockchain, executa-o usando primitivos de tempo de execução NodeJS, elimina complementos compilados para extrair dados do Chromium, ao mesmo tempo que estabelece persistência com a ajuda de uma tarefa agendada oculta do PowerShell.

Existe uma extensão oficial e legítima chamada Suporte ao REditorprovavelmente por isso que o invasor usou um nome muito semelhante para confundir vítimas em potencial.

O ataque exclui especificamente os sistemas russos e tem como alvo ambientes de desenvolvedores, permitindo que os agentes da ameaça obtenham credenciais de alto valor.

Principais conclusões

  • Uma falsa extensão de desenvolvimento da linguagem R instalada dentro do Windsurf IDE desencadeia uma infecção por malware.
  • A extensão maliciosa do Windsurf escondeu sua verdadeira funcionalidade, descriptografando sua carga somente após a instalação, em um esforço para evitar a detecção.
  • Em vez de usar servidores tradicionais de comando e controle, os invasores recuperaram código malicioso do blockchain Solana, o que dificulta significativamente os esforços de remoção.
  • Antes de lançar o ataque, o malware verificou se a vítima estava na Rússia e, em caso afirmativo, desligou-se.
  • O objetivo do malware é a exfiltração de dados (senhas de navegador salvas, cookies de sessão e outros dados confidenciais) de navegadores baseados em Chromium.
  • Para estabelecer persistência, o malware cria uma tarefa agendada oculta do Windows, reiniciando-se por meio de um tempo de execução NodeJS integrado.
  • A campanha visa intencionalmente desenvolvedores, que frequentemente têm acesso privilegiado, chaves de API e outras credenciais de alto valor.

Descoberta de incidentes e alertas iniciais

A investigação começou depois que o Bitdefender EDR gerou várias detecções envolvendo um windsurf.exe em uma estação de trabalho corporativa.

O usuário instalou uma extensão Windsurf para auxiliar no desenvolvimento do R, um ambiente comparável ao MATLAB. A extensão foi nomeada:

reditorsupporter.r-vscode-2.8.8-universal

A infecção não dependia de um executável independente. Em vez disso, ele operava dentro do ecossistema de extensão confiável do IDE, permitindo que a lógica maliciosa persistisse apesar das detecções de endpoint vinculadas ao processo principal do aplicativo.

A extensão maliciosa dentro de .windsurf

Os investigadores examinaram manualmente o diretório de extensão do Windsurf:

.windsurf/

Dentro deste local, que armazena todas as extensões IDE, identificaram o pacote suspeito. A extensão continha um bloco JavaScript peculiar que descriptografava uma carga incorporada. O código não continha diretamente a funcionalidade maliciosa final. Em vez disso, atuou como um carregador.

Depois de descriptografada, a carga revelou um componente JavaScript de segundo estágio que iniciou verificações ambientais antes de prosseguir.

Carregador descriptografado e perfil do sistema

A primeira ação da carga descriptografada foi traçar o perfil do sistema. Ele coletou o nome de usuário atual e variáveis ​​de ambiente inspecionadas, juntamente com informações de localidade e fuso horário, e calculou o horário UTC.

O script procurou explicitamente por indicadores russos. Ele procurou por marcadores de idioma ou “russo”, comparou o fuso horário do sistema com regiões russas conhecidas, incluindo Europa/Moscou, Europa/Kaliningrado, Europa/Samara, Ásia/Yekaterinburg, Ásia/Omsk, Ásia/Krasnoyarsk, Ásia/Irkutsk, Ásia/Yakutsk, Ásia/Vladivostok, Ásia/Magadan, Ásia/Kamchatka, Ásia/Anadyr e MSK, e validou se o deslocamento UTC caiu entre +2 e +12.

function _isRussianSystem() {
let isRussianLanguage = (os.userInfo().username, process.env.LANG, process.env.LANGUAGE, process.env.LC_ALL, Intl.DateTimeFormat().resolvedOptions().locale).some(info => info && /ru_RU|ru-RU|Russian|russian/i.test(info)),
timezoneInfo = (Intl.DateTimeFormat().resolvedOptions().timeZone, new Date().toString()),
russianTimezones = ("Europe/Moscow", "Europe/Kaliningrad", "Europe/Samara", "Asia/Yekaterinburg", "Asia/Omsk",
"Asia/Krasnoyarsk", "Asia/Irkutsk", "Asia/Yakutsk", "Asia/Vladivostok", "Asia/Magadan", "Asia/Kamchatka", "Asia/Anadyr", "MSK"
),
isRussianTimezone = timezoneInfo.some(info => info && russianTimezones.some(tz => info.toLowerCase().includes(tz.toLowerCase()))),
utcOffset = -new Date().getTimezoneOffset() / 60,
isRussianOffset = utcOffset >= 2 && utcOffset <= 12;
return isRussianLanguage && (isRussianTimezone || isRussianOffset)
}
name(_isRussianSystem, "_isRussianSystem");

Se o sistema atendesse a esses critérios, a execução seria interrompida imediatamente.

Esta exclusão deliberada dos sistemas russos indica salvaguardas operacionais normalmente associadas a grupos de crimes cibernéticos com motivação financeira que procuram evitar o escrutínio interno.

Abuso de Solana RPC e recuperação remota de carga útil

Como a extensão é executada em um ambiente NodeJS e não está em área restrita, ela pode interagir livremente com o sistema operacional e a pilha de rede.

Depois de passar nas verificações de perfil do sistema, o malware iniciou solicitações POST para:

https://api.mainnet-beta.solana(.)com

Ele invocou o método Solana JSON-RPC:

getSignaturesForAddress

Em vez de entrar em contato com um servidor tradicional de comando e controle (C2), o malware usou Solana como infraestrutura descentralizada. Ele consultou transações de blockchain e recuperou dados codificados incorporados nos metadados da transação.

Quando a solicitação foi concluída, o malware recebeu buffers contendo fragmentos de carga JavaScript. Ele os decodificou e preparou para execução.

Execução dinâmica em um contexto NodeJS sem sandbox

O conteúdo recuperado consistia em JavaScript codificado em base64 em camadas com componentes de carga criptografados em AES. O carregador reconstruiu o tempo de execução malicioso dinamicamente.

Como as extensões do Windsurf operam em um ambiente NodeJS sem isolamento estrito de sandbox, o malware obteve acesso direto ao sistema de arquivos e pôde carregar módulos nativos sem restrições.

Complementos .node nativos e extração de dados de cromo

Após a execução dinâmica, o malware colocou arquivos em:

AppDataLocalTemp

Arquivos observados incluídos:

  • w.node
  • c_x64.node
  • index_ia32.node
  • DllExtractChromiumSecrets.dll

Esses arquivos são DLLs e são carregados pelo NodeJS como arquivos .node.

const addon = require('C:/Users//AppData/Local/Temp//c_x64.node');
const result = addon.extractBrowserData(browser, outputFile, showAll, decryptedData, profile);

O pesquisador confirmou que esses componentes funcionam como ladrões de credenciais.

Esses módulos nativos permitem:

  • Interação direta com perfis de navegador
  • Extração de credenciais salvas
  • Recuperação de cookies e tokens de sessão
  • Acesso a segredos criptografados do Chromium

Execução do PowerShell e persistência de tarefas agendadas

Depois de implantar os módulos roubadores nativos, o malware invocou o PowerShell para obter persistência.

O componente PowerShell ocultou sua janela de console, aproveitou chamadas de API Win32 por meio de Add-Type e criou uma tarefa agendada chamada:

UpdateApp

A tarefa executada:

Ele configurou a tarefa para ser executada na inicialização com os privilégios mais altos e ignorar as restrições da política de execução.

O script também interagiu com a seguinte entrada de registro e removeu evidências de sua existência:

HKCU:SoftwareMicrosoftWindowsCurrentVersionRun

Ele removeu entradas de registro que correspondiam a padrões de execução específicos e restabeleceu mecanismos de persistência.

Isso garantiu que, mesmo que o IDE fosse fechado, o fluxo de trabalho malicioso continuasse.

Como etapa final no estabelecimento da persistência, o script foi lançado:

C:UsersAppDataRoamingnode_x86nodenode.exe

com:

C:UsersAppDataRoamingzplnUtGindex.js

A infecção tornou-se autossustentável durante as reinicializações do sistema.

Sequência completa de infecção

→ Baixe a extensão Windsurf
→ Executar pacote NodeJS malicioso
→ Execução do PowerShell
→ Criação de tarefa agendada (persistência)
→ JavaScript Base64
→ Carga útil criptografada AES
→ Execução dinâmica
→ Recuperação remota de Solana
→ Interação do navegador via DLLs .node nativas

Conclusão

Este incidente revela como os invasores se incorporam cada vez mais em ferramentas de desenvolvimento confiáveis, em vez de depender de métodos de entrega tradicionais.

Ao disfarçar uma operação de roubo de credenciais como uma extensão R aparentemente legítima, os operadores obtiveram execução dentro do IDE de um desenvolvedor, recuperaram cargas criptografadas do blockchain Solana e implantaram módulos nativos capazes de extrair dados confidenciais do navegador.

A exclusão deliberada dos sistemas russos sugere ainda uma campanha com motivação financeira construída com salvaguardas operacionais.

Deseja saber mais sobre Segurança Digital & Antivírus Clique Aqui!

Deixe um comentário

Translate »