Securitate cibernetică
Pluto Security detaliază campania de minare de criptomonede Load/Mine de pe Hugging Face

Echipa de cercetare a Pluto Security a publicat, pe 29 octombrie 2026, raportul său Load/Mine, în care dezvăluie o campanie de minare de criptomonede și de instalare a unei uși din spate, distribuită prin depozite malițioase de modele de pe Hugging Face. Raportul contabilizează 31 de depozite malițioase în șapte conturi Hugging Face, plus o oglindă pe ModelScope, cu 29.818 de descărcări înregistrate în cadrul campaniei și 32.376 dacă sunt incluse 13 depozite asociate. Pluto precizează că cifra reprezintă numărul de descărcări, nu numărul confirmat de infectări sau de victime unice.
Raportul, redactat de Shaked Chen, Eitan Chassid și Yotam Perkal, arată că, la câteva zile după eliminarea inițială, campania a revenit: 19 depozite din al doilea val au înregistrat peste 29.000 de descărcări și erau încă active la opt zile după ce Pluto le-a raportat. Potrivit raportului, portofelul de plată al primului val a primit aproximativ 2.276 PRL, în jur de 5.000 $, din minarea on-chain.
Cum se execută codul malițios
Campania se bazează pe un comportament documentat al mecanismului de încărcare Transformers, nu pe ponderi compromise. Încărcarea unui depozit cu trust_remote_code=True importă codul Python al depozitului cu privilegiile celui care apelează, înainte de încărcarea oricăror ponderi. Depozitul config.json folosește auto_map pentru a indica modulul și clasa Python care trebuie încărcate; Transformers descarcă fișierul menționat în memoria cache a modulelor, iar apelul exec_module() execută codul de nivel superior din fișier înainte de a returna clasa de model solicitată. Raportul precizează că acesta este un comportament documentat, nu unul implicit, și că politica de securitate Transformers le recomandă utilizatorilor să verifice conținutul fișierelor de model atunci când folosesc argumentul respectiv. Raportul menționează și CVE-2026-22807, prin care versiunile vLLM de la 0.10.1 până la remedierea din 0.14.0 încărcau auto_map module fără să verifice setarea trust_remote_code , permițând unui depozit malițios să execute cod la pornirea serverului.
Descoperirea și asocierea conturilor
Pluto a creat un scaner care acoperea fiecare .py fișier menționat de auto_map într-un config.json, precum și fișierele Python aflate lângă ponderile modelelor, semnalând tipare precum subprocess, socket, ctypes, memfd_create și decodarea base64. Prima identificare a fost dsxk4mr8tq/qwen2-tiny-gpt2, care conținea un fișier de 305 linii numit modeling_evil.py; contul avea șase depozite create într-un interval de 2,5 ore, pe 12 octombrie 2026.
Pierderea pistei de atribuire s-a datorat fișierelor de rezervă. Depozitul qwen2-tiny-lite conținea modeling_evil.py.bak-src și modeling_evil.py.bak-sync, versiuni mai vechi ale aceluiași program malware, ale căror adrese URL de descărcare indicau nu spre contul temporar, ci spre hhzz667 de pe Hugging Face și wssb123e de pe ModelScope. Raportul arată că operatorul a copiat codul de producție într-un cont de testare, a actualizat adresele URL din fișierul principal și a uitat de copiile de rezervă. Primul val a cuprins în total 12 depozite în trei conturi și pe două platforme; înainte de eliminare, acestea înregistraseră peste 700 de descărcări și zero avertizări de securitate.
Anatomia încărcăturii utile
Luând MENXIANGYU/qwen2-tiny drept exemplu reprezentativ, raportul descrie o încărcătură care scrie mai întâi /tmp/.cch/svc.py, un mecanism de supraveghere care repornește minerul dacă acesta lipsește, la fiecare 120 de secunde, cu cârlige de lansare adăugate în /root/.bashrc, /root/.profile și în .bashrc. Trei versiuni includ o ușă din spate de tip shell invers, care se conectează la 212.32.253.3 pe porturile 443 sau 9443 și reîncearcă după fiecare deconectare.
Fișierul binar al minerului, syscore.bin, este lansat prin memfd_create și fexecve deghizat în procesul worker al nucleului kworker/u20:1, astfel încât la prima lansare nu există pe disc nicio cale către un executabil; o copie de rezervă persistă în /tmp/.cch/sync. Fișierul binar de 40,6 MB este împachetat cu UPX, iar doi marcatori UPX! au fost modificați în PEK! pentru ca instrumentul standard de despachetare să îl respingă; Pluto a restaurat marcatorii și a despachetat un miner numit peakminer, lansat cu adresele pool-ului și datele de autentificare krxXJ2PKQW.worker. Chitanțele de progres sunt scrise în registrul local de modele Xinference, sub forma qwen2-tiny- urmată de coduri de stare base32, iar încărcătura elimină înregistrările minerilor rivali și oprește procesele corespunzătoare.
Două valuri și adaptarea după eliminare
Raportul atribuie primul val contului hhzz667, creat pe 29 aprilie 2026 și inactiv timp de cinci luni. Pe 21 septembrie 2026, acesta a publicat qwen2-shell, o ușă din spate SSH de 37 de linii, care instalează o cheie ed25519 în authorized_keys și trimite semnale către un server Alibaba Cloud; fișierul README a fost copiat din fișa oficială a modelului Qwen2.5-0.5B. Pe 22 septembrie, operatorul a lansat qwen2-final, un miner fără fișier, de 305 linii, cu deghizare în proces al nucleului, un mecanism de eliminare a minerilor concurenți și raportarea stării în Xinference, folosind denumiri inofensive precum Qwen2Config. Comentariile din cod erau în chineză simplificată.
Pluto a raportat primul val către Hugging Face și ModelScope, iar conturile au fost eliminate. Al doilea val a urmat în câteva zile: 19 depozite asociate cu cinci conturi, inclusiv MENXIANGYU, cu 13 depozite, precum și wjsbg, soumikmahato, r1r13 și htt0118, ultimul creat la 25 octombrie 2026. Un depozit, MENXIANGYU/qa-whl-1021, publicat la 8,5 ore după e-mailul de divulgare trimis de Pluto, este un script de evadare din container către gazdă, care montează discurile gazdei și vizează directorul GPUStack /var/lib/gpustack și oferă acces de autentificare root pe gazdă. Un dropper ulterior restricționează a doua etapă pe baza adresei IP sursă și le returnează celorlalți solicitanți un răspuns 403 cu textul „static ip.” Depozitul principal MENXIANGYU/qwen2-tiny a crescut de la 7.354 de descărcări pe 20 octombrie la 28.412 pe 28 octombrie, reprezentând 97,7% din descărcările celui de-al doilea val.
Veniturile din minare și victimele observate
Portofelul primului val a primit aproximativ 2.276 PRL în 716 tranzacții și a transferat mai departe aproximativ 2.241 PRL; era încă activ pe tablourile de bord publice ale pool-urilor pe 21 octombrie, după eliminarea depozitelor sale. Pe Kryptex, portofelul afișa doi lucrători online care raportau peakminer/2.16.5 cu aproximativ 1.008 PRL, echivalentul a circa 2.237 USD, în recompense pe 30 de zile la momentul capturii. În timpul analizei, nouă lucrători cu nume de tipul celor folosite pentru notebook-uri s-au conectat la intervale de cel mult 90 de secunde unul de celălalt și au încetat să trimită share-uri aproximativ șase minute mai târziu; raportul descrie acest tipar ca fiind compatibil cu un cluster GPU partajat. O familie urmărită separat hl , care utiliza o execuție similară la importare, avea un portofel MoneroOcean cu 13 lucrători și aproximativ 26 USD plătiți în circa o lună.
Lacune în acoperirea scanerelor
Niciunul dintre cele 12 depozite din primul val nu a fost semnalat, iar încărcătura utilă principală din al doilea val modeling_evil2.py a primit verdictul „sigur” de la toate scanerele care au rulat, iar JFrog a raportat că nu era un model de învățare automată, potrivit verificărilor Pluto. Documentația Hugging Face privind scanarea programelor malware precizează că fiecare fișier dintr-un depozit mai mic de 2 GB este verificat de un scaner de programe malware la fiecare commit. Documentația privind scanarea fișierelor pickle arată că scanerul efectuează verificări antivirus cu ClamAV și scanări ale importurilor pickle, că ClamAV nu acoperă exploit-urile pickle și că scanarea „nu este infailibilă în proporție de 100%”, responsabilitatea de a verifica siguranța revenindu-i utilizatorului. Pluto afirmă că verificarea .py fișierelor la care face trimitere un auto_map ar fi detectat fiecare încărcătură utilă din campanie înainte de setarea marcajului și că o verificare statică la momentul încărcării pentru subprocess, socket, ctypes sau apeluri către adrese IP brute în auto_map-fișierele menționate le-ar fi detectat mai devreme.
Evaluarea atribuirii și măsuri recomandate
Pluto estimează că este vorba despre un operator sau un grup restrâns vorbitor de chineză, motivat financiar, invocând comentariile în chineză simplificată, un server de comandă și control Alibaba Cloud, replicarea pe ModelScope și hf-mirror.com, vizarea unor sisteme care presupune utilizarea Xinference și Tencent Cloud, precum și gruparea activității între 18:38 și 21:19 UTC. Versiunea „parasit” a lui soumikmahato conține comentarii în indoneziană; raportul afirmă că acest lucru este compatibil fie cu un al doilea operator din aceeași nișă, fie cu un singur operator care folosește intenționat o linie cu aspect diferit.
Raportul le recomandă tuturor celor care au încărcat un model din listă cu codul personalizat activat să verifice gazdele pentru /tmp/.cch/, procese neașteptate svc.py procese, un kworker/u20:1 proces care rulează cu argumente de minare, codificat qwen2-tiny- sau ezv- înregistrări Xinference și conexiuni la serverele și pool-urile menționate. Pluto recomandă izolarea mașinilor afectate, păstrarea probelor, eliminarea tuturor mecanismelor de persistență, schimbarea acreditărilor expuse de pe o mașină curată, reconstruirea sistemelor pornind de la o imagine de încredere atunci când nu se poate confirma integritatea gazdei, impunerea autentificării pentru API-ul Xinference și fixarea versiunilor de modele care au fost verificate. Pluto afirmă că se așteaptă la mai multe campanii de acest tip și că le monitorizează.












