O malware na Hugging Face representa um alerta importante para administradores de sistemas Linux, profissionais de DevOps e desenvolvedores que executam modelos de inteligência artificial em infraestrutura própria. Com a popularização da inferência local e o crescimento de servidores equipados com GPUs, baixar um modelo público sem verificar sua procedência pode abrir caminho para mineração clandestina de criptomoedas, execução de comandos remotos e comprometimento de servidores.
A campanha maliciosa identificada na plataforma Hugging Face explora a confiança dos usuários em repositórios de modelos de IA para distribuir código capaz de sequestrar recursos computacionais. A investigação aponta para modelos que imitam checkpoints legítimos, incluindo referências à família Qwen2, e atingem ambientes de inferência auto-hospedados. O volume de downloads associado aos repositórios suspeitos aumenta a preocupação com a disseminação dessa ameaça.
O problema vai além do consumo excessivo de energia ou da lentidão provocada pela mineração. Quando um modelo executa código Python não confiável durante o carregamento, o risco pode incluir a abertura de uma porta de entrada para invasores, o acesso a informações sensíveis e a instalação de mecanismos de persistência. Para quem administra servidores Linux, entender esse mecanismo é essencial para evitar que uma ferramenta de IA se transforme em um ponto de comprometimento da infraestrutura.
Como funciona o ataque que explora o trust_remote_code na Hugging Face
O ponto central da campanha é o parâmetro trust_remote_code=True, utilizado pela biblioteca Transformers, do ecossistema Hugging Face. Essa opção permite carregar arquiteturas de modelos que dependem de código Python fornecido pelo próprio repositório, em vez de utilizar exclusivamente as implementações já disponíveis localmente.
O recurso tem uma finalidade legítima: ampliar a compatibilidade com arquiteturas desenvolvidas pela comunidade. Entretanto, também cria uma superfície de ataque. Quando o administrador autoriza a execução de código remoto sem inspecioná-lo, um arquivo aparentemente associado ao carregamento do modelo pode executar operações arbitrárias com os privilégios do processo que o iniciou.
Em condições normais, o carregador consulta arquivos de configuração, identifica a implementação necessária e importa o módulo Python correspondente. O campo auto_map, presente no arquivo config.json, pode indicar quais módulos e classes devem ser carregados.
É nesse mecanismo que os atacantes se apoiam. Em vez de explorar uma vulnerabilidade tradicional no kernel Linux ou corromper os pesos do modelo, eles publicam arquivos Python maliciosos que são executados durante o carregamento autorizado pelo usuário.
O perigo não está necessariamente nos pesos da inteligência artificial, mas no código que acompanha o modelo. Um arquivo de pesos no formato safetensors, por exemplo, não torna automaticamente seguro todo o repositório que o contém.
A campanha demonstra como uma funcionalidade legítima pode ser transformada em um vetor de comprometimento quando a confiança no conteúdo publicado substitui a verificação técnica.

