AI & AutomationNieuwsAI-generated

Nepmodellen op Hugging Face kapen je GPU voor mining

Onderzoekers van Pluto Security beschrijven een campagne waarbij 31 kwaadaardige modelrepositories op Hugging Face de GPU's van hun gebruikers aan het werk zetten als cryptominer. Opvallend aan deze aanval: de modellen bevatten geen vergiftigde gewichten en geen pickle-exploit. Ze bevatten vaak helemaal geen model. Het rapport verscheen op 29 oktober.

De code draait voordat het model draait

De repositories doen zich voor als kleine Qwen2-testmodellen. Ze misbruiken trust_remote_code=True, een optie in de Transformers-bibliotheek waarmee een model zijn eigen Python-implementatie mag meeleveren. Zet je die vlag aan, dan wijst auto_map in config.json naar een Python-bestand dat Transformers downloadt en importeert. Bij dat importeren voert Python alle code op het hoogste niveau van dat bestand uit — met de rechten van de gebruiker die het model laadt, nog voordat er één gewicht is geladen.

Het meest gedownloade model, MENXIANGYU/qwen2-tiny, bevatte volgens Pluto geen model maar alleen code. Die installeert een cryptominer die zich voordoet als een Linux-systeemproces, start zichzelf opnieuw als je hem afsluit en ruimt concurrerende miners op. Sommige versies openen daarnaast een reverse shell, waarmee de aanvaller directe toegang tot de server krijgt.

Dit is geen bug in Hugging Face: trust_remote_code staat niet standaard aan en het gedrag is gedocumenteerd. De securitypolicy van Transformers zegt het expliciet: controleer altijd de inhoud van de modelbestanden als je dit argument gebruikt.

Zelfgehoste inferentie is het doelwit

De payloads zijn geschreven voor GPU-machines met zelfgehoste inferentieservers, in het bijzonder Xinference en GPUStack, plus gehuurde GPU-bakken, gedeelde onderzoeksnotebooks en CI-jobs die kleine testmodellen binnenhalen zonder dat iemand de code leest. Pluto zag negen machines van een gedeeld GPU-cluster tegelijk beginnen te minen; zes minuten later vielen ze weg, wat volgens de onderzoekers past bij een beheerder die de jobs afbreekt.

De scanners vingen dit niet op. Hugging Face controleert uploads met antivirus en met scanners van Protect AI en JFrog, maar die kijken naar bekende malware en naar onveilige gewichtsformaten, niet naar wat de Python-code doet. Het hoofdmodel van de tweede golf kwam schoon door de scan terwijl het 28.412 downloads verzamelde; JFrog meldde alleen dat het bestand "geen machine-learningmodel" was. In totaal gaat het om ruim 32.000 downloads, wat Pluto nadrukkelijk downloads noemt en geen bevestigde infecties.

Pluto meldde de eerste golf bij Hugging Face en bij het Chinese ModelScope, die de accounts verwijderden. Binnen enkele dagen stond er een tweede golf van 19 repositories onder nieuwe accounts, met reverse shells in plaats van de eerdere hardgecodeerde SSH-sleutel. Acht dagen na de melding waren die nog online. De opbrengst is bescheiden: de wallet van de eerste golf ontving ongeveer 2.276 PRL, zo'n 5.000 dollar, over 716 transacties. Pluto wijst de campagne toe aan een financieel gemotiveerde, Chineestalige operator, op basis van Chinese codecommentaren en command-and-controlservers bij Alibaba Cloud.

Wat je nu kunt doen

  • Heb je een van deze modellen geladen met trust_remote_code aan, beschouw de machine dan als gecompromitteerd. Pluto's advies: controleer tegen de indicatoren in het rapport en vervang alle inloggegevens die de machine kon bereiken. De miner afsluiten verwijdert de achterdeuren niet.
  • Controleer welke frameworks die vlag voor je zetten. Pluto noemt CVE-2026-22807 in vLLM, waarbij versies 0.10.1 tot 0.14.0 auto_map-modules laadden zonder de trust_remote_code-instelling te controleren, zodat code al bij het starten van de server kon draaien. Opgelost in 0.14.0. In Unsloth Studio stond de vlag hardgecodeerd aan bij het inspecteren van een modelconfiguratie; dat is verholpen in versie 2026.6.9.
  • Lees bij een onbekend model het bestand achter auto_map. Een modeldefinitie beschrijft lagen en een forward pass. Komen daar subprocess, socket of ctypes in voor, dan staat dat er met opzet.