בגרסאות diffusers שקודמות ל-0.38.0 קיימת חולשה שמאפשרת למאגר מודלים ב-Hugging Face Hub להריץ קוד פייתון משלו אצל מי שטוען אותו, בלי שהמשתמש ביקש צנרת מותאמת ובלי שאישר קוד מרוחק. הציון הוא 7.5, והתיקון נמצא בגרסה 0.38.0.

מה החולשה?

הפעם ההגנה דווקא נכנסה לפעולה, וזה מה שהופך את המקרה למעניין. הספרייה בודקת את קובץ ההגדרות model_index.json ואת קוד הצנרת המותאמת, ורק אחר כך טוענת. הבדיקה נכונה והיא רצה על הדברים הנכונים. הפער הוא בזמן שביניהם.

הטעינה בפועל אינה חוזרת אל מה שנבדק. היא קוראת מתוך תיקיית מטמון מקומית, ולפי הרשומה התיקייה הזאת יכולה להשתנות אחרי שהבדיקה הסתיימה. כלומר הקוד שנבדק ואושר אינו בהכרח הקוד שנטען בסוף.

למשפחה הזאת של באגים קוראים TOCTOU, קיצור של time of check to time of use, ובעברית פשוטה פער בין רגע הבדיקה לרגע השימוש. הדימוי המתאים הוא בודק בטחוני שמאשר מזוודה ואז מניח אותה בצד לרגע לפני שהיא נכנסת למטוס. הבדיקה הייתה אמיתית, היא פשוט כבר לא מתארת את מה שנמצא שם עכשיו.

התוצאה, לפי הרשומה, היא שמאגר עם קוד צנרת בקובץ .py יכול לרוץ דרך מסלול הצנרת המותאמת בלי שהמשתמש העביר custom_pipeline ובלי trust_remote_code=True.

וקטור ה-CVSS מסמן את מורכבות התקיפה כגבוהה, וזה מתיישב עם המנגנון: התוקף צריך שהתזמון יסתדר, לא רק להעלות קובץ ולחכות. זה גם ההסבר לציון 7.5.

מי מושפע?

לפי הרשומה, גרסאות diffusers שקודמות ל-0.38.0.

מי שנוגע בזה בפועל הוא כל מי שמושך מודלים מוכנים מ-Hugging Face ומריץ אותם, ובישראל זאת עבודה יומיומית בצוותי מחקר ובצוותי מוצר. ההבדל מהמקרה הרגיל הוא שכאן המשתמש לא נדרש לבקש שום דבר מיוחד, ולכן גם לא עולה אצלו החשד שהיה עולה אילו התבקש לאשר קוד זר.

האם מנוצלת בפועל?

אין דיווח על ניצול, והחולשה אינה נמצאת בקטלוג ה-KEV שמנהלת סוכנות הסייבר האמריקאית CISA, הקטלוג שאליו נכנסות רק חולשות שיש ראיות שתוקפים משתמשים בהן.

מורכבות התקיפה הגבוהה גם הופכת אותה לפחות אטרקטיבית לסריקה רחבה ואוטומטית. היא לא הופכת אותה לתאורטית.

מה עושים?

שדרגו ל-diffusers 0.38.0 ומעלה. זאת הגרסה שסוגרת את הפער, והשדרוג הוא הפעולה היחידה שמטפלת בשורש.

עד שזה קורה, שימו לב במיוחד לאיפה יושב המטמון. החולשה תלויה בכך שתיקיית המטמון משתנה בין הבדיקה לטעינה, ולכן מטמון משותף בין תהליכים, בין משתמשים או בין עבודות שרצות במקביל על אותה מכונה הוא בדיוק התנאי הגרוע. מטמון פרטי לתהליך, בנתיב שאף גורם אחר אינו כותב אליו בזמן הריצה, מצמצם את החלון.

אם אתם מריצים טעינת מודלים בתוך תהליכי בנייה או אימון אוטומטיים, בדקו איזה נתיב מטמון מוגדר שם ומי עוד ניגש אליו.

הודעת האבטחה של הפרויקט, יחד עם התיקון עצמו, נמצאת בגיטהאב.