כשמישהו שולח לכם פרויקט קוד כקובץ מכווץ או בתיקייה משותפת, ואתם פותחים אותו בעזרת Codex CLI או Codex Desktop של OpenAI, הכלי אוסף עליו מידע בסיסי לפני שהוא מתחיל לעבוד. החולשה הזאת הופכת את השלב הבלתי מזיק הזה לרגע שבו קוד של מי שהכין את הפרויקט רץ אצלכם, עם ההרשאות שלכם, בלי שאלה על המסך. הציון שנקבע לה הוא 7.3 מתוך 10.
מה החולשה?
לכל פרויקט שמנוהל ב-git יש תיקיית הגדרות פנימית, ובתוכה קובץ שקובע איך git יתנהג דווקא בפרויקט הזה. אחת ההגדרות שם, בשם core.fsmonitor, נועדה למקרה מעשי לגמרי: בפרויקטים ענקיים הסריקה שבודקת אילו קבצים השתנו איטית, ולכן אפשר להפנות את git אל תוכנית עזר חיצונית שעוקבת אחרי השינויים ומדווחת מהר. ההגדרה הזאת גורמת ל-git להריץ תוכנית, וזה כל מה שתוקף צריך.
Codex אסף את המידע על הפרויקט בלי לנטרל קודם את ההגדרה המקומית הזאת. פרויקט שהוכן מראש עם הפניה לתוכנית של התוקף גורם ל-git להריץ אותה בדיוק תוך כדי האיסוף. שתי נקודות הופכות את זה לחמור יותר מהרצה רגילה של קוד מפרויקט זר: התוכנית רצה מחוץ לארגז החול שבו Codex מריץ פקודות, כלומר מחוץ לתא הסגור שאמור להגביל מה מותר להן לעשות, והיא רצה בלי שהמשתמש מאשר אותה. מרגע זה יש למי ששלח את הפרויקט אפשרות לקרוא, לשנות ולמחוק קבצים ולהגיע לכל מה שהחשבון שלכם מגיע אליו.
נקודה אחת מצמצמת את התמונה, וכדאי להבין אותה בדיוק: הרשומה מציינת ש-clone רגיל של פרויקט אינו מעתיק את קובץ ההגדרות המקומי של המקור. כלומר משיכה רגילה מ-GitHub אינה מביאה איתה את ההגדרה. הניצול דורש שהפרויקט יגיע אליכם עם התיקייה הפנימית שלו שלמה, למשל כקובץ מכווץ, בהעתקה מכונן חיצוני או דרך תיקייה משותפת.
מי מושפע?
משתמשי Codex CLI במערכות Windows, macOS ולינוקס, ומשתמשי Codex Desktop ב-Windows וב-macOS, בגרסאות שלפני התיקון. זה קהל של מפתחים, וזה בדיוק הקהל שמחזיק במחשב אחד גם פרטי גישה לשרתים, מפתחות וקוד של לקוחות.
התרחיש המסוכן אינו הפרויקט המפורסם שכולם מושכים מ-GitHub, אלא הקובץ המכווץ שהגיע במייל ממועמד לעבודה, מלקוח או מפורום, ונפתח על המחשב כדי להעיף מבט. כשהפתיחה נעשית דרך כלי שסורק את הפרויקט אוטומטית, המבט הזה כבר לא חף מסיכון.
האם מנוצלת בפועל?
נכון לעדכון האחרון של הדף הזה החולשה אינה מופיעה בקטלוג ה-KEV של סוכנות הסייבר האמריקאית CISA, הרשימה שמרכזת חולשות שידוע שתוקפים מנצלים אותן בשטח. אין בכך כדי לומר שלא נוצלה, רק שאין לכך עדות ברשימה הזאת.
מה עושים?
עדכנו את Codex בערוץ שדרכו התקנתם אותו, ואת התיקון עצמו אפשר לראות בשינוי שנכנס לקוד של הפרויקט. אם אתם עובדים בסביבה מנוהלת, זו שאלה למי שמתחזק שם את הכלים: האם הגרסה שמותקנת אצלנו כבר כוללת את השינוי הזה.
לפני שאתם פותחים פרויקט שהגיע אליכם כקובץ מכווץ או בהעתקה, בדקו את ההגדרה עצמה. בתיקיית הפרויקט הריצו git config --get core.fsmonitor. אם חוזרת שורה עם נתיב לתוכנית כלשהי, זה בדיוק המצב שעליו מדובר, ואפשר לנקות אותה עם git config --unset core.fsmonitor לפני שמפעילים כלים על התיקייה.
וכלל אצבע שממשיך לעבוד גם אחרי שהחולשה הזאת תיסגר: פרויקט זר עדיף למשוך עם clone מהמקור ולא לקבל כארכיון. ה-clone משאיר מאחור את ההגדרות המקומיות של השולח, וזה בדיוק החלק שמסוכן.