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

  1. Przypnij wersję Diffusers w pliku requirements.txt lub pliku lock, aby zapobiec przypadkowym aktualizacjom do podatnej wersji.
  2. 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.
  3. 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.
  4. 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.
  5. 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.