🔍 Contexte : Le 29 octobre 2026, Pluto Research (Pluto Security) publie une analyse technique détaillée d’une campagne malveillante exploitant les dépôts de modèles IA sur Hugging Face et ModelScope. L’investigation a été menée par Shaked Chen, Eitan Chassid et Yotam Perkal.

⚠️ Nature de la menace : La campagne exploite le mécanisme trust_remote_code=True de la bibliothèque Transformers (HuggingFace), qui permet l’exécution de code Python arbitraire lors du chargement d’un modèle. Les fichiers Python référencés via auto_map dans config.json s’exécutent avant même l’initialisation du modèle, sans nécessiter de poids malveillants.

📦 Deux vagues documentées :

  • Vague 1 (21 septembre – 12 octobre 2026) : 12 dépôts sous les comptes hhzz667 (Hugging Face) et wssb123e (ModelScope). Évolution en 3 semaines d’un backdoor SSH de 37 lignes vers un mineur fileless de 305 lignes. 728 téléchargements enregistrés avant suppression.
  • Vague 2 (après takedown) : 19 dépôts sous 5 comptes (MENXIANGYU, wjsbg, htt0118, soumikmahato, r1r13). Plus de 29 000 téléchargements, dont 28 412 pour le seul dépôt MENXIANGYU/qwen2-tiny. Les dépôts étaient encore actifs 8 jours après signalement.

🛠️ Anatomie du payload :

  • Phase 1 : Écriture d’un watchdog /tmp/.cch/svc.py, injection dans les fichiers de démarrage shell (.bashrc, .profile), et dans certains builds, reverse shell vers 212.32.253.3:443 ou :9443.
  • Phase 2 : Téléchargement et exécution du binaire mineur syscore.bin (peakminer, 40,6 Mo, UPX modifié avec marqueurs PEK!) via memfd_create + fexecve, déguisé en [kworker/u20:1].
  • Phase 3 : Reporting de statut encodé en base32 dans le registre Xinference local, suppression des mineurs concurrents.

💰 Impact financier confirmé : Le wallet de la vague 1 a reçu ~2 276 PRL (~5 000 USD) en 716 transactions. Un cluster de 9 workers GPU (profil notebook partagé) a rejoint le pool en 90 secondes lors de l’analyse. Un wallet MoneroOcean lié à la famille MONIADF-2 affiche 13 workers actifs.

🎯 Cibles : Infrastructures GPU auto-hébergées (Xinference, GPUStack), notebooks de recherche partagés, pipelines CI/CD, machines GPU louées.

🔓 Escalade : Le dépôt MENXIANGYU/qa-whl-1021, publié 8,5 heures après la divulgation, contient un script d’évasion de conteneur vers l’hôte physique, ciblant GPUStack /var/lib/gpustack.

🕵️ Attribution : Opérateur ou petit groupe sinophone, financièrement motivé. Indicateurs : commentaires en chinois simplifié, C2 sur Alibaba Cloud, ciblage de Xinference et Tencent Cloud, activité entre 18h38 et 21h19 UTC. Une ligne secondaire (soumikmahato) présente des commentaires en indonésien.

🚫 Limites des scanners : ClamAV et les scanners partenaires (Protect AI, JFrog) n’analysent pas le comportement du code Python référencé par auto_map. Le payload principal a retourné des résultats propres sur tous les scanners testés.

📄 Type d’article : Publication de recherche CTI avec indicateurs de compromission complets, destinée aux défenseurs d’infrastructures ML/AI.

🧠 TTPs et IOCs détectés

TTP

  • T1195.001 — Compromise Software Dependencies and Development Tools (Initial Access)
  • T1059.006 — Command and Scripting Interpreter: Python (Execution)
  • T1496 — Resource Hijacking (Impact)
  • T1098.004 — Account Manipulation: SSH Authorized Keys (Persistence)
  • T1546.004 — Event Triggered Execution: Unix Shell Configuration Modification (Persistence)
  • T1053.003 — Scheduled Task/Job: Cron (Persistence)
  • T1055 — Process Injection (Defense Evasion)
  • T1036.005 — Masquerading: Match Legitimate Name or Location (Defense Evasion)
  • T1071.001 — Application Layer Protocol: Web Protocols (Command and Control)
  • T1572 — Protocol Tunneling (Command and Control)
  • T1041 — Exfiltration Over C2 Channel (Exfiltration)
  • T1027 — Obfuscated Files or Information (Defense Evasion)
  • T1611 — Escape to Host (Privilege Escalation)
  • T1562.001 — Impair Defenses: Disable or Modify Tools (Defense Evasion)

