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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

הרמה הבאה Endpoint בִּטָחוֹן
גלו מדוע ארגונים, מוסדות וישויות ברחבי העולם סומכים על MetaDefender Endpoint כדי להגן על נקודות קצה קריטיות. דברו עם מומחה עוד היום כדי ללמוד עוד ולראות בעצמכם עם הדגמה בחינם.
הפניות
https://nvd.nist.gov/vuln/detail/CVE-2024-0517
https://cwe.mitre.org/data/definitions/843.html
https://blog.exodusintel.com/2024/01/19/google-chrome-v8-cve-2024-0517-out-of-bounds-write-code-execution/
https://jhalon.github.io/chrome-browser-exploitation-1/
https://whenderson.dev/blog/webgl-garbage-collection/
https://v8.dev/
https://github.com/Uniguri/CVE-nday/tree/master/Chrome/V8/CVE-2024-0517
