העדכון שאתם לא יכולים להרשות לעצמכם לדלג עליו: סוף התמיכה ב-Office 2016 ו-Office 2019

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

פירוט מקיף של CVE-2024-38063: איום קריטי במחסנית TCP/IP של Windows

עַל יְדֵי OPSWAT
שתף את הפוסט הזה
צילום ראש של OPSWAT משתתף בתוכנית המלגות, פאם נגוק ת'יאן

ב-13 באוגוסט 2024, MSTC (מרכז התגובה לאבטחה של מיקרוסופט) חשף את CVE-2024-38063, פגיעות קריטית במחסנית TCP/IP של Windows שניתן לנצל כדי לסכן פונקציות רשת חיוניות בתוך מערכת ההפעלה. כאן, משתתפים ב... OPSWAT תוכנית המלגות לתואר שני מספקת בחינה מעמיקה של הפרטים הטכניים של פגם זה והשפעתו הפוטנציאלית, כמו גם אסטרטגיות הפחתה מומלצות עבור פגיעות זו.

OPSWAT משתתפי תוכנית המלגות: פאם נגוק ת'יאן - אוניברסיטת הו צ'י מין לטכנולוגיית מידע 

סקירה כללית

CVE-2024-38063 היא פגיעות קריטית במערכת TCP/IP של Windows עם ציון CVSS של 9.8, המשפיעה על עיבוד חבילות IPv6. תוקפים מרוחקים יכולים לנצל פגיעות זו באמצעות זרימת חסימה של מספר שלם בעת טיפול בכותרות סיומת IPv6 כדי לבצע קוד זדוני או לגרום ל-DoS (מניעת שירות).

מכיוון ש-IPv6 מופעל כברירת מחדל ברוב המערכות המודרניות, פגם זה של אפס קליקים מהווה סיכון משמעותי. כתוצאה מכך, כל הגרסאות שלא תוקנו של Windows 10, Windows 11 ו-Windows Server שנים 2008, 2012, 2016, 2019 ו-2022 עם IPv6 מופעל פגיעות ל-CVE זה.

תרשים המציג את ההשפעה של CVE-2024-38063 על פונקציות הרשת של Windows

מושגים מרכזיים

מחסנית TCP/IP של Windows

מחסנית TCP/IP של Windows היא רכיב בסיסי במערכת ההפעלה האחראית על תקשורת רשת דרך חבילת פרוטוקול בקרת שידור/פרוטוקול אינטרנט (TCP/IP). היא מטפלת בכל אינטראקציות הרשת, ומקלה על התקשורת בין התקנים ברשתות מקומיות וגלובליות.

צילום מסך של ארכיטקטורת מחסנית TCP/IP של Windows

כותרות IPv6 וסיומת

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

כותרות מפתח של סיומת IPv6 כוללות:

  • אפשרויות קפיצה אחר קפיצה (כותרת הבאה = 0) 
  • כותרת ניתוב (כותרת הבאה = 43) 
  • כותרת פרגמנט (כותרת הבאה = 44) 
  • כותרת אפשרויות יעד (כותרת הבאה = 60) 
  • כותרת אימות (AH) (כותרת הבאה = 51) 
  • מטען אבטחה עוטף (ESP) (כותרת הבאה = 50) 

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

תרשים המתאר כותרות סיומת IPv6 ומבנה חבילות
פורמט של דאטגרם IPv6

זרימת תחתית של מספר שלם

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

גלישה שלמה מתרחשת כאשר הערך חורג מהמגבלה המקסימלית של סוג הנתונים ו"גולש" חזרה לערך המינימלי הניתן לייצוג (למשל, 0 בטווח של 0-10). שני התרחישים מתרחשים עקב טיפול לא נכון בתנאי גבול בפעולות אריתמטיות, מה שמוביל לפגיעויות חמורות במערכות תוכנה.

תרשים המסבר זרימה נמוכה וגלישה שלמים בעיבוד נתונים

ניתוח פגיעויות

זרימת העבודה של עיבוד IPv6

לאחר קבלת חבילת IPv6, Windows מנתח תחילה את כותרת ה-IPv6. לאחר מכן, הפונקציה IppReceiveHeaderBatch בודקת את הערך של השדה Next Header כדי לבחור את המטפל המתאים עבור הכותרות הבאות. עבור כל כותרת סיומת בשרשרת, IppReceiveHeaderBatch מפעיל את השגרה המתאימה כדי לעבד את הכותרת הספציפית הזו.

תרשים המתאר את זרימת העבודה של עיבוד מנות IPv6 ב-Windows

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

