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

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

ניתוח ותיקון פגיעות ב-Git CVE-2024-32002

by OPSWAT
שתף את הפוסט הזה
מין פאם ותאי דו, סטודנטים מאוניברסיטת הו צ'י מין לטכנולוגיה, שהשתתפו ב OPSWAT תוכנית המלגות
תלמידים השתתפו ב OPSWAT תוכנית מלגות.

לאחרונה נחשפה פגיעות קריטית ב-Git המאפשרת התקפות RCE (ביצוע קוד מרחוק), ומשפיעה על גרסאות מרובות של Git ו-Microsoft Visual Studio 2017. הפגיעות מאפשרת לתוקפים לתפעל מאגרי Git באמצעות תת-מודולים, תוך ניצול באג ב-Git המאפשר כתיבת קבצים מחוץ לעץ העבודה של תת-המודול ולתוך ספריית .git/ . באג זה מאפשר ביצוע של hook זדוני בזמן שפעולת שכפול של מאגר עדיין פועלת [1]. 

הפגיעות CVE-2024-32002 משפיעה על Microsoft Visual Studio 2017 גרסה 15.9 ועל גרסאות Git קודמות מ-2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2 ו-2.39.4. ניתן לנצל אותה בסביבות בהן תמיכה בקישורים סמליים מופעלת במערכות הפעלה שאינן תלויות רישיות. 

מידע על חומרת וקטורים בפורמט CVSS (מערכת ניקוד פגיעויות משותפת) 3.x עם ציון בסיס של 9.0 המסומן כקריטי, שסופק על ידי GitHub, Inc.

הבנת גיט

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

גיט נמצאת בשימוש נרחב בפיתוח תוכנה. פלטפורמות כמו GitHub, GitLab ו-Bitbucket בנויות על גבי גיט כדי לשפר את שיתוף הפעולה בין מפתחים בזכות התכונות העוצמתיות שלו: 

  • רישום שינויים הניתנים למעקב בקבצי קוד, המכונים commits
  • ביטול עריכות קוד לגרסאות קודמות בעת הצורך. 
  • שילוב יעיל של שינויים מענפים או תורמים שונים. 
  • תיעוד היסטוריית מי ביצע שינויים ותאריכי השינויים.
ייצוג חזותי של מבנה תיקיות בפורמט .git, המציג ספריות כמו config, HEAD, hooks, objects ו-refs.

גיט הוקס 

כאשר נוצר או משוכפל מאגר Git, באמצעות פקודות git init או git clone , ספריית .g it נוצרת בשורש עץ העבודה. מבנה הספריות של ספריית .git נראה בתחילה כך: 

הווים של Git הם סקריפטים ניתנים להרצה, הממוקמים בספריית .git/hooks או בספריית .git/modules/module_type/module_name/hooks . הווים מופעלים אוטומטית כאשר אירועים ספציפיים מתרחשים בתוך מאגר Git.  

כאשר קובץ בתיקיית hooks אינו מכיל סיומת .sample , הפקודות בקובץ זה יבוצעו לפני או אחרי פעולת Git מסוימת הכלולה בשם הקובץ, כגון pre-commit, post-commit ו- post-checkout

תת-מודולים של גיט

תת-מודול Git הוא רשומה בתוך מאגר Git המפנה ל-commit ספציפי במאגר חיצוני. כאשר תת-מודול נוסף למאגר, נוצר קובץ חדש בספריית .gitmodules עם מטא-דאטה של ​​המיפוי בין כתובת ה-URL של תת-המודול לספרייה המקומית שלו. כאשר מאגר מכיל מספר תת-מודולים, קובץ ה-. gitmodules יכלול ערך עבור כל אחד מהם. [3] 

תרשים המציג את האינטראקציה בין מאגרים ותת-מודולים, הממחיש את הקשר בין מאגר A, תת-מודול B ותיקייה C
תוכן לדוגמה של קובץ .gitmodules, המציג את התצורה עבור תת-מודול בשם "דוגמה"
התמונה הבאה מראה כיצד נראה קובץ .gitmodules: 

קישורים סמליים (Symlinks)

קישור סמלי, המכונה גם קישור סימבולי או קישור רך, הוא קובץ המצביע לקובץ או ספרייה אחרת (המכונה "יעד") על ידי ציון הנתיב שלה. אם קישור סימבולי נמחק, היעד שלו נשאר ללא שינוי. [4] 

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

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

ניתוח פגיעויות אבטחה ב-GIT

ניתוח טלאים

