Argo CD הוא כלי שמנהל את הפריסה של אפליקציות, ולצדו אפשר להריץ שרת קטן שמאפשר לעוזר AI לתפעל אותו. בגרסה 0.8.0 של השרת הזה, argocd-mcp, מי שמצליח להגיע אל היציאה שבה הוא מאזין יכול להשתמש בו במלואו בלי להזדהות. הציון שניתן לחולשה הוא 10 מתוך 10, המקסימום האפשרי.

מה החולשה?

שתי החלטות תכנון נפרדות מצטרפות כאן לתוצאה אחת, ושתיהן סבירות בנפרד.

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

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

ה-token לא דלף לשום מקום. הוא פשוט הועמד לרשות כל מי שהצליח להתחבר.

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

מי מושפע?

הרשומה נוקבת בגרסה 0.8.0 של argocd-mcp, ומתנה את ההתנהגות בכך שמוגדר ARGOCD_API_TOKEN.

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

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

האם מנוצלת בפועל?

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

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

מה עושים?

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

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

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

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