תוקף יכול לגרום לניהול שגוי של זיכרון ולגרום לגלישה של מאגר (buffer overflow) על ידי שליחת חבילות רבות בעלות מבנה שגוי עם כותרות סיומת שעברו מניפולציה. זה מאפשר לעודפי נתונים לדרוס אזורי זיכרון לא מכוונים, מה שעלול לאפשר ביצוע של קוד שרירותי. פגיעות זו מזוהה כ-CVE-2024-38063.

תרשים הממחיש את הסיכון של גלישת מאגר עקב חבילות IPv6 בעלות מבנה שגוי

פגם קריטי במחסנית TCP/IP של Windows

התיקון של מיקרוסופט לטיפול בפגיעות CVE-2024-38063 נבדק ביסודיות על ידי חוקר האבטחה מרקוס האצ'ינס. הבלוג הטכני שלו מציע תובנות מפורטות לגבי שורש הפגיעות. בהתבסס על ממצאיו, עמיתנו חקר עוד יותר את הנושא כדי לקבל הבנה מעמיקה של הניצול.

ניתוח טלאים

התיקון כלל עדכון לקובץ tcpip.sys, כולל שינוי בתוך הפונקציה Ipv6pProcessOptions. שינוי בשורה אחת החליף קריאה מ-IppSendErrorList() בקריאה ל-IppSendError(), דבר המצביע על כך שייתכן ש-IppSendErrorList() תרם ל-CVE.

צילום מסך של הקוד המציג את tcpip.sys לפני התיקון עבור CVE-2024-38063
איור 1. לפני התיקון
צילום מסך של הקוד המציג את tcpip.sys לאחר תיקון עבור CVE-2024-38063
איור 2. לאחר התיקון

גודל חבילה אפס

בחינה מדוקדקת יותר של הפונקציה IppSendErrorList() גילתה שהיא מעבדת רשימה מקושרת של חבילות על ידי הפעלת הפונקציה IppSendError() עבור כל אחת מהן. הפונקציה IppSendError() מקצה לחבילות פגומות את הסטטוס STATUS_DATA_NOT_ACCEPTED. לאחר מכן, היא יוצרת הודעת שגיאה של ICMP המכילה מידע על החבילה הבעייתית ושולחת אותה בחזרה. עם זאת, כאשר IppSendErrorList() מופעל עם always_send_icmp = true על מספר חבילות, היא מגדירה את השדה packet_size לאפס עבור כל חבילה.

צילום מסך של הקוד המציג את הפונקציה IppSendErrorList שמגדירה את גודל החבילה לאפס

הפונקציה Ipv6pProcessOptions נועדה לעבד כותרות סיומת המכילות שדות ערך אפשרות, כולל כותרות Hop-by-Hop Options ו-Destination Options. על ידי הגדרת סוג האפשרות לערך גדול מ-0x80, תוקף יכול לגרום לשגיאה ספציפית בעיבוד כותרת האפשרויות, מה שאילץ את always_send_icmp להיות מוגדר כ-true וכתוצאה מכך גודל החבילה להיות מוגדר לאפס.

צילום מסך של הקוד הממחיש את המניפולציה של שדה הכותרת הבאה של IPv6 לצורך ניצול

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

תרשים המתאר את שליטת התוקף על עיבוד חבילות IPv6

זרימת תחתית שלמה בעיבוד פרגמנטים

על ידי הגדרת השדה Next Header ל-44, המציין Fragment Header, חבילה מטופלת על ידי שגרות פיצול או הרכבה מחדש של IPv6. כאשר החבילה מגיעה למנתח הפרגמנטים, Ipv6pReceiveFragment(), היא מציינת כי: 

  • גודל החבילה הוא אפס. 
  • כותרת הפרגמנט מציינת שנותרו נתונים נוספים לעיבוד. 

בפונקציה Ipv6pReceiveFragment(), גודל ההקצאה עבור fragment_size מחושב כהפחתת 0x30 (אורך כותרת המנה) מגודל המנה ללא כל אימות. אם גודל המנה הוא אפס, חיסור זה יתרחש בתהליך של underflow, וכתוצאה מכך יתקבל ערך גדול של 16 סיביות (בסביבות 0xFFD0 או 65488), מה שגורם למנתח לעבד זיכרון עודף מחוץ לגבולות החוקיים של המנה ולגרום נזק לזיכרון. 

צילום מסך של קוד המציג זרימת שלם תחתונה בעיבוד קטע IPv6
איור 3 זרימת תחתית שלמה בעיבוד פרגמנטים

מזרימה נמוכה לגלישה וחוסר התאמה בהקצאה

הפונקציה Ipv6pReassemblyTimeout() אחראית על ניקוי מקטעי IPv6 לא שלמים לאחר זמן מוגדר באמצעות אריתמטיקה של 16 סיביות כדי לקבוע גודלי מאגר ופעולות העתקה. עקב הזרימה הנמוכה בשלב הקודם, כאשר packet_length או fragment_size הופכים ל-0xFFD0, מתרחשת גלישה במהלך ההקצאה.  

