rust-iot-platform הוא פרויקט קוד פתוח לניהול מכשירי IoT. לפי הרשומה, רוב נתיבי ה-API שלו אינם כוללים בדיקת הזדהות, ולכן מי שפונה אליהם ישירות יכול ליצור חשבונות משתמש, לעדכן אותם, לקרוא את רשימתם ולמחוק אותם, בלי להציג פרטי אימות כלשהם. הציון שנקבע לחולשה הוא 9.3 מתוך 10, והיא מתוארת בכל מה שעד הקומיט 5df942ab.
מה החולשה?
בשרתי ווב מסוימים בדיקת ההזדהות אינה שכבה אחת שעוטפת את כל התנועה הנכנסת, אלא דרישה שכל פונקציה שמטפלת בבקשה מצהירה עליה בעצמה, בחתימה שלה. הצהרה כזאת אומרת לשרת שאסור להפעיל את הפונקציה לפני שהבדיקה עברה. הצד השני של אותו מבנה הוא שפונקציה שלא הצהירה על הדרישה פשוט אינה נבדקת, והיא תענה לכל מי שפנה אליה.
לפי הרשומה, זה מה שקרה ברוב נתיבי ה-API של הפרויקט. ההתראה שמצורפת לרשומה קוראת למנגנון הזה request guards, ומתארת את החולשה כעקיפת אימות שנובעת מכך שהם חסרים בחתימות של הפונקציות. ברשומה הסוג מסומן CWE-306, היעדר אימות לפעולה קריטית.
מה שהופך את זה מבאג לחולשה בציון 9.3 הוא אילו נתיבים נשארו פתוחים. הרשומה מונה פעולות על חשבונות משתמש, ובהן יצירה, עדכון, קריאה ומחיקה, והקובץ שהיא מצביעה עליו הוא user_router.rs, הנתב שמטפל בדיוק בהן. מי שיכול ליצור חשבון במערכת אינו צריך לפרוץ אליה.
מי מושפע?
כאן נדרשת כנות: זה אינו פרויקט נפוץ. rust-iot-platform הוא מאגר קוד פתוח ב-GitHub, ולא מוצר שארגונים קונים או שמשתמשים מתקינים. הרשומה אינה מציינת יצרן ואינה מציינת שם של מוצר מסחרי, ובישראל הסיכוי שמישהו מריץ אותו נמוך.
מי שכן צריך לעשות כאן משהו הוא מי שלקח את הקוד הזה והקים ממנו מערכת, בפרויקט ניסיוני, במעבדה או כבסיס לפיתוח. בסביבות IoT זה תרחיש אמיתי: קוד פתוח שנראה מתאים נלקח כנקודת פתיחה, ולפעמים הוא נשאר באוויר אחר כך.
פרט אחד חשוב לבדיקה עצמה. לפרויקט אין מספור גרסאות ברשומה, והיא מתארת את המצב עד הקומיט 5df942ab. כלומר הדרך לדעת איפה אתם אינה מספר גרסה אלא הקומיט שממנו נלקח הקוד שלכם.
האם מנוצלת בפועל?
אין דיווח על ניצול, והחולשה אינה בקטלוג ה-KEV של סוכנות הסייבר האמריקאית CISA, שמרכז חולשות שתוקפים נראו משתמשים בהן בפועל.
שתי עובדות מהרשומה שוות תשומת לב יחד. הראשונה היא שהניצול אינו דורש שום פרטי אימות. השנייה היא שהקובץ המדויק שבו הבעיה יושבת מצורף לרשומה כקישור ישיר. מי שרוצה לדעת אילו נתיבים חסרים את ההצהרה אינו צריך לחפש.
מה עושים?
1. קודם כול, השאלה אם זה נוגע אליכם. אם אינכם מריצים את הפרויקט הזה, אין כאן מה לעשות.
2. אם אתם כן מריצים אותו, בדקו מאיזה קומיט נלקח הקוד שלכם והשוו אותו ל-5df942ab שמופיע ברשומה. במאגר הפרויקט אפשר לראות מה השתנה מאז.
3. פתחו את הקובץ שהרשומה מצביעה עליו ובדקו בקוד שלכם אילו פונקציות טיפול מצהירות על דרישת ההזדהות ואילו לא. זו בדיקה שאפשר לעשות בעיניים, והיא גם מה שצריך לתקן.
4. כל עוד הנתיבים האלה אינם דורשים הזדהות, אל תחשפו את ה-API לאינטרנט. הגבילו את הגישה אליו בשכבת הרשת, למשל לכתובות מסוימות או דרך שער שמחייב הזדהות לפני שהבקשה מגיעה לשרת בכלל.
5. ההתראה של VulnCheck היא התיאור המפורט של המקרה, והמקום לבדוק בו אם פורסם מאז תיקון.