CVE-2026-44827 pozwala atakującemu na wykonanie dowolnego kodu podczas ładowania modelu Hugging Face Diffusers, nawet jeśli flaga trust_remote_code jest wyłączona. Badacze nazwali tę lukę „FaceHugger” i powiązali ją z błędem typu race condition w dwuetapowym procesie ładowania modeli w tej bibliotece. Każdy potok (pipeline), który pobiera modele z hubu, może zostać dotknięty tym problemem.
Dlaczego ta podatność jest istotna
Diffusers napędza modele text-to-image oraz inne modele dyfuzyjne. W lipcu 2026 roku odnotowano 8,1 miliona pobrań, co oznacza, że niezliczone zadania CI/CD, obrazy kontenerów i korporacyjne usługi wnioskowania (inference) zależą od tej biblioteki. Błąd ten omija główny mechanizm bezpieczeństwa (trust_remote_code), który programiści włączają, aby blokować niezaufany kod Python dostarczany wraz z modelem.
Jak działa to obejście
- Dwuetapowe ładowanie: Diffusers najpierw pobiera konfigurację modelu, a następnie drugie zapytanie pobiera wagi modelu oraz wszelki powiązany z nim kod.
- Race condition (wyścig): Kontrola bezpieczeństwa sprawdzająca pierwsze zapytanie nie obejmuje drugiego.
- Wstrzykiwanie ładunku (payload): Atakujący, który kontroluje drugie zapytanie, wstrzykuje złośliwy kod, który biblioteka później wykonuje, całkowicie omijając mechanizm zaufania.
Ponieważ kontrola dotyczy tylko początkowego zapytania, wyłączenie trust_remote_code daje złudne poczucie bezpieczeństwa.
Natychmiastowe kroki dla programistów
- Przypnij wersję Diffusers w pliku
requirements.txtlub pliku lock, aby zapobiec przypadkowym aktualizacjom do podatnej wersji. - Unikaj pobierania modeli „w locie” w środowisku produkcyjnym. Pobieraj modele do zaufanego magazynu artefaktów (np. wewnętrznego bucketu S3) i ładuj je stamtąd.
- Audytuj repozytoria modeli przed użyciem. Zweryfikuj, czy pliki kodu modelu zgadzają się z oczekiwanymi sumami kontrolnymi (hashes) lub czy pochodzą ze sprawdzonego źródła.
- Wprowadź kontrolę ruchu wychodzącego (egress), aby agenci budowania i serwery wnioskowania nie mogli łączyć się z publicznym hubem Hugging Face, chyba że na to pozwolisz.
- Uruchamiaj ładowanie modeli wewnątrz odizolowanych kontenerów lub piaskownic (sandboxes) z minimalnymi uprawnieniami, co ograniczy skutki wykonania niepożądanego kodu.
Podsumowanie:
Błąd FaceHugger pokazuje, że wyłączenie trust_remote_code to za mało. Dopóki nie zaktualizujesz Diffusers i nie zabezpieczysz swojego potoku wprowadzania modeli (model ingestion pipeline), każde pobranie zdalnego modelu pozostaje potencjalnym punktem wejścia dla złośliwego kodu.