IOC

  • IPv4 : 212.32.253.3 — AbuseIPDB · VT · ThreatFox
  • IPv4 : 38.55.133.49 — AbuseIPDB · VT · ThreatFox
  • IPv4 : 8.137.187.63 — AbuseIPDB · VT · ThreatFox
  • IPv4 : 103.97.176.121 — AbuseIPDB · VT · ThreatFox
  • IPv4 : 2.28.9.199 — AbuseIPDB · VT · ThreatFox
  • IPv4 : 173.249.209.96 — AbuseIPDB · VT · ThreatFox
  • IPv4 : 212.132.98.170 — AbuseIPDB · VT · ThreatFox
  • IPv4 : 49.12.44.127 — AbuseIPDB · VT · ThreatFox
  • IPv4 : 200.58.80.115 — AbuseIPDB · VT · ThreatFox
  • IPv4 : 178.33.123.26 — AbuseIPDB · VT · ThreatFox
  • Domaines : hz2006.aihzcc.top — VT · URLhaus · ThreatFox
  • Domaines : pearl-hk.luckypool.io — VT · URLhaus · ThreatFox
  • Domaines : pool.hashvault.pro — VT · URLhaus · ThreatFox
  • Domaines : pearl-sg1.luckypool.io — VT · URLhaus · ThreatFox
  • Domaines : de.pearl.herominers.com — VT · URLhaus · ThreatFox
  • Domaines : gulf.moneroocean.stream — VT · URLhaus · ThreatFox
  • Domaines : mine.c3pool.com — VT · URLhaus · ThreatFox
  • Domaines : prl-us.kryptex.network — VT · URLhaus · ThreatFox
  • Domaines : prl-eu.kryptex.network — VT · URLhaus · ThreatFox
  • Domaines : prl-sg.kryptex.network — VT · URLhaus · ThreatFox
  • Domaines : hf-mirror.com — VT · URLhaus · ThreatFox
  • Domaines : grows-stocks-vatican-flood.trycloudflare.com — VT · URLhaus · ThreatFox
  • URLs : https://huggingface.co/dsxk4mr8tq/qwen2-tiny/resolve/main/syscore.bin — URLhaus
  • URLs : https://hf-mirror.com/dsxk4mr8tq/qwen2-tiny/resolve/main/syscore.bin — URLhaus
  • URLs : https://hf-mirror.com/hhzz667/qwen2-final/resolve/main/syscore.bin — URLhaus
  • URLs : https://www.modelscope.cn/api/v1/models/wssb123e/qwen2-tiny/repo?Revision=master — URLhaus
  • URLs : https://huggingface.co/dsxk4mr8tq/qwen2-tiny-assets/resolve/main/sysx.bin — URLhaus
  • URLs : https://huggingface.co/MENXIANGYU/qwen2-tiny/resolve/main/syscore.bin — URLhaus
  • URLs : https://huggingface.co/MENXIANGYU/qwen2-tiny-3/resolve/main/syscore.bin — URLhaus
  • URLs : https://huggingface.co/MENXIANGYU/qwen2-tiny-4/resolve/main/syscore.bin — URLhaus
  • URLs : https://huggingface.co/MENXIANGYU/qwen2-tiny-5/resolve/main/syscore.bin — URLhaus
  • URLs : https://huggingface.co/MENXIANGYU/qwen2-tiny-6/resolve/main/syscore.bin — URLhaus
  • URLs : https://huggingface.co/MENXIANGYU/qwen2-tiny-9/resolve/main/syscore.bin — URLhaus
  • URLs : https://hf-mirror.com/MENXIANGYU/qwen2-tiny/resolve/main/syscore.bin — URLhaus
  • URLs : http://212.32.253.3:8898/lf_py.py — URLhaus
  • URLs : http://212.32.253.3:8895/ezv — URLhaus
  • URLs : http://38.55.133.49:8901/kitsd_v12.sh — URLhaus
  • URLs : http://212.32.253.3:8898/kitsd_v12.sh — URLhaus
  • URLs : http://103.97.176.121:8090/m2.bin — URLhaus
  • URLs : https://huggingface.co/wjsbg/zh-assets/resolve/main/m2.bin — URLhaus
  • URLs : https://hf-mirror.com/wjsbg/zh-assets/resolve/main/m2.bin — URLhaus
  • URLs : https://3.112.174.116.sslip.io/sysd-kit.tgz — URLhaus
  • URLs : https://grows-stocks-vatican-flood.trycloudflare.com/beacon — URLhaus
  • URLs : http://173.249.209.96:8081/ag.sh — URLhaus
  • URLs : http://173.249.209.96:8000/r/aliyun3g?t=hl9f3a7c — URLhaus
  • URLs : http://173.249.209.96:8001/xmrig-static — URLhaus
  • URLs : https://huggingface.co/MONIADF-2/qwen2-hl/resolve/main/kx.tgz — URLhaus
  • SHA256 : 88f4b95a1c3d0a0d9638dc6e6 — VT · MalwareBazaar
  • SHA256 : 414b3cf7a288eaa592b0f03d8 — VT · MalwareBazaar
  • SHA256 : 587e3c3be3c75eb6586d69b25 — VT · MalwareBazaar
  • SHA256 : b0e1ae6d73d656b203514f498 — VT · MalwareBazaar
  • SHA256 : 6b1e531c9e799a6df1472acc1 — VT · MalwareBazaar
  • SHA256 : 9d62179c94faf0c8eb8670497 — VT · MalwareBazaar
  • SHA256 : 6a837d3042b9b8b6266c75b07 — VT · MalwareBazaar
  • SHA256 : 170ef5754bea51c3b05ae4b6c — VT · MalwareBazaar
  • SHA256 : 2cd9328715bbffb6b090a58de — VT · MalwareBazaar
  • SHA256 : 5dc4b927fb91442a66a2e02c1 — VT · MalwareBazaar
  • SHA256 : 849ce59ffb2ae55e4131111ac — VT · MalwareBazaar
  • SHA256 : 0fc39482f05fb88c13ac9edc3 — VT · MalwareBazaar
  • SHA256 : ac9c284246570aed87c939bca — VT · MalwareBazaar
  • SHA256 : 0bb9f618c7b5863d8523e0 — VT · MalwareBazaar
  • SHA256 : 6d8b718af302338def360d813 — VT · MalwareBazaar
  • CVEs : CVE-2024-34359 — NVD · CIRCL
  • CVEs : CVE-2026-22807 — NVD · CIRCL
  • Fichiers : syscore.bin
  • Fichiers : sysx.bin
  • Fichiers : modeling_evil.py
  • Fichiers : modeling_evil2.py
  • Fichiers : modeling_evil6.py
  • Fichiers : modeling_qtz.py
  • Fichiers : modeling_hl.py
  • Fichiers : configuration_parasit.py
  • Fichiers : modeling_parasit.py
  • Fichiers : tokenization_probe.py
  • Fichiers : configuration_custom.py
  • Fichiers : svc.py
  • Fichiers : g20.py
  • Fichiers : e.sh
  • Fichiers : ag.sh
  • Fichiers : sysd-kit.tgz
  • Fichiers : m2.bin
  • Fichiers : kx.tgz
  • Fichiers : kitsd_v12.sh
  • Fichiers : lf_py.py
  • Chemins : /tmp/.cch/svc.py
  • Chemins : /tmp/.cch/sync
  • Chemins : /tmp/.cch/o
  • Chemins : /tmp/.cchx
  • Chemins : /tmp/.kitsd
  • Chemins : /root/.bashrc
  • Chemins : /root/.profile
  • Chemins : /etc/cron.d/.sync-helper
  • Chemins : /tmp/.qa_pwned
  • Chemins : /root/.xinference/cache
  • Chemins : /tmp/.cache-hf/g20.py
  • Chemins : /tmp/.c/kit.tar.gz
  • Chemins : /tmp/.c/app/
  • Chemins : /tmp/.c.pid
  • Chemins : /tmp/.c.log
  • Chemins : /tmp/.c.out
  • Chemins : /tmp/.h9ag
  • Chemins : /tmp/.h9mark
  • Chemins : /root/.mx
  • Chemins : /tmp/.mx
  • Chemins : /var/tmp/.mx
  • Chemins : /dev/shm/.mx
  • Chemins : /root/.hl/poll.sh
  • Chemins : /root/.hl/boot.out
  • Chemins : /root/.hl/t.out
  • Chemins : /tmp/.xai_loot
  • Chemins : /tmp/lf_py.py
  • Chemins : /tmp/ezv_proof.txt
  • Chemins : /tmp/.xi2026
  • Chemins : /tmp/.xi2026_lock
  • Chemins : /tmp/.prb4

