FaceHugger: tre CVE-er i Diffusers omgår trust_remote_code
Oppgrader Diffusers til minst 0.38.0, som tetter tre høyalvorlige hull der et preparert modellrepo kjører egen Python-kode på maskinen din under helt vanlig modellasting.
8,1 millioner nedlastinger fikk Hugging Faces Diffusers-bibliotek i juli 2026 alene, ifølge pepy.tech-tall gjengitt av The Hacker News. Sikkerhetsselskapet Zafran Labs har publisert en analyse av tre høyalvorlige sårbarheter i nettopp dette biblioteket, samlet under navnet FaceHugger, som lar et modellrepo kjøre vilkårlig kode når du laster modellen.
Fellesnevneren er at sikkerhetsvakten kjører for tidlig. Diffusers henter en modell fra Hugging Face-hubben i to separate HTTP-kall, ikke én atomær operasjon, og trust_remote_code-sjekken kjøres bare mot det første. Det som dukker opp i custom_pipeline-flyten etter den sjekken, passerer usett. Zafran sporer alle tre variantene tilbake til klassisk time-of-check-to-time-of-use.
«Disse sårbarhetene omgår trust_remote_code, sikkerhetsmekanismen som skal hindre at ugjennomgått kode kjøres når egendefinerte pipelines lastes» — Gal Zaban og Ido Shani, Zafran Labs
Datoene er verdt å merke seg, for de endrer hva saken egentlig handler om. GitHubs sikkerhetsdatabase publiserte CVE-2026-44827 og CVE-2026-44513 den 7. mai og CVE-2026-45804 den 20. mai, alle med CVSS-score på henholdsvis 8,8, 8,8 og 7,5. Alle tre er patchet i Diffusers 0.38.0, som kom 1. mai 2026. Nyeste utgivelse er 0.39.0 fra 3. juli. Zafrans gjennomgang er altså ingen fersk nulldag, men en detaljert beskrivelse av hull som har vært lukket i tre måneder.
Det betyr at spørsmålet ikke er om biblioteket er trygt, men om din versjon er det. Kjører du en pinnet requirements.txt, et container-image du bygget i vinter eller en CI-jobb som aldri har blitt rørt siden oppsettet, har du vært eksponert siden mai uten å vite det. Rammet er enhver som kaller DiffusionPipeline.from_pretrained med egendefinerte pipelines, og default-verdien hjelper deg ikke: å utelate trust_remote_code gir samme resultat som å sette den til False, altså full omgåelse.
Den underliggende antakelsen er den farligste delen. Modellfiler behandles rutinemessig som passive data du bare laster ned, mens konfigurasjonsfiler, loadere og pipeline-kode i et repo krysser over til kjørbar kode i det øyeblikket biblioteket leser dem. Et modellrepo er i praksis en kodeleveranse, og bør revideres deretter.
«Ikke pek custom_pipeline mot et annet hub-repo enn hovedmodellen før du har lest pipeline.py i det» — anbefaling fra Diffusers-vedlikeholderne
Hva bør du gjøre?
- Kjør
pip show diffusers. Er versjonen under 0.38.0, oppgrader før neste modellasting. - Se etter pinnede kopier i container-images, Dockerfiler, lock-filer og CI-runnere. De holder ofte på en gammel versjon lenge etter at utviklingsmiljøet ditt er oppdatert.
- Inspiser snapshotet før du laster lokalt: se etter uventede .py-filer i rot-mappa og under komponent-mapper som unet/ og scheduler/, som vedlikeholderne anbefaler når patching må vente.
KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.