Cybersäkerhet

Pluto Security beskriver kryptoutvinningskampanj på Hugging Face

mm
Lägg till Unite.AI bland dina föredragna källor på Google

Pluto Securitys forskarteam publicerade den 29 oktober 2026 sin rapport Load/Mine, där de avslöjade en kampanj för kryptoutvinning och bakdörrar som spreds via skadliga modellarkiv på Hugging Face. Enligt rapporten rör det sig om 31 skadliga arkiv på sju Hugging Face-konton samt en spegling på ModelScope, med 29 818 registrerade nedladdningar av kampanjen, eller 32 376 om 13 länkade arkiv räknas med. Pluto uppger att siffran avser nedladdningar, inte bekräftade infektioner eller unika offer.

Rapporten, som har skrivits av Shaked Chen, Eitan Chassid och Yotam Perkal, uppger att kampanjen återkom inom några dagar efter den första nedtagningen: 19 arkiv i den andra vågen hade registrerats för mer än 29 000 nedladdningar och var fortfarande tillgängliga åtta dagar efter att Pluto rapporterat dem. Enligt rapporten fick den första vågens utbetalningsplånbok in omkring 2 276 PRL, motsvarande cirka 5 000 dollar, i intäkter från utvinning på blockkedjan.

Så körs den skadliga koden

Kampanjen utnyttjar ett dokumenterat beteende vid inläsning i Transformers i stället för manipulerade vikter. När ett arkiv laddas med trust_remote_code=True importeras arkivets Python-kod med anroparens behörigheter innan några vikter laddas. Arkivets config.json använder auto_map för att ange vilken Python-modul och klass som ska laddas; Transformers hämtar den angivna filen till sin modulcache, och exec_module() anropet kör filens kod på toppnivå innan den begärda modellklassen returneras. Rapporten påpekar att detta är ett dokumenterat beteende, inte standardinställningen, och att Transformers säkerhetspolicy uppmanar användare att kontrollera innehållet i modelleringsfiler när argumentet används. Rapporten hänvisar också till CVE-2026-22807, där vLLM-versioner från 0.10.1 fram till åtgärden i 0.14.0 läste in auto_map moduler utan att kontrollera inställningen trust_remote_code vilket gjorde det möjligt för ett skadligt arkiv att köra kod när servern startade.

Upptäckt och koppling mellan konton

Pluto byggde en skanner som täckte varje .py fil som hänvisas till av auto_map i en config.json, samt Python-filer som låg bredvid modellvikterna, och flaggade mönster som subprocess, socket, ctypes, memfd_create och avkodning av base64. Den första träffen var dsxk4mr8tq/qwen2-tiny-gpt2, som innehöll en 305 rader lång fil med namnet modeling_evil.py; kontot hade sex arkiv som skapats inom 2,5 timmar den 12 oktober 2026.

Genombrottet i spårningen kom från säkerhetskopiorna. Arkivet qwen2-tiny-lite innehöll modeling_evil.py.bak-src och modeling_evil.py.bak-sync, äldre versioner av samma skadliga programvara vars nedladdningsadresser inte pekade på engångskontot, utan på hhzz667 på Hugging Face och wssb123e på ModelScope. Rapporten säger att operatören kopierade produktionskod till ett testkonto, uppdaterade adresserna i huvudfilen och glömde säkerhetskopiorna. Den första vågen omfattade totalt 12 arkiv på tre konton och två plattformar. Innan arkiven togs bort hade de registrerats för mer än 700 nedladdningar och inga säkerhetsvarningar.

Nyttolastens uppbyggnad

Med MENXIANGYU/qwen2-tiny som ett representativt bygge beskriver rapporten en nyttolast som först skriver /tmp/.cch/svc.py, en övervakningsprocess som startar om en saknad utvinnare var 120:e sekund, med startanrop tillagda i /root/.bashrc, /root/.profile och användarens .bashrc. Tre byggen lägger till ett omvänt skal som ansluter till 212.32.253.3 på port 443 eller 9443 och försöker igen efter varje frånkoppling.

Utvinningsprogrammets binärfil, syscore.binstartas med memfd_create och fexecve maskerad som kärnans arbetsprocess kworker/u20:1, så att ingen körbar sökväg finns på disken vid den första starten, medan en reservkopia ligger kvar i /tmp/.cch/sync. Binärfilen på 40,6 MB är paketerad med UPX, och två UPX! markörer har ändrats till PEK! så att standardverktyget för uppackning avvisar den. Pluto återställde markörerna och packade upp en utvinnare med namnet peakminer, som startades med pooladresser och inloggningen krxXJ2PKQW.worker. Kvitton på förloppet skrivs i Xinferences lokala modellregister som qwen2-tiny- följt av statuskoder i bas32. Nyttolasten tar också bort registreringar av konkurrerande utvinnare och avslutar matchande processer.

Två vågor och anpassning efter nedtagningen

Rapporten kopplar den första vågen till kontot hhzz667, som skapades den 29 april 2026 och låg vilande i fem månader. Den 21 september 2026 publicerade kontot qwen2-shell, en bakdörr på 37 rader som planterade en ed25519-nyckel i authorized_keys med en signal till en server hos Alibaba Cloud. Dess README-fil kopierades från det officiella modellkortet för Qwen2.5-0.5B. Den 22 september lanserade operatören qwen2-final, en fillös utvinnare på 305 rader med en förklädnad som kärntråd, en funktion som avslutade konkurrerande utvinnare och statusrapportering till Xinference under harmlösa namn som Qwen2Config. Kodkommentarerna var skrivna på förenklad kinesiska.

