Pluto Security publiceerde op 29 oktober 2026 een rapport over Load/Mine, een campagne die volgens het beveiligingsbedrijf malware verspreidde via modelrepositories op Hugging Face en een spiegel op ModelScope. In de eindtelling tot en met 28 oktober staan 44 repositories en 32.376 downloads. Die downloads zijn geen telling van bevestigde infecties of unieke slachtoffers. Pluto Security beschrijft de campagne en zijn bevindingen.
Wat Pluto Security telde
De 44 repositories bestaan uit 31 repositories die Pluto tot de campagne rekent en 13 aanvullende, gekoppelde repositories. Pluto groepeert die gekoppelde repositories apart: overeenkomstige technieken bewezen volgens het bedrijf geen gezamenlijk eigendom.
| Groep repositories | Aantal repositories | Downloads tot en met 28 oktober | Afbakening |
| Eerste golf | 12 | 728 | Downloads geregistreerd vóór verwijdering |
| Tweede golf | 19 | 29.090 | Campagnerepositories |
| Gekoppelde repositories | 13 | 2.558 | Gedeelde technieken, geen bewezen gemeenschappelijk eigendom |
| Totaal | 44 | 32.376 | Inclusief gekoppelde repositories |
De verschillen tussen deze groepen zijn van belang: het totaal omvat ook repositories die Pluto als gekoppeld classificeerde, niet als bewezen onderdeel van dezelfde operatie. De downloads geven aan hoe vaak repositories zijn gedownload, niet hoeveel apparaten of mensen zijn getroffen.
Pluto beschreef twee golven. Nadat accounts uit de eerste golf waren verwijderd, volgde volgens het bedrijf binnen enkele dagen een tweede golf met aangepaste payloads. Voor de uitgelichte repository MENXIANGYU/qwen2-tiny rapporteerde Pluto 7.354 downloads op 20 oktober 2026, 9.584 binnen enkele uren, 18.012 op 25 oktober, 25.854 op 27 oktober en 28.412 op 28 oktober. Het gaat om gedateerde downloadstanden voor die repository.
Hoe laden van een model Python-code kan uitvoeren
Pluto beschreef een route waarbij config.json via auto_map een Python-module en klasse aanwijst. Wanneer Transformers die module importeert, voert Python de code op moduleniveau uit voordat de gevraagde modelklasse wordt teruggegeven. Volgens Pluto is daarvoor expliciet vertrouwen in aangepaste code nodig, bijvoorbeeld via trust_remote_code=True of een interactieve bevestiging. Dat is geen standaardinstelling.
De payload hoeft daarvoor niet in de modelgewichten te zitten. In MENXIANGYU/qwen2-tiny was model.safetensors volgens Pluto 42 bytes groot en bevatte het geen tensors; de Python-payload stond in modeling_evil2.py. Voor wie een modelrepository beoordeelt, is dus ook de aangewezen Python-code relevant, niet alleen het bestand met gewichten.
Pluto meldde bovendien dat geen van de 12 repositories uit de eerste golf door de scanners werd gemarkeerd. De scanners die Pluto op het Python-bestand van de uitgelichte repository uitvoerde, gaven volgens het bedrijf veilige resultaten. Die resultaten golden voor de onderzochte repositories en uitgevoerde scans. Pluto adviseert daarom de aangewezen code zelf te beoordelen voordat aangepaste code wordt ingeschakeld.
Maatregelen voor teams met lokale AI-systemen
Vooraf adviseert Pluto Security de Python-bestanden waarnaar een model verwijst te controleren, een beoordeelde revisie vast te zetten en de rechten en netwerktoegang van de uitvoeromgeving te beperken. Houd productiegeheimen buiten een omgeving waarin niet-vertrouwde code kan draaien.
Teams die een genoemde repository met aangepaste code hebben geladen, kunnen de door Pluto beschreven host- en Xinference-indicatoren controleren. Als een systeem mogelijk is getroffen, adviseert Pluto het te isoleren en bewijs te bewaren. Daarna noemt het bedrijf het verwijderen van persistentie en het roteren van toegankelijke inloggegevens vanaf een schone machine. Als de integriteit van een host niet kan worden vastgesteld, adviseert Pluto die opnieuw op te bouwen.