MALFEX: malware no npm passou 14 meses sem ser detectado
MALFEX, uma campanha de malware no npm feita por uma só pessoa, publicou 12 pacotes desde 2023 e somou 40.767 downloads. Alguns pacotes continuam no ar, sem aviso de segurança.
4 min de leitura

Em números
- npm packages published by one operator
- 12
- total downloads, per Checkmarx
- 40,767
- downloads of function-flag alone
- 37,419
- when the first package appeared
- Aug 2023
Um único atacante publica malware no npm desde agosto de 2023, e parte dele ainda podia ser instalada no fim de setembro de 2026. A empresa de segurança CloudSEK batizou a campanha de MALFEX em 30 de setembro. Ela encontrou um pacote malicioso que nenhum aviso de segurança sinalizou por 14 meses. A Checkmarx veio depois, em 5 de outubro, com uma contagem de 40.767 downloads entre os pacotes da campanha. Se algum deles estiver na sua árvore de dependências, uma máquina Windows que o instalou pode estar executando uma ferramenta de acesso remoto.
Como o ataque funciona
O npm é o registro de pacotes do JavaScript. Quando você instala um pacote, o npm pode executar um script "postinstall", um comando escolhido pelo autor do pacote. O MALFEX usa esse script para baixar e iniciar malware para Windows assim que um desenvolvedor executa npm install.
As cargas ficam escondidas à vista de todos. Segundo a CloudSEK, os scripts baixam programas de Windows disfarçados de imagens PNG. A Checkmarx rastreou três caminhos de entrega distintos.
- Overlord RAT. Os pacotes
tlxbnhd,tldriveremxdriverbuscam um PNG falso em api.imghippo.com. Dentro há um programa AutoIt3 assinado e um script criptografado que carrega o Overlord, uma ferramenta de acesso remoto de código aberto escrita em Go. Uma ferramenta de acesso remoto, ou RAT, permite ao atacante controlar a máquina à distância. - Um ladrão de dados. Uma cadeia de
native-runner,img-to-nativeecdn-img-fetchpuxa um programa criptografado de uma conta do GitHub chamada "cavecrew". Em seguida, baixa um ladrão em Node.js de 64 MB que a Checkmarx chama de "movinlike". - Um downloader de longa duração. O
function-flagcontinua puxando novas cargas de hosts rotativos, incluindo discloud.app, squareweb.app, render.com e um proxy da CDN do Discord.
Os três caminhos visam o Windows. A Checkmarx observa que o downloader falha no macOS e no Linux, porque uma configuração exclusiva do Windows da qual ele depende não existe lá.
O que ele rouba e como se esconde
O Overlord não tem endereço de servidor fixo. "Ele pode ler notas criptografadas que o operador publica em transações da Solana, descriptografá-las e usar o resultado como sua lista de servidores", escreve a Checkmarx. A Solana é uma blockchain pública, então o operador pode trocar de servidor sem alterar o malware.
O ladrão mira oito clientes do Discord e cookies do Chrome, Edge, Brave, Opera, Vivaldi e Yandex. Também vai atrás do Telegram Desktop e das carteiras de criptomoedas MetaMask, Phantom e Coinbase. Os dados roubados saem por um webhook do Discord, que a Checkmarx diz ter sido criado em 26 de setembro de 2026.
A persistência também é discreta. A Checkmarx encontrou uma tarefa agendada chamada \Maiden, executada a cada cinco minutos, com a data recuada para 1º de janeiro de 2020. O operador também empurrou código malicioso bem para a direita com espaços, de modo que ele fica além da borda de uma janela de editor normal.
Segundo a CloudSEK, o operador assina o trabalho como "Murizada" em vários perfis, entre eles malfexkkj, malfex_user e cavecrew.
Os pacotes a verificar
| Pacote | Função | Downloads, segundo a Checkmarx | Situação |
|---|---|---|---|
| function-flag | Downloader | 37.419 | No ar, sem aviso |
| function-color | Não informada | 300 | No ar, sem aviso |
| cdn-img-fetch | Cadeia do ladrão | 643 | O aviso cobre apenas 1.0.0-1.0.1 |
| img-to-native | Cadeia do ladrão | 967 | Com aviso |
| native-runner | Cadeia do ladrão | 872 | Listado pela Checkmarx |
| tlxbnhd | Overlord RAT | 139 | Apreendido |
| tldriver | Overlord RAT | 138 | Apreendido |
| mxdriver | Overlord RAT | 289 | Apreendido |
As duas empresas contam de forma um pouco diferente. A CloudSEK lista function-flag, cdn-img-fetch e function-color como ainda instaláveis. "Os três pacotes sem avisos são as únicas ameaças ativas que os defensores podem atacar hoje", escreve. A Checkmarx explica a diferença em cdn-img-fetch: o aviso dele, MAL-2026-17320, cobre as versões 1.0.0 e 1.0.1, mas as versões maliciosas são a 1.0.2 e a 1.0.3.
Segundo a Checkmarx, o operador publicou 12 pacotes no total: oito maliciosos e quatro iscas inofensivas. Na semana até 1º de outubro, os pacotes ainda tiveram 3.017 downloads.
Os desenvolvedores têm sido um alvo frequente neste mês. No início de outubro, foi relatada outra campanha que escondia malware em hooks post-checkout do Git dentro de repositórios falsos de recrutadores.
O que isso significa para os desenvolvedores
- Procure agora nos seus arquivos de lock. Procure cada nome de pacote da tabela em
package-lock.json,yarn.lockoupnpm-lock.yaml, inclusive nas dependências transitivas.npm ls <name>mostra de onde um pacote veio. - Não confie apenas em avisos. O aviso do
cdn-img-fetchcobre as versões erradas, e dois pacotes ativos não tinham nenhum. Umnpm auditlimpo não prova que você está a salvo desta campanha. - Desative scripts de instalação onde puder.
npm install --ignore-scripts, ouignore-scripts=trueno.npmrc, impede que o código postinstall rode. Permita scripts apenas nos pacotes que precisam deles. - Verifique as máquinas Windows que instalaram um pacote da lista. Procure uma tarefa agendada chamada
\Maidene um arquivo chamadonode_runtime_helper.exeem%APPDATA%\Microsoft\Windows\. A Checkmarx também lista o endereço 104.234.65.75, na porta 700, como servidor de download. - Troque o que o ladrão leva. Se uma máquina foi atingida, saia do Discord e do Telegram, limpe as sessões do navegador, altere as senhas salvas e mova os fundos de qualquer carteira do navegador.
Os 37.419 downloads do function-flag são o número para lembrar. Um pequeno utilitário de nome simples carregou quase toda a campanha.
Fontes
Artigos relacionados

O trusted publishing do npm agora pode mover dist-tags via OIDC
O trusted publishing do npm agora pode adicionar, mover e remover dist-tags como latest com tokens OIDC de curta duração. O recurso vem desativado por padrão e exige o npm 11.21.0.

Node.js 22.23.3 LTS corrige um bug use-after-free no HTTP/2
O Node.js 22.23.3 LTS, lançado em 23 de setembro, corrige um bug use-after-free no HTTP/2, adiciona suporte a SharedArrayBuffer na Node-API e passa para o OpenSSL 3.5.8.

Rejetto HFS CVE-2026-61500 é explorada um dia após a publicação de sua análise
HFS 3.0.0 a 3.2.0 assina logins com Math.random(), uma falha que o Mythos da Anthropic encontrou. Os ataques começaram em 3 de outubro, um dia após a análise. A 3.2.1 corrige o problema.