החישוב שנוצר גורם לאפס את האוגר, מה שמוביל להקצאה של 48 בייטים בלבד של זיכרון. עם זאת, מכיוון שכמות הנתונים שהועתקה (65,488 בייטים מההרכבה מחדש->טעינה) אינה תואמת את הזיכרון שהוקצה, מתרחשת גלישת מאגר נשלטת במאגר הליבה. 

צילום מסך של קוד הממחיש גלישת מאגר עקב אי התאמה בהקצאת זיכרון

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

הוכחת היתכנות CVE-2024-38963 

בניסיון לשחזר את הפגיעות CVE-2024-38963, חברינו יצרו סדרה של חבילות בעלות מבנה פגום שנועדו לנצל את הפגם. התהליך שפעל לפיו היה:

1. יצירת חבילות IPv6 פגומות

הוסף כותרת סיומת IPv6 Destination Options (סוג 60) לאחר כותרת הבסיס של IPv6, ולאחר מכן הטמע אפשרות לא חוקית (לדוגמה, סוג אפשרות 0x81). 

מניפולציה זו מאלצת את ליבת Windows (tcpip.sys) להגדיר always_send_icmp = true, מה שמפעיל יצירת שגיאות ICMPv6 דרך שגרת IppSendErrorList().

2. כפיית עיבוד רשימת חוצצים רשתית (NBL)

הצפת היעד בפרצים מהירים של חבילות פגומות אלו הגדילה את הסיכוי של הליבה לקבץ חבילות מרובות לרשימת Net-Buffer (NBL) אחת. כאשר שתי חבילות או יותר מקובצות, לולאת IppSendErrorList() הפגיעה מופעלת, מה שמאפס באופן שגוי את המטא-דאטה DataLength ו-Offset בפרגמנטים עוקבים (גודל החבילה הוא כעת אפס). 

3. הזרקת חבילות IPv6 מקוטעות

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

4. ניצול זמן ההרכבה מחדש

הליבה שומרת פרגמנטים למשך 60 שניות (מנוהל על ידי Ipv6pReassemblyTimeout) כדי לאפשר הרכבה מחדש של חבילות. במהלך פסק זמן זה, ערכי DataLength הפגומים גורמים לזרימה נמוכה של מספר שלם ב-Ipv6pReceiveFragment, וכתוצאה מכך גודל פרגמנט מחושב באופן שגוי (גדול מדי).

5. הפעלת גלישת מאגר ה-Heap

הליבה מקצה מאגר ערימה (heap buffer) בהתבסס על ערכי החסר-זרימה. שני חישובים שונים מתרחשים במהלך תהליך ההרכבה מחדש: האחד קובע את גודל הקצאת הזיכרון (אשר, עקב גלישה של 16 סיביות, הופך קטן מדי), והשני מחשב את אורך העותק באמצעות הערך הגדול והחסר-זרימה.

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

תרשים המתאר את ניצול הוכחת ההיתכנות עבור CVE-2024-38063

קוד המקור ששימש לשחזור CVE זה עבור מתקפת מניעת שירות:

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

צילום מסך של ממשק המשתמש המציג את המסך הכחול של המוות של Windows לאחר ניצול לרעה של CVE-2024-38063

תיקון

הזנחה של עדכון קבוע של מערכת ההפעלה חושפת את המכשיר שלך לאיומי אבטחה, כולל כאלה הקשורים ל-CVE (פגיעויות וחשיפות נפוצות). כדי למתן סיכונים אלה, MetaDefender Endpoint™ מספק הגנה חזקה על ידי זיהוי גרסת מערכת ההפעלה שלך ובדיקת פגיעויות, כולל CVE ידועות, כגון CVE-2024-38063. 

MetaDefender Endpoint נועד להגן על מכשירים בתוך רשתות IT/OT קריטיות מפני איומי מדיה היקפית ונשלפת. הוא מבטיח שמערכת ההפעלה והיישומים המותקנים מעודכנים, מסמן גרסאות מיושנות או פגיעות ומפרט יישומים עם פגיעויות ידועות ו-CVEs, יחד עם תיקונים מומלצים. הוא גם מסייע בהגנה על מכשירים מפני סיכוני מדיה נשלפת על ידי חסימת גישה ל- USB כוננים עד שנסרקו ונמצאו נקיים באמצעות מספר מנועי אנטי-וירוס זדוניים תוך ביצוע Deep CDR™ על יותר מ-180 סוגי קבצים.  

דברו עם אחד המומחים שלנו עוד היום כדי לראות איך MetaDefender Endpoint יכולים לשנות את מצב האבטחה שלכם בעזרת בינה מובילה בתעשייה. 

הישאר מעודכן עם OPSWAT !

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