53 pacotes maliciosos no RubyGems e npm roubam credenciais e carteiras de criptomoedas

Pesquisadores de segurança identificaram uma campanha de typosquatting que distribuiu pacotes maliciosos nos ecossistemas RubyGems e npm para infectar computadores Windows e roubar credenciais de navegadores, carteiras de criptomoedas, seed phrases, dados do Telegram e outras informações sensíveis.
A atividade foi descoberta pela OpenSourceMalware em 15 de agosto de 2026 e recebeu o nome de StubMaker. Inicialmente, a investigação encontrou 16 pacotes maliciosos publicados no RubyGems. Uma atualização posterior revelou que o mesmo responsável também distribuiu 37 pacotes no npm, totalizando 53 pacotes associados à campanha.
No RubyGems, foram identificados os pacotes ubnuler, ubnlder, ri18nr, reaker, rakier, orakw, joxn, ise18n, ioe18n, ie18u, iai8n, i1l8n, i18om, activesupmport, brumdler e brundlef. Segundo os pesquisadores, os nomes tentavam imitar dependências Ruby populares por meio de pequenos erros de digitação, técnica conhecida como typosquatting.
Os 16 gems foram publicados por contas identificadas como "mod8rz41mje", associada ao nome Riley Miller, e "rbq95bwt6q", vinculada a Alex Davis. Os pacotes já foram removidos do RubyGems.
Em pelo menos dois casos, brumdler e brundlef, os invasores também exploraram um comportamento do RubyGems que permite que um namespace seja reivindicado novamente depois que todas as versões anteriores de um gem são removidas. Os pacotes haviam sido originalmente publicados por outra conta antes de serem recuperados pelos responsáveis pela campanha.
Jenn Gile, cofundadora da OpenSourceMalware, afirmou que essa característica, combinada com a possibilidade de preencher o campo de autor sem validação, facilitou a operação. Segundo ela, depois que um gem malicioso era removido, os invasores podiam criar outra conta e publicar uma nova versão usando o mesmo nome.
O campo "Author" também podia receber qualquer texto, sem precisar corresponder ao proprietário da conta. Com isso, os responsáveis atribuíram autores diferentes aos pacotes para tentar fazer com que parecessem não relacionados, embora vários deles fossem controlados pelas mesmas contas.
A cadeia de ataque do StubMaker explora o arquivo "extconf.rb", normalmente usado durante a instalação de gems que possuem extensões nativas escritas em linguagens como C, C++ ou Rust. O arquivo é executado automaticamente durante a instalação do pacote, de forma semelhante aos lifecycle hooks utilizados pelo npm.
No ataque, o "extconf.rb" funciona como mecanismo para baixar um loader de aproximadamente 22 MB desenvolvido em Rust e hospedado em uma release do GitHub. Esse loader executa um infostealer escrito em Go e identificado como "wincfg". A conta do GitHub utilizada na operação já não está acessível.
O malware incorpora ainda a DLL "abe_payload.dll", usada para extrair credenciais de navegadores baseados em Chromium contornando as proteções App-Bound Encryption (ABE) introduzidas pelo Google. Entre os navegadores visados estão Google Chrome, Microsoft Edge, Brave, Opera, Opera GX, Vivaldi, Yandex, Avast, AVG e CCleaner Browser.
Além das credenciais, o infostealer coleta dados de extensões, histórico de navegação e números de cartões de pagamento. O malware também procura carteiras de criptomoedas e seed phrases, extrai informações do Telegram Desktop, reúne dados do sistema e consulta o serviço api.ipify.org para identificar o endereço IP público da vítima.
As informações roubadas são compactadas em um arquivo ZIP protegido por senha e enviadas ao serviço Gofile. O link resultante para download é então transmitido aos responsáveis pelo ataque por meio de uma conexão HTTP sem criptografia para a infraestrutura associada ao domínio "dresslee.com".
O nome StubMaker está relacionado à forma como o malware mascara sua execução. Em vez de realmente compilar uma extensão, o pacote cria um Makefile com operações vazias e scripts para Unix e Windows que apenas retornam sucesso. Dessa forma, a instalação aparenta ter concluído normalmente enquanto o download e a execução do malware ocorrem no próprio hook do instalador.
Campanha também atingiu o npm
A investigação foi posteriormente ampliada após pesquisadores identificarem 37 pacotes npm relacionados à mesma operação. Eles utilizavam um hook "postinstall" para baixar o mesmo loader hospedado no GitHub e instalar o infostealer em sistemas Windows.
Os pacotes imitavam bibliotecas populares como axios, chalk, commander, lodash, typescript e react. Entre os nomes utilizados estavam axois-http, axious-core, chalk-core, chalk-lib, comand, comander-cli, commander-lib, loadashjs, lodash-lib, typescirpt-cli, typscript-cli, typescriptt-cli e raectjs, além de diversas outras variações com erros de digitação.
Segundo a OpenSourceMalware, trata-se do mesmo responsável operando duas frentes de typosquatting contra ecossistemas diferentes, compartilhando o mesmo payload e a mesma infraestrutura de comando e controle.
Apesar da finalidade semelhante, a execução apresentou diferenças. Os gems utilizavam "extconf.rb", enquanto os pacotes npm recorriam ao hook "postinstall". No RubyGems, a URL do loader era codificada em Base64; no npm, o instalador empregava XOR com chave fixa para ocultá-la.
O padrão de publicação também mudou. Os gems foram distribuídos durante dois dias, enquanto os pacotes npm foram enviados em apenas oito minutos por cinco contas diferentes. De acordo com Gile, a estratégia no npm reduzia a dependência de uma única conta, dificultando a interrupção de todo o lote caso apenas um perfil fosse detectado.
Os pacotes npm foram publicados em 16 de agosto e também já foram removidos. A OpenHack recomenda que usuários que tenham instalado qualquer um deles em uma máquina Windows enquanto estavam disponíveis isolem o equipamento, troquem as credenciais potencialmente expostas e removam as bibliotecas maliciosas.



