malware
Published 2026-10-29 New
Verified 2026-10-30

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.

ai cloud