התחברות לנתב עם מפתח במקום עם סיסמה נחשבת לדרך הבטוחה לעשות את זה, ובדיוק שם יושבת החולשה. RouterOS בדק רק חלק מהמפתח הציבורי של מי שמתחבר מול המפתח השמור אצלו, ומי שמכיר מפתח ציבורי מורשה יכול היה להיכנס בתור בעליו בלי להחזיק במפתח הפרטי. הציון שנקבע לחולשה הוא 9.2 מתוך 10, והיא תוקנה בגרסאות 6.49.21 ו-7.23.4 (long-term) ו-7.24.2 (stable).

מה החולשה?

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

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

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

מי מושפע?

ציוד שמריץ RouterOS בגרסה שקודמת ל-6.49.21, ל-7.23.4 או ל-7.24.2 ושמוגדרת בו התחברות SSH עם מפתחות. אם ההתחברות לנתב אצלכם היא עם שם משתמש וסיסמה בלבד, החולשה הספציפית הזאת לא נוגעת לכם, אבל שאר החולשות שתוקנו באותן גרסאות כן.

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

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

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

לצד זה, אחד המקורות ברשומה הוא התראה של CERT Polska שכותרתה מדברת על ניצול פעיל של חולשות ב-RouterOS, בלי לאפשר לזהות ממנה איזו. שווה לקרוא אותה לפני שמחליטים שהעדכון יכול לחכות.

מה עושים?

עדכנו את גרסת RouterOS: בתפריט System ואז Packages, Check For Updates ואז Download&Install, עד 6.49.21 או 7.23.4 בערוץ ה-long-term, או 7.24.2 בערוץ ה-stable. הנתב מאתחל את עצמו בסיום.

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

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

בכל מקרה, הגבילו את מי שיכול בכלל לפתוח חיבור SSH לנתב: בתפריט IP ואז Services, בשורה ssh, עמודת Available From מקבלת את טווח הכתובות היחיד שממנו הניהול מותר.