⚠️ À propos de ces IOC — ils sont extraits automatiquement de l’article original le 31 octobre 2026 et n’ont pas fait l’objet d’une vérification externe. Un indicateur peut avoir été réattribué depuis : une IP de C2 peut redevenir un service légitime, un domaine sinkholé peut changer de propriétaire. Aucune garantie d’exactitude ni d’actualité — contrôlez leur validité avant tout usage opérationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.

Malware / Outils

  • peakminer (other)
  • XMRig (other)
  • syscore.bin (other)
  • modeling_evil2.py (loader)
  • gsocket (backdoor)
  • svc.py watchdog (other)

🟢 Indice de vérification factuelle : 75/100 (haute)

  • ⬜ pluto.security — source non référencée (0pts)
  • ✅ 37522 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 115 IOCs dont des hashes (15pts)
  • ✅ 4/12 IOCs confirmés (AbuseIPDB, MalwareBazaar, ThreatFox, URLhaus, VirusTotal) (15pts)
  • ✅ 14 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ✅ 2/2 CVE(s) confirmée(s) (CIRCL) (5pts)

IOCs confirmés externellement :

  • 212.32.253.3 (ip) → VT (3/92 détections)
  • 38.55.133.49 (ip) → AbuseIPDB (56% confiance, 26 signalements)
  • 8.137.187.63 (ip) → VT (8/92 détections) + ThreatFox (Unknown malware)
  • pool.hashvault.pro (domain) → VT (15/92 détections)

🔗 Source originale : https://pluto.security/blog/hugging-face-malware-campaign-load-mine/?utm_source=infosec-mashup.santolaria.net&utm_medium=newsletter&utm_campaign=infosec-mashup-44-2026-decentralized-until-something-needs-freezing