Malware na Hugging Face: o disfarce de checkpoints do Qwen2
A investigação da Pluto Security identificou 31 repositórios maliciosos distribuídos por sete contas, com uma segunda onda de publicações após a remoção de parte do material. Considerando os modelos relacionados, a campanha acumulou mais de 32 mil downloads registrados.
O modelo MENXIANGYU/qwen2-tiny tornou-se um dos principais exemplos do ataque. Ele se apresentava como um checkpoint pequeno associado à família Qwen2, o que poderia atrair desenvolvedores interessados em testes rápidos ou inferência com menor consumo de recursos.
O detalhe mais preocupante é que o repositório mais popular não continha um modelo funcional de verdade. Em vez de entregar os pesos esperados, incluía código preparado para instalar um minerador de criptomoedas.
Os alvos incluíam servidores Linux que executavam plataformas de inferência auto-hospedadas, como Xinference e GPUStack. Esses sistemas permitem disponibilizar modelos por meio de serviços próprios e são utilizados em ambientes de desenvolvimento, pesquisa e infraestrutura corporativa.
O volume de downloads, contudo, precisa ser interpretado corretamente: download não significa infecção confirmada. Uma pessoa pode ter baixado um repositório sem executar seu código, enquanto uma máquina comprometida pode ter sido afetada por mais de uma execução.
Mesmo com essa ressalva, a escala de distribuição demonstra como um modelo popular ou aparentemente inofensivo pode alcançar rapidamente diferentes ambientes computacionais.
A campanha também mostrou que a remoção dos primeiros repositórios não encerrou a operação. Novas contas e publicações surgiram em poucos dias, dificultando a contenção baseada exclusivamente na denúncia e retirada de arquivos individuais.
Ações maliciosas: mineração oculta e backdoor via shell reverso
Depois da execução inicial, o código malicioso prepara o ambiente para utilizar recursos computacionais da vítima. O objetivo principal é instalar um minerador de criptomoedas, capaz de consumir capacidade de processamento para gerar ganhos financeiros ao operador da campanha.
Para evitar chamar a atenção, o malware adota técnicas de disfarce no Linux. Uma delas consiste em iniciar o minerador com um nome semelhante ao de um processo legítimo do sistema, como kworker/u20:1.
O nome, por si só, não comprova uma infecção. Entretanto, processos falsos com essa identificação podem ser executados em espaço de usuário e apresentar argumentos ou comportamentos incompatíveis com uma thread legítima do kernel.
A ameaça também implementa mecanismos de recuperação. Se o minerador for encerrado, componentes auxiliares podem tentar iniciá-lo novamente. Isso significa que matar o processo suspeito não garante a remoção do malware.
Outra característica identificada é a eliminação de mineradores concorrentes. O código pode procurar processos de mineração conhecidos, encerrá-los e remover registros associados a outras operações. Dessa forma, o invasor tenta reservar mais recursos da máquina para sua própria atividade.
Algumas variantes vão além da mineração e estabelecem um shell reverso. Nesse cenário, a máquina comprometida inicia uma conexão de saída com um sistema controlado pelo atacante. Quando a conexão é estabelecida, o invasor pode obter um terminal remoto e executar comandos com os privilégios disponíveis ao processo comprometido.
Essa capacidade muda significativamente o nível de risco. Um minerador clandestino representa abuso de recursos; um shell reverso pode transformar o servidor em uma porta de entrada para o ambiente interno.
A campanha também apresenta sinais de persistência, incluindo alterações em arquivos de inicialização do shell e mecanismos que tentam restaurar os componentes maliciosos. Algumas variantes foram associadas à criação de acessos adicionais e a tentativas de escapar de ambientes isolados.
Para equipes de infraestrutura, isso significa que a investigação precisa considerar não apenas a GPU sobrecarregada, mas também possíveis alterações em contas, chaves SSH, arquivos de configuração e serviços executados na máquina.
Por que os antivírus de modelos de inteligência artificial falharam na detecção
A campanha evidencia uma limitação importante das verificações de segurança aplicadas a repositórios de inteligência artificial: identificar arquivos maliciosos conhecidos não é o mesmo que avaliar o comportamento de todo o código de um modelo.
A Hugging Face utiliza verificações antimalware, incluindo o ClamAV, e conta com ferramentas de parceiros para analisar determinados formatos e artefatos de modelos. Essas medidas continuam sendo relevantes, mas não garantem que um repositório seja seguro em todas as circunstâncias.
Uma parte das verificações tradicionais se concentra em assinaturas conhecidas, formatos de serialização e riscos associados a arquivos de pesos. O formato safetensors, por exemplo, foi desenvolvido para armazenar tensores sem depender do mecanismo de desserialização executável característico do pickle.
Entretanto, esse tipo de proteção não impede que um repositório contenha um arquivo Python malicioso. Se o carregador executar esse código por meio de trust_remote_code, a ameaça poderá atuar independentemente da segurança do formato utilizado para armazenar os pesos.
Foi justamente essa diferença que tornou a campanha difícil de identificar. Segundo a investigação, arquivos associados aos modelos suspeitos passaram pelas verificações disponíveis sem serem sinalizados. Em um dos casos, a ferramenta de análise indicou que o arquivo examinado nem sequer era um modelo de aprendizado de máquina.
O episódio também demonstra por que uma verificação estática precisa considerar o contexto de execução. Examinar extensões, tamanhos e formatos ajuda a identificar anomalias, mas não substitui a análise das operações realizadas pelo código.
Arquivos Python que invocam subprocessos, estabelecem conexões de rede, manipulam processos ou baixam executáveis merecem atenção especial quando fazem parte do carregamento de um modelo. Nenhum desses comportamentos, isoladamente, prova a existência de malware, mas a combinação de funcionalidades incompatíveis com a finalidade declarada do modelo exige investigação.
A recomendação para desenvolvedores é revisar os arquivos referenciados por auto_map, verificar o histórico do repositório e fixar uma revisão específica após a inspeção. Confiar apenas no resultado de um antivírus ou na reputação de uma plataforma não é suficiente para proteger um ambiente de produção.
O que fazer se você utilizou esses modelos no seu ambiente Linux
Se um servidor carregou um dos modelos identificados com execução de código remoto habilitada, a abordagem mais segura é tratar o sistema como potencialmente comprometido até que uma investigação determine a extensão do incidente.
A remoção do modelo ou o encerramento do minerador não garantem que o acesso do invasor tenha sido eliminado. Componentes de persistência, credenciais expostas e shells reversos podem continuar ativos mesmo depois que o consumo anormal de GPU desaparece.
Administradores de sistemas Linux devem seguir uma sequência de resposta a incidentes que preserve evidências, contenha a ameaça e permita recuperar o ambiente com segurança.
1. Isole o servidor e preserve as evidências
Se houver sinais de comprometimento, restrinja imediatamente as conexões de rede da máquina afetada, mantendo apenas o acesso necessário para investigação e recuperação.
Em ambientes corporativos, coordene o isolamento com a equipe responsável pela infraestrutura. Antes de encerrar processos ou excluir arquivos, preserve registros relevantes, informações sobre conexões e evidências que possam ajudar a determinar o alcance da invasão.
Se o servidor hospeda serviços críticos, avalie a transferência das cargas de trabalho para uma infraestrutura limpa. Não permita que a necessidade de manter a inferência funcionando prolongue uma possível exposição.
2. Audite processos, conexões e mecanismos de persistência
Investigue processos com consumo elevado de CPU ou GPU, nomes suspeitos e argumentos incompatíveis com sua função aparente.
Ferramentas como ps, top, htop, ss e nvidia-smi ajudam a identificar atividades anormais, conexões de rede e utilização inesperada dos recursos gráficos.
Também é necessário verificar os mecanismos de inicialização automática, incluindo:
- Arquivos
.bashrce.profile, especialmente nos diretórios pessoais de usuários que executam os serviços de IA. - Tarefas agendadas no cron e unidades do systemd desconhecidas.
- Chaves SSH adicionadas sem autorização e alterações em arquivos como
authorized_keys. - Arquivos executáveis ou scripts inesperados em diretórios temporários.
- Processos que restabelecem conexões externas ou reaparecem após serem encerrados.
A investigação da campanha identificou referências a caminhos como /tmp/.cch/ e a um script chamado svc.py. Esses elementos podem ajudar na triagem, mas sua ausência não comprova que o sistema esteja limpo.
Verifique também os registros das plataformas Xinference e GPUStack, procurando modelos desconhecidos, inicializações inesperadas e alterações nos serviços de inferência.
3. Revogue e substitua as credenciais potencialmente expostas
A possibilidade de execução arbitrária de código significa que o malware pode ter acessado informações disponíveis para o usuário ou serviço comprometido.
Por isso, faça a rotação das credenciais potencialmente expostas a partir de uma máquina confiável. Isso inclui tokens de acesso, chaves de API, credenciais de provedores de nuvem, senhas e chaves SSH que poderiam ser lidas pelo processo malicioso.
Revogue os tokens antigos, examine os registros de autenticação e procure acessos desconhecidos. Em ambientes com permissões excessivas, considere que o impacto pode ultrapassar o servidor inicialmente afetado.
Não basta trocar a senha do usuário que executou o modelo se o processo tinha acesso a credenciais de outros serviços.
4. Reconstrua o ambiente quando houver comprometimento confirmado
Se houver evidências de shell reverso, persistência ou execução de comandos por terceiros, a opção mais confiável costuma ser reconstruir o servidor a partir de uma imagem conhecida como limpa.
Antes de restaurar o serviço, revise os modelos utilizados, as dependências e os mecanismos de inicialização. Evite copiar indiscriminadamente scripts, configurações e executáveis da máquina comprometida para o ambiente recuperado.
Em seguida, atualize o sistema operacional, aplique as correções de segurança pertinentes e valide a integridade da nova instalação.
Não considere a máquina recuperada apenas porque o minerador deixou de funcionar. A ausência de consumo anormal de GPU não demonstra que o invasor perdeu o acesso.
5. Reforce o isolamento dos ambientes de inferência
Para evitar novos incidentes, execute modelos não confiáveis em ambientes isolados, com privilégios mínimos e acesso à rede restrito.
Contêineres podem reduzir a exposição, desde que sejam configurados corretamente. Evite executá-los como root, não monte desnecessariamente diretórios sensíveis do host e não disponibilize o socket do Docker a processos que não precisem administrá-lo.
Também é importante controlar o acesso às GPUs e impedir que os serviços de inferência recebam permissões superiores às necessárias.
Sempre que possível, desabilite trust_remote_code e utilize implementações de modelos que não dependam de código remoto. Quando a opção for indispensável, revise os arquivos Python envolvidos, fixe uma revisão específica do repositório e teste o modelo em um ambiente descartável antes de colocá-lo em produção.
Por fim, monitore conexões de saída, consumo de recursos e alterações nos processos. Essas medidas não eliminam todos os riscos, mas ajudam a detectar comportamentos incompatíveis com a função esperada do serviço.
Conclusão: a segurança da cadeia de suprimentos de IA exige cautela redobrada
A campanha de malware na Hugging Face demonstra que a cadeia de suprimentos de inteligência artificial enfrenta desafios semelhantes aos já conhecidos no ecossistema de software: repositórios comprometidos, componentes maliciosos disfarçados e confiança excessiva em mecanismos automatizados de verificação.
O diferencial é que o código perigoso pode chegar ao ambiente de produção dentro de um fluxo aparentemente legítimo de carregamento de modelos. Quando a execução ocorre em servidores Linux equipados com GPUs, os prejuízos podem incluir mineração clandestina, desperdício de recursos, exposição de credenciais e acesso remoto não autorizado.
Os mais de 32 mil downloads associados aos repositórios e modelos relacionados mostram o potencial de disseminação da campanha, mas não representam uma contagem de máquinas infectadas. Ainda assim, o reaparecimento dos arquivos após as primeiras remoções evidencia que a resposta precisa ir além da exclusão de contas e modelos individuais.
Para administradores e desenvolvedores, a principal lição é clara: modelos de inteligência artificial também precisam passar por controles de segurança da cadeia de suprimentos. Inspecionar o código, restringir privilégios, limitar conexões externas e manter mecanismos de auditoria são medidas essenciais para operar modelos locais com mais segurança.
