AI

Model z Hugging Face spustí cizí kód dřív než váhy. Miner má 28 tisíc stažení

Zdroj: Pluto Security

Typografická karta s oknem terminálu a nápisem trust_remote_code
Ilustrace: redakce

Model z Hugging Face může spustit Python z repozitáře dřív, než se načte první váha. Pluto Security našel 31 takových repozitářů na sedmi účtech a nejúspěšnější má 28 412 stažení — místo vah 42bajtový soubor a místo modelu miner. Kdo ho načetl s trust_remote_code, měl na GPU serveru cizí proces a často i zadní vrátka.

Jak to funguje

trust_remote_code=True je dokumentovaná volba, která dovolí repozitáři dodat vlastní Python implementaci modelu. Transformers přečte auto_map v config.json, stáhne uvedený modul a importuje ho — a Python při importu spustí jeho kód na úrovni modulu. Nejsou k tomu potřeba otrávené váhy ani exploit v picklu, stačí povolení spustit kód.

Čísla z reportu

  • 31 škodlivých repozitářů na sedmi účtech, ve dvou vlnách od září 2026.
  • Druhá vlna: 19 repozitářů, přes 29 000 stažení, živých osm dní po nahlášení.
  • Celkem s navázanými modely přes 32 000 stažení — to je počet stažení, ne potvrzených infekcí.
  • MENXIANGYU/qwen2-tiny: 28 412 stažení k 28. 10. 2026, model.safetensors má 42 bajtů a žádné tensory, kód je v modeling_evil2.py.
  • Peněženka první vlny: zhruba 2 276 PRL, kolem 5 000 USD, v 716 transakcích.
  • Cílem jsou GPU hosty se self-hosted inference (Xinference, GPUStack), pronajaté GPU a CI joby s malými testovacími modely.

Proč to projde skenerem

Hugging Face prohání každý soubor antivirem a partnery Protect AI a JFrog. Ti hledají známý malware a nebezpečné formáty vah, ne to, co dělá Python kolem nich. Nejúspěšnější payload prošel čistý a JFrog u něj uvedl, že „to není machine-learning model". Soubor bez vah, který má vedle sebe modeling_evil2.py, je pro takový skener neviditelný.

Tři cesty, kterými model spustí kód

CestaKdy se kód spustíJak je na tom
Pickle, Keras, SavedModelpři načtení vahnejznámější riziko, safetensors ho odstraňuje
GGUF parserpři čtení souboruCVE-2024-34359 v llama-cpp-python
trust_remote_codepři importu, před váhamitudy šla tahle kampaň
Pro koho—kdo tahá modely z Hugging Face: čtěte .py, ne jen config.json

Stejnou děrou se prošly i nástroje. vLLM ve verzích 0.10.1 až 0.14.0 načítal auto_map moduly bez ohledu na nastavení trust_remote_code (CVE-2026-22807), opraveno v 0.14.0. Unsloth Studio měl trust_remote_code=True natvrdo a opravu dostal ve verzi 2026.6.9.

Jak ověřit, jestli jste zasažení

# kde se trust_remote_code zapíná
grep -rn "trust_remote_code" /etc/vllm ~/docker-compose.y*ml 2>/dev/null
# které modely v cache mají auto_map
grep -rl "auto_map" ~/.cache/huggingface --include=config.json 2>/dev/null
# artefakty z reportu
ls -la /tmp/.cch/svc.py 2>/dev/null
ps -eo user,pid,etime,cmd | grep -Ei "peakminer|svc\.py" | grep -v grep
# verze vLLM kvůli CVE-2026-22807
python3 -c "import vllm; print(vllm.__version__)"

Co s tím

Zabít miner nestačí. Report popisuje watchdoga v /tmp/.cch/svc.py, který se obnovuje, a druhá vlna má místo zapsaného SSH klíče reverse shell. Kdo model načetl, má podle autorů považovat stroj za kompromitovaný, projít indikátory z reportu a vyměnit všechny přístupy, na které se stroj dostal.

Repozitáře byly osm dní po nahlášení pořád živé. Hugging Face hlavní model zablokoval, ale kopie nahraná 25. října pod jiným účtem běžela dál.

Pro provozovatele lokálních modelů: trust_remote_code zapínejte jen u kódu, který jste přečetli, stahujte na konkrétní commit a ne na main, a inference server držte mimo síť s produkčními daty. Model bez vah, který má vedle sebe .py soubor, není model.

Zdroje

  1. Load/Mine: A Hugging Face Malware Campaign Returns After Takedown — Pluto Security
  2. Hugging Face malware campaign returns to hijack GPUs for crypto mining — BleepingComputer

Odkazy vedou na primární zdroje. Text článku je redakční shrnutí, ne převzatá zpráva.