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

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

תיקון פגיעות CVE-2024-0517 בגוגל כרום

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

אודות CVE-2024-0517

CVE-2024-0517 היא פגיעות כתיבה מחוץ לתחום במנוע ה-JavaScript V8 של גוגל כרום לפני גרסה 120.0.6099.224, המאפשרת לתוקפים מרוחקים לנצל פגיעה ב-heap באמצעות דף HTML בעל מבנה. הפגיעות דווחה לראשונה על ידי טואן (סוטו) פאם מ-Qrious. Secure . 

צילום מסך המציג ציון בסיס חומרה של CVSS 3.x של 8.8 (גבוה) עם תיאור וקטורי מפורט מה-NVD
CVE-2024-0517 במסד הנתונים הלאומי של פגיעויות (NVD)

פגיעות זו נובעת מבלבול סוגים, המתרחש כאשר יישום מקצה או מאתחל משאב כגון מצביע, אובייקט או משתנה באמצעות סוג אחד, אך מאוחר יותר ניגש למשאב זה באמצעות סוג שאינו תואם לסוג המקורי (CWE-843) . ב-CVE זה, בלבול הסוגים מופעל במהלך תהליך הקצאת זיכרון הנקרא הקצאה מקופלת, המשמש לאופטימיזציה של זיכרון על ידי Maglev, מהדר אופטימיזציה למנוע JavaScript V8. 

על ידי ניצול בלבול סוגים וכתיבת קודי מעטפת שרירותיים על ידי WebAssembly, תוקף יכול לבצע פקודות על מכונת הקורבן. 

שלבי התקפה

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

תרשים המציג תהליך בן ארבעה שלבים לניצול פגיעות באמצעות דוא"ל פישינג עם קובץ HTML זדוני המוביל להפעלת קוד מרחוק
קמפיין התקפי שלב אחר שלב 

מנוע V8 JavaScript 

מנוע ה-JavaScript V8 נכתב ב-C++ על ידי גוגל ושוחרר ב-2 בספטמבר 2008. V8 קומפילציה וביצוע קוד מקור של JavaScript, מטפלת בהקצאת זיכרון לאובייקטים, ואוספת אובייקטים שאינם נחוצים עוד. V8 הוא רכיב מרכזי של גוגל כרום וניתן להטמיע אותו בכל יישום C++, כגון Node.js, כדי לבצע קוד JavaScript או WebAssembly.

מגלב והקצאה מקופלת

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

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

תרשים המציג ייצוגים מקודדי צבע של הקצאות תיקיות עם ובלי תיקיות שהוקצו
הקצאת תיקיות ו-Malev

איסוף אשפה דורי 

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

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

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

סקירה כללית

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

ניתוח גורם שורש 

OPSWAT עמיתים לתארים מתקדמים ביצעו ניתוח מפורט של זרימת העבודה של V8 במהלך תהליך ההקצאה וקבעו כי הפונקציות הבאות מופעלות במהלך תהליך זה: 

תרשים הממחיש את זרימת העבודה של V8 במהלך תהליך הקצאת האובייקטים, ממציאת בנאי ועד להרחבת הקצאה גולמית
זרימת עבודה של V8 במהלך תהליך ההקצאה 

בתוך תהליך זה, זוהתה בעיה בפונקציה TryBuildFindNonDefaultConstructorOrConstruct: הפונקציה BuildAllocateFastObject מרחיבה את current_raw_allocation_ (מצביע לאזור הזיכרון המוקצה עבור מספר משתנים בו זמנית) כדי לבנות את מופע המחלקה הצאצא, אך נכשלת במחיקתו על ידי הגדרתו ל-null. 

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

תרשים המציג את יצירתו של אובייקט חדש בזיכרון, תוך מעבר מ"הקצאה גולמית נוכחית" ל"אובייקט הבא"
'current_raw_allocation' ו-'Next object' באזור הזיכרון

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

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

ניצול

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

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

בלבול בין סוגי הטריגר

במהלך האתחול, נגדיר תחילה מערך (_arrayObject) המכיל אובייקטים ריקים. לאחר מכן, בונים מופע של מחלקת הילד וכן אספן זבל (garbage collector) מסוג טריגר. לבסוף, נגדיר מערך נוסף עם מספר נקודה צפה, בשם _arrayDouble. 

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

יש לחזור על מבנים אלה כך שהקוד יבוצע מספר פעמים, מה שיגרום ל-V8 לסמן אותו כ-"hot" ולהפעיל את מהדר Maglev. אנו משיגים זאת על ידי קריאה לבנאי של מחלקת הילד בתוך לולאה באופן הבא: 

קטע קוד קצר ב-JavaScript הממחיש לולאה היוצרת מספר מופעים של מחלקת צאצא

בלבול סוגים יופעל לאחר אתחול חוזר של אובייקטים אלה בלולאה.

צור פרימיטיבים לקריאה וכתיבה

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

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

קריאה וכתיבה של פרימיטיבים בשלב זה יאפשרו לנו לשלוט במצביע טבלת הקפיצה של מופע WebAssembly בשלב הבא. 

צור מופעי WebAssembly

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

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

מצביע טבלת קפיצה של בקרה של מופע WebAssembly

באמצעות פרימיטיבים של קריאה וכתיבה; אנו מתאימים את מצביע טבלת הקפיצה של מופע WebAssembly השני כדי לדלג על כמה בתים של קוד הקבועים שעבר קומפילציה במופע WebAssembly הראשון, כך שקבועי הנקודה הצפה יתפרשו כקוד המעטפת המיועד שלנו:

קטע קוד אסמבלי המציג הוראות להעברת נתונים לאוגרי מידע

הפעל את מופע WebAssembly כדי לבצע את קוד ה-Shellcode 

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

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

קטע פקודה פשוט במסוף עם הפקודה 'kill' לסיום תהליכים

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

קטע קוד אסמבלי עבור syscall שמסיים תהליך באמצעות הפקודה 'kill'

לדמות את פגיעות האבטחה 

כדי לדמות ניצול זה בתרחיש אמיתי, OPSWAT עמיתים מתקדמים יצרו דף HTML בעל מבנה זדוני. 

קטע קוד WebAssembly שנועד להריץ קוד מעטפת על ידי גישה לזיכרון ותמרון נתונים

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

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

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

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

תיקון

MetaDefender Endpoint™ נוצל כדי לצמצם באופן יזום את התקפת הסייבר הפגיעה הזו על ידי מינוף יכולת ה"אפליקציה הפגיעה" שלה. הפתרון מאתר ומציג ביעילות את כל ה-CVEs הקשורים ליישומי Google Chrome בתוך סביבת נקודת הקצה. כדי לנטרל את האיום, משתמשים יכולים להסיר את ההתקנה של Chrome באופן מיידי או להחיל את עדכון האבטחה העדכני ביותר. על ידי יישום כל אחד מהאמצעים, ה-CVE נבלם לחלוטין, מה שמפחית משמעותית את הסיכון למתקפת סייבר מוצלחת על נקודת הקצה.

MetaDefender Endpoint ממשק המציג פגיעויות של גוגל כרום, כולל פרטים על CVEs

הרמה הבאה Endpoint בִּטָחוֹן 

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


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

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