Pluto Security opisało kampanię, w której złośliwe repozytoria modeli na Hugging Face uruchamiały koparki kryptowalut i backdoory. W końcowym zestawieniu, obejmującym dane do 28 października 2026 r., badacze policzyli 44 repozytoria i 32 376 pobrań. Opisali też, jak włączenie niestandardowego kodu mogło uruchomić Python z repozytorium. Raport Pluto Security zaznacza, że pobrania nie są liczbą potwierdzonych infekcji ani unikalnych ofiar.

Co obejmuje końcowe zestawienie

Pluto Security podzieliło 44 repozytoria na dwie fale kampanii oraz repozytoria powiązane. Te ostatnie łączyły się z kampanią technikami, które same w sobie nie dowodziły wspólnego właściciela.

Grupa repozytoriówLiczba repozytoriówPobrania do 28 października 2026 r.Zakres
Pierwsza fala12728Pobrania zarejestrowane przed usunięciem repozytoriów
Druga fala1929 090Repozytoria zaliczone przez Pluto do kampanii
Repozytoria powiązane132 558Powiązane technikami, bez dowodu wspólnego właściciela
Łącznie4432 376Zestawienie Pluto obejmujące wszystkie trzy grupy

Wyróżnione repozytorium MENXIANGYU/qwen2-tiny odnotowało 7 354 pobrania 20 października, a w ciągu kilku godzin liczba wzrosła do 9 584. Pluto podało następnie 18 012 pobrań 25 października, 25 854 27 października i 28 412 dzień później. To datowane liczniki repozytorium, a nie liczba urządzeń, na których uruchomiono złośliwy kod.

Jak ładowanie modelu uruchamia kod Python

Według Pluto Security kod nie musiał znajdować się w wagach modelu. W opisanej ścieżce plik config.json wskazywał przez auto_map moduł i klasę Pythona. Gdy użytkownik włączył trust_remote_code=True, biblioteka Transformers importowała ten moduł. Instrukcje Pythona wykonywane podczas importu uruchamiały się, zanim biblioteka zwróciła żądaną klasę modelu. Pluto podkreśliło, że to udokumentowany, lecz niewłączony domyślnie mechanizm; wymaga jawnego zaufania do kodu albo potwierdzenia w interaktywnym monicie.

W analizowanym przez Pluto repozytorium MENXIANGYU/qwen2-tiny plik model.safetensors miał 42 bajty i nie zawierał tensorów. Ładunek znajdował się w pliku modeling_evil2.py. Pluto zidentyfikowało odzyskany program do kopania kryptowalut jako PeakMiner, a w niektórych analizowanych wersjach opisało też mechanizmy trwałości i zdalnego dostępu.

Wyniki skanowania nie zastępowały przeglądu kodu. Pluto podało, że żadne z 12 repozytoriów pierwszej fali nie zostało oznaczone przez użyte skanery, a skanery sprawdzające flagowy ładunek zwracały bezpieczny wynik. To rezultaty konkretnych kontroli opisanych przez Pluto, nie ocena wszystkich skanerów ani środowisk.

Jak ograniczyć ryzyko w lokalnym środowisku AI

Pluto zaleca przejrzeć pliki Python wskazane przez repozytorium przed włączeniem niestandardowego kodu, przypiąć sprawdzoną rewizję oraz ograniczyć uprawnienia procesu i jego dostęp do sieci. Produkcyjne sekrety nie powinny być dostępne dla niezaufanego kodu.

Zespołom, które załadowały wymienione repozytoria z włączonym kodem niestandardowym, Pluto zaleca sprawdzenie wskaźników hosta i Xinference. Jeśli system może być dotknięty, rekomenduje jego izolację i zachowanie dowodów, a następnie usunięcie mechanizmów trwałości oraz zmianę dostępnych poświadczeń z czystej maszyny. Gdy nie da się potwierdzić integralności hosta, Pluto zaleca jego odbudowę.