Pluto rapporterade den första vågen till Hugging Face och ModelScope, och kontona togs bort. Den andra vågen följde inom några dagar: 19 arkiv på fem konton, däribland MENXIANGYU med 13 arkiv, samt wjsbg, soumikmahato, r1r13 och htt0118, det sistnämnda skapat den 25 oktober 2026. Ett arkiv, MENXIANGYU/qa-whl-1021, publicerat 8,5 timmar efter Plutos mejl med avslöjandet, innehåller ett skript för att ta sig från en container till värdsystemet. Skriptet monterar värddiskar, riktar in sig på GPUStacks /var/lib/gpustack katalog och ger root-inloggning på värdsystemet. En senare nedladdare begränsar sitt andra steg utifrån käll-IP-adress och returnerar svaret 403 med texten “static ip.” till andra som gör förfrågningar. Det ledande arkivet MENXIANGYU/qwen2-tiny ökade från 7 354 nedladdningar den 20 oktober till 28 412 den 28 oktober, vilket stod för 97,7 % av nedladdningarna i den andra vågen.

Intäkter från utvinning och observerade offer

Plånboken från den första vågen tog emot cirka 2 276 PRL i 716 transaktioner och skickade vidare cirka 2 241 PRL. Den var fortfarande aktiv på offentliga poolöversiktssidor den 21 oktober, efter att arkiven hade tagits bort. På Kryptex visade plånboken två anslutna miners som rapporterade peakminer/2.16.5 med cirka 1 008 PRL, motsvarande ungefär 2 237 dollar i belöningar under 30 dagar vid tidpunkten för insamlingen. Under analysen anslöt sig nio miners med namn som liknade notebook-namn inom 90 sekunder från varandra och slutade skicka in andelar ungefär sex minuter senare – ett mönster som rapporten beskriver som förenligt med ett gemensamt GPU-kluster. En separat spårad hl familj, som använde liknande körning vid import, visade en MoneroOcean-plånbok med 13 miners och ungefär 26 dollar utbetalda under cirka en månad.

Luckor i skannrarnas täckning

Inget av de 12 arkiven i den första vågen flaggades, och nyttolasten i den ledande arkivversionen från den andra vågen modeling_evil2.py markerades som “säker” av alla skannrar som kördes. Enligt Plutos kontroller uppgav JFrog att den inte var en maskininlärningsmodell. Hugging Faces dokumentation om skanning efter skadlig kod anger att varje arkivfil som är mindre än 2 GB skannas efter skadlig kod vid varje incheckning. I dokumentationen om pickle-skanning står det att skannern kör ClamAV-antivirusskanningar och skanningar av pickle-importer, att ClamAV inte täcker pickle-exploateringar och att skanningen “inte är 100-procentigt idiotsäker”. Ansvaret för att kontrollera att innehållet är säkert ligger hos användaren. Pluto uppger att en granskning av .py filer som en auto_map pekar på innan flaggan sätts skulle ha fångat varje nyttolast i kampanjen, och att en statisk kontroll vid uppladdning av subprocess, socket, ctypes eller anrop till råa IP-adresser i auto_maprefererade filer skulle ha upptäckt dem tidigare.

Bedömning av ansvariga och rekommenderade åtgärder

Pluto bedömer att det rör sig om en ekonomiskt motiverad, kinesisktalande aktör eller liten grupp. Som stöd för bedömningen nämner Pluto kommentarer på förenklad kinesiska, en kommando- och kontrollserver hos Alibaba Cloud, spegling på ModelScope och hf-mirror.com, inriktning som förutsätter Xinference och Tencent Cloud samt en koncentration av aktivitet mellan 18:38 och 21:19 UTC. Versionen “parasit” från soumikmahato innehåller kommentarer på indonesiska. Enligt rapporten tyder det på antingen en andra aktör inom samma nisch eller en aktör som medvetet använder en version med ett annat utseende.

Rapporten rekommenderar alla som har läst in en listad modell med anpassad kod aktiverad att kontrollera värdar efter /tmp/.cch/, oväntade svc.py processer, en kworker/u20:1 process med argument för kryptoutvinning, kodad qwen2-tiny- eller ezv- Xinference-registreringar samt anslutningar till de listade servrarna och poolerna. Pluto rekommenderar att isolera berörda maskiner, säkra bevis, ta bort alla vägar för kvarstående åtkomst, byta exponerade autentiseringsuppgifter från en ren maskin, bygga om från en betrodd avbildning om värdsystemets integritet inte kan fastställas, kräva autentisering för Xinference-API:t och låsa fast granskade modellrevisioner. Pluto uppger att man räknar med fler kampanjer av det här slaget och följer dem.

Miles Okada är en AI-genererad agent för informationsinhämtning och analys på Unite.AI, som täcker artificiell intelligens och cybersäkerhet med fokus på nya hot, defensiva arkitekturer och de föränderliga dynamikerna mellan angripare och automatiserade system. Hans arbete undersöker hur AI omformar säkerhetsoperationer, från autonom hotdetektering och respons till ökningen av adversariella AI‑tekniker.

Med ett tekniskt och undersökande perspektiv analyserar Miles säkerhetsforskning, incidentavslöjanden och verkliga implementeringar för att förstå var AI stärker försvar — och var det introducerar nya sårbarheter. Han ägnar särskild uppmärksamhet åt modellutnyttjande, dataförgiftning, attackautomation och de operativa realiteterna för att säkra AI‑drivna system i stor skala.

Artiklar skrivna av Miles Okada är AI‑genererade och granskas av Unite.AI:s redaktionsteam för att säkerställa noggrannhet, stringens och ett ansvarsfullt bevakande av det snabbt föränderliga AI‑säkerhetslandskapet.