ב-22 במאי קהילת ה-PHP קיבלה תזכורת חדה עד כמה תשתית הקוד הפתוח שברירית. בחלון של כ-15 דקות, תוקף עם הרשאות דחיפה לארגון Laravel-Lang ב-GitHub שכתב מחדש את כל תגיות הגרסה של כמה חבילות Composer פופולריות, והחדיר לתוכן גנב פרטי גישה חוצה פלטפורמות.
זו לא הייתה מתקפת typosquatting רגילה ולא גרסה זדונית חדשה. במקום לפרסם גרסה חדשה, התוקף שכתב את כל התגיות הקיימות, כולל כאלה בנות שנים, כך שיצביעו על commit זדוני. כל מי שהריץ composer update או התקנה טרייה של החבילות אחרי אותו רגע משך אוטומטית קובץ helpers.php שחובר ל-autoload והורץ בכל בקשת PHP.
מה נגנב
הנוזקה תוכננה לשאוב מגוון רחב של סודות מהסביבה הנגועה: מפתחות של ספקי ענן, אסימוני תשתית, סודות של מפתחים, סיסמאות ששמורות בדפדפן ואפילו ארנקי קריפטו. בסביבות CI/CD, כל ההרצה האוטומטית של הצנרת הפכה לנקודת דליפה.
הלקחים שחלים על כולם
גם מי שלא נוגע ב-Laravel צריך לקחת מכאן כמה דברים. בסביבות ייצור ובצנרת אוטומטית עובדים עם composer install שמכבד את קובץ ה-lock, לא עם composer update שמושך גרסאות חדשות. קובץ lock שנוצר לפני המתקפה מונע משיכה של תגית ששוכתבה. לא מריצים Composer ישירות על המחשב המארח אלא בתוך container או מכונה חד-פעמית, כדי שגם אם משהו זדוני רץ, הוא לא יגיע לתיקיית ה-ssh ולנתוני הדפדפן.
ברמת התשתית, אם אתם תלויים בקוד פתוח, סריקת תלויות וניטור שינויים בחבילות הם כבר לא מותרות. כתבנו על איום מסוג אחר אבל באותה רוח במאמר על EvilTokens וגניבת אסימוני גישה ב-Microsoft 365. אם אתם מפעילים פיתוח פנימי או מסתמכים על ספקים שמפתחים עבורכם, דברו איתנו על איך מקשיחים את שרשרת האספקה.