כדי להבין לעומק את פגיעויות האבטחה, מומחי אבטחה מבצעים לעתים קרובות ניתוח טלאים (patch analysis). זוהי טכניקה המסייעת בזיהוי פונקציות פגיעות ווקטורי תקיפה פוטנציאליים. OPSWAT העמיתים בחנו את השינויים שבוצעו בגרסה המעודכנת כדי לטפל בפגיעות CVE-2024-32002, וגילו ששני קבצים עודכנו כדי לטפל בפגיעות CVE זו.

אחד הקבצים המעודכנים הוא קובץ submodule--helper.c , הכולל את הקוד שמטפל בשכפול submodule של Git. ה-commit החדש בגרסה המעודכנת כלל את שני הקבצים הבאים:  

  1. הוספת הפונקציה dir_contains_only_dotgit כדי להבטיח שתיקיית submodules אינה מכילה קבצי .git או ספריות.
שינויי קוד בקובץ בשם submodule-helper.c בתוך ממשק Git, המציגים 83 תוספות ללא מחיקות
  1. בוצעו שינויים בפונקציה clone_submodule() כדי לכלול תנאי לבדיקה האם ספריית submodule קיימת והיא ריקה. אם הספרייה אינה ריקה, תהליך השכפול יבוטל. 
קטע קוד מפורט מ-Git commit, המדגיש פונקציה שבודקת את תוכן הספרייה במהלך פעולות תת-מודול.

העדכון השני ב-commit החדש היה בקובץ t/t7406-submodule-update.sh, והוסיף סקריפט בדיקה כדי לוודא שפגיעת האבטחה נפתרה. 

שינויי קוד מורחבים בקובץ בדיקה T7406-submodule-update.sh, המפרטים תצורות בדיקה עבור נתיבי תת-מודולים וקישורים סימבוליים

מניתוח לניצול

ניתוח זרימת עבודה של סימלינקים ותת-מודולים ב-Git

בנוסף לתובנות שנאספו מניתוח התיקון ותיאור הפגיעות CVE-2024-32002, OPSWAT עמיתים עבדו על חקירת תהליך העבודה של קישורים סימבוליים ותת-מודולים ב-Git. הם פירקו את רצף האירועים המתרחשים כאשר משתמש משכפל מאגר:

  1. גיט מתחיל בהורדת קבצים וספריות מהמאגר הראשי. 
  2. הוא משתמש בהגדרות שצוינו בקבצי הסימקישורים כדי ליצור מחדש סימקישורים תואמים במערכת הקבצים המקומית.  
  3. אם הקישור הסימפי מצביע לקובץ קיים, הקישור יהיה תקין; אחרת, הקישור יישאר לא פעיל עד לשחזור היעד.  
  4. אם המאגר משוכפל באמצעות האפשרות --recursive , גיט משכפל את תת-המודולים (מאגרים חיצוניים) וממקם אותם בנתיבי ספריות כפי שמצוין בקובץ .gitmodules.  
  5. אם קישור סימבולי (symlink) הוא חלק מנתיב תת-המודול (לדוגמה, util/module/test , כאשר util הוא קישור סימבולי המצביע לספרייה אחרת, כגון symlink_folder ), גיט יאחסן את תוכן תת-המודול בספרייה בפועל שאליה מפנה הקישור הסימבולי (למשל, symlink_folder/module/test ), תוך מתן אפשרות גישה דרך נתיב הקישור הסימבולי המקורי. 
תרשים זרימה חזותי המציג את שלבי שכפול מאגר, הורדת קבצים וספריות, יצירה מחדש של קישורים סימבוליים, שכפול תת-מודולים ומעבר לנתיב הנכון.

הבנת פגיעות האבטחה CVE-2024-32002 של Git 

יצירת מאגרים זדוניים

OPSWAT העמיתים בחנו עוד יותר את יצירתם של מאגרים זדוניים בהתבסס על עדכונים שבוצעו עבור הקובץ t/t7406-submodule-update.sh ופירקו תהליך זה לשלבים הבאים:

  1. יצירת מאגר המכיל וו לאחר ביצוע הזמנה
קטע קוד טרמינל המציג את הפקודות להגדרת hook לאחר התשלום ב-Git, כולל יצירת ספריות והוספת סקריפטים
  1. יצירת מאגר נוסף הכולל תת-מודול, הממוקם בנתיב A/modules/x . תת-המודול החדש מפנה למאגר שנוצר קודם לכן.
קטע קוד טרמינל המדגים את תהליך הוספת תת-מודול למאגר באמצעות פקודות Git
  1. יצירת קישור סמלי בשם a , המצביע על תיקיית .git באינדקס Git. 
