
לאחרונה נחשפה פגיעות קריטית ב-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. ניתן לנצל אותה בסביבות בהן תמיכה בקישורים סמליים מופעלת במערכות הפעלה שאינן תלויות רישיות.

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

גיט הוקס
כאשר נוצר או משוכפל מאגר 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]


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


ניתוח פגיעויות אבטחה ב-GIT
ניתוח טלאים
כדי להבין לעומק את פגיעויות האבטחה, מומחי אבטחה מבצעים לעתים קרובות ניתוח טלאים (patch analysis). זוהי טכניקה המסייעת בזיהוי פונקציות פגיעות ווקטורי תקיפה פוטנציאליים. OPSWAT העמיתים בחנו את השינויים שבוצעו בגרסה המעודכנת כדי לטפל בפגיעות CVE-2024-32002, וגילו ששני קבצים עודכנו כדי לטפל בפגיעות CVE זו.
אחד הקבצים המעודכנים הוא קובץ submodule--helper.c , הכולל את הקוד שמטפל בשכפול submodule של Git. ה-commit החדש בגרסה המעודכנת כלל את שני הקבצים הבאים:
- הוספת הפונקציה dir_contains_only_dotgit כדי להבטיח שתיקיית submodules אינה מכילה קבצי .git או ספריות.

- בוצעו שינויים בפונקציה clone_submodule() כדי לכלול תנאי לבדיקה האם ספריית submodule קיימת והיא ריקה. אם הספרייה אינה ריקה, תהליך השכפול יבוטל.

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

מניתוח לניצול
בנוסף לתובנות שנאספו מניתוח התיקון ותיאור הפגיעות CVE-2024-32002, OPSWAT עמיתים עבדו על חקירת תהליך העבודה של קישורים סימבוליים ותת-מודולים ב-Git. הם פירקו את רצף האירועים המתרחשים כאשר משתמש משכפל מאגר:
- גיט מתחיל בהורדת קבצים וספריות מהמאגר הראשי.
- הוא משתמש בהגדרות שצוינו בקבצי הסימקישורים כדי ליצור מחדש סימקישורים תואמים במערכת הקבצים המקומית.
- אם הקישור הסימפי מצביע לקובץ קיים, הקישור יהיה תקין; אחרת, הקישור יישאר לא פעיל עד לשחזור היעד.
- אם המאגר משוכפל באמצעות האפשרות --recursive , גיט משכפל את תת-המודולים (מאגרים חיצוניים) וממקם אותם בנתיבי ספריות כפי שמצוין בקובץ .gitmodules.
- אם קישור סימבולי (symlink) הוא חלק מנתיב תת-המודול (לדוגמה, util/module/test , כאשר util הוא קישור סימבולי המצביע לספרייה אחרת, כגון symlink_folder ), גיט יאחסן את תוכן תת-המודול בספרייה בפועל שאליה מפנה הקישור הסימבולי (למשל, symlink_folder/module/test ), תוך מתן אפשרות גישה דרך נתיב הקישור הסימבולי המקורי.

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

- יצירת מאגר נוסף הכולל תת-מודול, הממוקם בנתיב A/modules/x . תת-המודול החדש מפנה למאגר שנוצר קודם לכן.

- יצירת קישור סמלי בשם a , המצביע על תיקיית .git באינדקס Git.


הבנת פגם האבטחה
כאשר משתמש משכפל מאגר זדוני, שנוצר בשלב הקודם, באמצעות האפשרות --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 כדי לדמות יצירת מאגר זדוני:
- בתחילה, מומלץ להגדיר את Git כך שתמיד יאפשר את ה- protocol.file , להפעיל את core.symlinks , ולהגדיר את שם הענף המוגדר כברירת מחדל ל- main (כדי להימנע מהודעת אזהרה).

- סקריפט hook זדוני של post-checkout נוסף לתיקיית hooks. כדי להבטיח שניתן יהיה להריץ את סקריפט post-checkout במכשיר המשתמש, סקריפט ה-bash שיוצר את ה-hook הזה כלל את הפקודה chmod +x fast/hooks/post-checkout .

- נוצר קישור סמלי במאגר הראשי, המצביע על ספריית .git .



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

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