CVE-2019-17666 : פגיעות בקוד של מנהל ההתקן של Realtek במערכות לינוקס אלול להוביל להשתלטות על המערכת

CVE-2019-17666 פגיעות במנהל ההתקן (driver) של כרטיסי רשת אלחוטיים תוצרת Realtek תחת מערכות לינוקס , יכולים לגרום להשבתה (DOS)  או אפילו להשתלטות על המערכת .

הפגיעות נמצאה ע"י Nicolas Waisman: https://twitter.com/nicowaisman/status/1185295690139873280

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

עד כמה חמורה הבעיה ?

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

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

אז מה היא בעצם אותה חולשה ?

כאמור, מדובר על buffer overflow בדריבר RTLWIFI ששיך להתקן ה wifi של Realtek . הפגיעות נמצאת בחלק מהקוד המשויך לפונקצית ה Notice of Absence . פונקציה זו מאפשר ניהול חשמל חכם כנמצאים במצב של Wifi Direct .

מה ?

רשת אלחוטית עובדת בצורה של מחשב (לדוגמא הלפטופ שלנו) שמתחבר ל Access Point – אפשר לקרוא לזה נקודת גישה , או הראוטר האלחוטי שנמצא בכל בית.

אבל ניתן גם לייצר רשת בין 2 מחשבים , ללא ה access point . מצב זה נקרא Wifi Direct . 2 המחשבים ידברו בינהם , ויחליטו ביחד מי "יהפוך" ל access point .

עכשיו , חזרה לחולשה ..

תוקף , שנמצא בקרבת הקורבן , יכול לשלוח אותות לקורבן, אותות אלו נקראים Wi-Fi beacons , וכל עוד כרטיס הרשת האלחוטי של הקורבן דולק , הוא יקבל אותם.

התוקף , יכול לשנות את אחד השדות של אותות אלו ולהכניס שם מידע שיגרום ל buffer overflow ויכול לגרום לקריסה של מחשב הקורבן , או להשתלטות .

Nicolas Waisman הבין שלמרות שהערך של הפרמטר noa_len נבדק , עדיין ניתן לבצע buffer overflow כי אין בדיקה לגודל סופי של הערך.

אפשר לראות בקישור הזה: https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg2133004.html את התיקון שהכניסו לקוד (ודרכו להבין את הבעיה שהיתה) , הקוד נמצא בפונקציה :

static void rtl_p2p_noa_ie(struct ieee80211_hw *hw, void *data,  unsigned int len)

 

התיקון בוצע ע"י הכנסה לבדיקה לגודל מקסימלי :

} else {

noa_num = (noa_len – 2) / 13;

if (noa_num > P2P_MAX_NOA_NUM)

noa_num = P2P_MAX_NOA_NUM;

}

 

בלינק הזה אתם יכולים לראות את הקוד המלא :

https://gitlab.collabora.com/krisman/linux/blob/cf29576fee6016fa7004262cb98f57a2269178f1/drivers/net/wireless/realtek/rtlwifi/ps.c

לסיכום :

למרות שמדובר בחולשה מאוד מסוכנת המגדרת CRTICAL , שניתנת לניצול כל עוד כרטיס הרשת גלוי , מרחוק וללא התערבות של המשתמש (כמובן רק למחשבי לינוקס ורק לבעלי כרטיס רשת של Realtek) , למרות שהצליחו לנצל את החולשה על מנת להשבית מחשב. עדיין לא נמצא דרך לנצל את החולשה על מנת לבצע השתלטות.

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

 

 

 

השארת תגובה