דוגמה לסקריפט טרמינל המדגיש פקודות ליצירה וביצוע קובץ .git ככלי עזר במאגר
תרשים זרימה המפרט תרחיש תקיפה שבו מאגר hooks זדוני נוסף כתת-מודול למאגר ראשי, מה שמוביל להפעלת סקריפט.
תרשים המציג כיצד תוקף יכול לנצל את ה-CVE על ידי שכפול מאגר 

הבנת פגם האבטחה

כאשר משתמש משכפל מאגר זדוני, שנוצר בשלב הקודם, באמצעות האפשרות --recursive , הסקריפט הזדוני מהוו של post-checkout יופעל, מה שיאפשר לתוקף לפרוץ למכשיר של המשתמש. 

ביצוע קוד מרחוק זה מתרחש מכיוון שהמאגר הראשי מזהה קישור סמלי בשם a המצביע על ספריית .git כאשר הוא משוכפל. כאשר מצב רקורסיבי מופעל, גם תת-מודולים נמשכים לתוך המאגר המשובט. מאגר זה מכיל תיקיית hooks, המכילה את סקריפט ה-hook שלאחר הבדיקה , והתיקייה המקומית שלו נמצאת ב- A/modules/x .  

מכיוון ש- a מצביע לספריית .git ומערכת הקבצים אינה תלוית רישיות, A מתפרש כשווה ערך ל- a . ‏Git מוטעה לכתוב את סקריפט hook של post-checkout לספריית .git/modules/query/fast/hooks/ . ​​אם סקריפט hook של post-checkout נמצא בתיקייה .git/modules/{module_type}/{module_name}/hooks , הוא יופעל כאשר המאגר הראשי ישוכפל באמצעות האפשרות --recursive . כתוצאה מכך, תוקפים יכולים לפרוץ בהצלחה למכשיר המשתמש על ידי ביצוע קוד מרחוק.

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

סימולציה של ניצול פגיעות ב-Git

בהתבסס על הממצאים הקודמים, OPSWAT חברי הצוות יצרו מאגר ראשי ו-hook כדי לדמות יצירת מאגר זדוני:

  1. בתחילה, מומלץ להגדיר את Git כך שתמיד יאפשר את ה- protocol.file , להפעיל את core.symlinks , ולהגדיר את שם הענף המוגדר כברירת מחדל ל- main (כדי להימנע מהודעת אזהרה). 
קטע מסוף המציג פקודות להגדרה גלובלית של הגדרות Git לטיפול בקישורים סימבוליים והגדרת ברירת מחדל של ענפים
  1. סקריפט hook זדוני של post-checkout נוסף לתיקיית hooks. כדי להבטיח שניתן יהיה להריץ את סקריפט post-checkout במכשיר המשתמש, סקריפט ה-bash שיוצר את ה-hook הזה כלל את הפקודה chmod +x fast/hooks/post-checkout
סקריפט טרמינל המציג פקודת Python מקודדת זדונית המוטמעת בתוך hook של Git לאחר ביצוע צ'ק-אאוט
  1. נוצר קישור סמלי במאגר הראשי, המצביע על ספריית .git .
סקריפט טרמינל המדגים את תהליך ביצוע השינויים כדי לכלול כלי עזר וקובץ .git במאגר.
צילום מסך של רשימת ספריות מאגר עם תיקיות כגון src, libs ו-.gitmodules המוצגות בממשק Git
המאגר הראשי הפגיע
צילום מסך של ממשק מאגר Git המציג ספרייה עם וו לאחר קופה

תיקיית /hooks עם וו לאחר התשלום

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

תיקון

כדי לנטרל את האיום, משתמשים יכולים להסיר את התקנת Git או להתקין את תיקון האבטחה העדכני ביותר. לחלופין, פתרון כמו MetaDefender Endpoint יכול להודיע ​​למשתמש באופן מיידי ולהציג את כל ה-CVE הידועים בסביבה באמצעות הממשק האינטואיטיבי שלו. MetaDefender Endpoint יכול לזהות ולמתן את הסיכון למתקפת סייבר הרסנית (CVEs) האחרונה על ידי מינוף היכולות שלו עם למעלה מ-3 מיליון נקודות נתונים ולמעלה מ-30,000 CVEs משויכים עם מידע על חומרה. על ידי יישום כל אחד מאמצעי הנגד, ה-CVE יבלום לחלוטין, ויבטל את הסיכון למתקפת סייבר הרסנית.

האם אתה מוכן לשים MetaDefender Endpoint בחזית אסטרטגיית אבטחת הסייבר שלכם?


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

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