Pluto Security: a crypto-mining and backdoor campaign on Hugging Face returned within days of takedown; 31 malicious repositories posing as small Qwen2 test models run code on load via trust_remote_code
Pluto Security published 'Load/Mine: A Hugging Face Malware Campaign Returns After Takedown' on 29 October 2026. Pluto says it tracked 31 malicious repositories across seven Hugging Face accounts, that the 19 second-wave repositories have been downloaded more than 29,000 times and were still live eight days after it reported them, and that with linked models downloads pass 32,000, a figure that "measures downloads, not confirmed infections or unique victims." (source: Pluto Security)
Pluto says loading one of the models with trust_remote_code=True runs the publisher's Python on the machine before any weights load, and that the payloads were written for GPU hosts running self-hosted inference, especially Xinference and GPUStack.
It says the flagship payload scanned clean, that Hugging Face and ModelScope took down the first-wave accounts after its report, and that within days a second wave appeared under new accounts, with revised loaders and reverse shells in place of the hardcoded SSH key. Pluto lists MENXIANGYU/qwen2-tiny, which it calls a representative mining build, at 28,412 downloads on 28 October. (source: Pluto Security)
BleepingComputer reported on 29 October that Hugging Face has disabled access to that model, but a near-identical copy uploaded on 25 October by another account was still live when it wrote, and BleepingComputer confirmed it contains the same miner and reverse shell. (source: BleepingComputer)
- Product
- Hugging Face model repositories (models posing as Qwen2 test checkpoints); self-hosted inference servers such as Xinference and GPUStack
- Versions
- n/a — malicious model repositories
- Exploited in Australia?
- unknown
- Patch to
- Pluto's advice: if you loaded one of the listed models with custom code enabled, check the machine for compromise even if loading failed; look for /tmp/.cch/, unexpected svc.py processes and a process named [kworker/u20:1] carrying mining arguments; check shell startup files, cron jobs, SSH authorized_keys and model registrations; rotate credentials the process could reach from a clean machine, and rebuild if integrity cannot be established. Require authentication on the Xinference API, and review and pin custom model code before loading it.
