
ב-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 זה.

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

כותרות IPv6 וסיומת
IPv6 פותח כדי להתמודד עם המגבלות של IPv4. הוא הציג שיפורים שונים, כגון מודולריות וגמישות באמצעות כותרות הרחבה. הכותרות, הממוקמות בין כותרת ה-IPv6 לבין המטען, תומכות בנתונים אופציונליים ובתכונות מתקדמות.
כותרות מפתח של סיומת IPv6 כוללות:
- אפשרויות קפיצה אחר קפיצה (כותרת הבאה = 0)
- כותרת ניתוב (כותרת הבאה = 43)
- כותרת פרגמנט (כותרת הבאה = 44)
- כותרת אפשרויות יעד (כותרת הבאה = 60)
- כותרת אימות (AH) (כותרת הבאה = 51)
- מטען אבטחה עוטף (ESP) (כותרת הבאה = 50)
כל כותרת של הרחבה מצביעה לכותרת הבאה דרך השדה Next Header, ויוצרת שרשרת רציפה. מודולריות זו מוסיפה מורכבות לתהליך טיפול בחבילות וקטורי ניצול פוטנציאליים.

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

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

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

פגם קריטי במחסנית TCP/IP של Windows
התיקון של מיקרוסופט לטיפול בפגיעות CVE-2024-38063 נבדק ביסודיות על ידי חוקר האבטחה מרקוס האצ'ינס. הבלוג הטכני שלו מציע תובנות מפורטות לגבי שורש הפגיעות. בהתבסס על ממצאיו, עמיתנו חקר עוד יותר את הנושא כדי לקבל הבנה מעמיקה של הניצול.
ניתוח טלאים
התיקון כלל עדכון לקובץ tcpip.sys, כולל שינוי בתוך הפונקציה Ipv6pProcessOptions. שינוי בשורה אחת החליף קריאה מ-IppSendErrorList() בקריאה ל-IppSendError(), דבר המצביע על כך שייתכן ש-IppSendErrorList() תרם ל-CVE.


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

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

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

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

מזרימה נמוכה לגלישה וחוסר התאמה בהקצאה
הפונקציה 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 זה עבור מתקפת מניעת שירות:
כאשר פגיעות זו מנוצלת על ידי תוקף, מערכת הקורבן עלולה לקרוס באופן מיידי, וכתוצאה מכך להופיע מסך כחול של מוות:

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

