AgentBaiting: 7,600 מאגרי GitHub מזויפים שגורמים לסוכני ה-AI עצמם להמליץ על נוזקה
חוקרי חברת האבטחה Island פרסמו השבוע ניתוח של מבצע הפצת נוזקות רחב שכינו FakeGit: כ-7,600 מאגרי GitHub זדוניים, שנוצרו על ידי כ-6,600 פרופילים מזויפים, ורק ב-200 מהם עם נתוני הורדה פומביים כבר נספרו יותר מ-14 מיליון הורדות. עד כאן זו עוד קמפיין הפצה בקנה מידה גדול. מה שהופך אותו לחדש הוא הקהל שאליו הוא מכוון: לא רק מפתחים אנושיים שמחפשים כלי מוכן, אלא גם סוכני ה-AI שעובדים בשמם.
כ-800 מהמאגרים התחזו ל-Skills של מודלים או ל-שרתי MCP (Model Context Protocol, הפרוטוקול שמאפשר לסוכן AI להתחבר לכלים ולמקורות מידע חיצוניים). החוקר הראשי אולג זייצב הדגים שכששואלים את Claude Code, את Gemini או את ChatGPT על כלי כזה, הסוכן לפעמים מאתר בעצמו את המאגר הזדוני, מתייחס ל-README שכתב התוקף כאילו היה תיעוד לגיטימי, ומגיש למשתמש את הוראות ההתקנה שמובילות ישר להרצת הנוזקה. את הדפוס הזה קראו החוקרים AgentBaiting.
מה זה בכלל Skill ושרת MCP, ולמה דווקא הם
בשנה האחרונה נבנתה מסביב לסוכני ה-AI שכבת כלים שלמה. Skill הוא חבילת הנחיות וקוד שמרחיבה את יכולות המודל למשימה מסוימת, ושרת MCP הוא רכיב שמחבר את הסוכן למערכת חיצונית, מ-Gmail ו-WhatsApp ועד Databricks, Jenkins ו-Docker. מפתחים מאמצים את הרכיבים האלה בקצב מסחרר, לרוב מתוך מאגרי קוד פתוח ורישומים ציבוריים, ובדיוק כאן נמצא הפער שהתוקפים ניצלו.
המערכת האקולוגית הזו צעירה, וההרגלים שמגנים על מפתחים במאגרים ותיקים עדיין לא התגבשו בה. רישום חדש ברשימה של שרתי MCP, עם README משכנע וכמה כוכבים, נראה בדיוק כמו רכיב אמיתי. לפי Island, כ-62 אחוז מהמאגרים הזדוניים שהתחזו לכלי AI מוקמו כאינטגרציות ארגוניות פנימיות: כרבע מהם הציעו גישה לקוד מקור, כשישית גישה לפרטי אימות ולסודות, ושליש חיבור לנתונים תפעוליים. כלומר בדיוק הסוג שמפתח היה מריץ בתוך סביבת העבודה שלו בלי לחשוב פעמיים, ובדיוק הסוג שנותן לתוקף את הכי הרבה תמורה על הדבקה בודדת.
איך בונים אמון מזויף
התשתית של המבצע נבנתה כדי לעבור את מבחן המבט הראשון. התוקפים יצרו פרופילים שנבדלים בתו אחד משמות של מפתחים אמיתיים, למשל Naveenkm007 מול Naveenkm07 המקורי, והקימו דפי פרופיל שמחקים את המקור. הם העתיקו שמות ומבנים של פרויקטים לגיטימיים: מאגר בשם awesome-claude-skills, שחיקה של פרויקט אמיתי עם יותר מ-67 אלף כוכבים, הופיע בגרסה מזויפת עם 63 כוכבים בלבד ועם קישור להורדת נוזקה.
מעל השכבה הזו פעל מנגנון ההגברה האמיתי. יותר מ-600 מהמאגרים נרשמו ברשימות הציבוריות של שרתי MCP ו-Skills, בהן LobeHub, Glama, MCP.so ו-MCP Market. הרישומים האלה שכפלו את ה-README שכתב התוקף, כולל הקישור הישיר להורדת קובץ ה-ZIP הזדוני. כך מאגר בודד קיבל נוכחות בכמה פלטפורמות בבת אחת, וכל פלטפורמה נוספת הוסיפה לו שכבת לגיטימציה בעיני מי שסורק אותן, בין אם אדם ובין אם סוכן. חלק מהמאגרים צברו מספרי הורדה גבוהים בזכות זה: מאגר בשם ai-resume-parser רשם כ-120 אלף הורדות, ואחד בשם AI-Image-Generator קרוב ל-70 אלף, נתונים שמזינים בחזרה את תחושת האמינות.
AgentBaiting: כשהסוכן ממליץ על הנוזקה
כאן נכנס החלק שהחוקרים מתעכבים עליו. הרישומים הציבוריים נבנו במקור כדי שבני אדם יגלו כלים חדשים, אבל אותם רישומים הם בדיוק המקום שסוכן AI סורק כשהוא מחפש רכיב. Island הראתה שכשמבקשים מ-Claude Code למצוא Skill מסוים, הוא מאתר גם חלופות זדוניות, ובחלק מההרצות חזר על הוראות ה-README של מאגר מזויף, כולל ההנחיה להוריד ולהריץ קובץ הרצה חשוד. Gemini החזיר מאגר walmart-mcp זדוני כהמלצה הראשונה ותיאר אותו כשרת MCP חינמי ובקוד פתוח, ו-ChatGPT מנה את אותו מאגר בין שלוש אפשרויות והצביע עליו כמקום הטוב ביותר להתחיל בו.
ההבדל מעוקץ פישינג רגיל הוא מי שמסיר את החשד. כשמפתח מקבל המלצה מהסוכן שהוא כבר סומך עליו, הבדיקה הביקורתית שהיה עורך על קישור אקראי מהאינטרנט פשוט לא מתרחשת. כפי שכתבו החוקרים, "מדריך שנבנה כדי להטעות בני אדם מטעה עכשיו גם את הסוכנים שפועלים בשמם". סוכן שממליץ בביטחון הוא ערוץ הפצה שהתוקף מקבל בחינם.
מה קורה כשמריצים את הקובץ
ההוראות ב-README הובילו את הקורבן להוריד ZIP מעמוד ה-Releases של GitHub, לחלץ אותו, להריץ את הקובץ, ולאשר במידת הצורך בלחיצה על "Run anyway". חבילה אחת שנותחה, בשם server_databricks_mcp_1.6.zip, הכילה שלושה קבצים: סקריפט הפעלה בשם application.cmd, קובץ luau.exe שהוא סביבת ריצה של LuaJIT ששונה שמה, וקובץ ico64.txt במשקל כ-300 קילובייט שהתחזה לקובץ טקסט אך הכיל למעשה סקריפט Lua מעורפל ודחוס לשורה אחת. סקריפט ההפעלה פשוט הריץ את luau.exe עם קובץ ה-Lua כקלט, וכך הופעלה שרשרת ההדבקה בלי קובץ הרצה שנראה חשוד במבט ראשון.
מכאן נכנסת לפעולה נוזקת SmartLoader. היא משמרת אחיזה על ה-endpoint באמצעות scheduled task תחת ספריית %LOCALAPPDATA%, ומושכת שלבים מוצפנים נוספים ממאגרי GitHub. שלב ביניים מזריק את המטען הסופי לתוך תהליך נפרד, טכניקה שמסתירה את הקוד הזדוני בתוך תהליך שנראה תמים. את כתובת שרת השליטה והבקרה (C2, השרת שדרכו התוקף שולט בנוזקה) SmartLoader אינה מקודדת בתוכה, אלא שולפת אותה מ-smart contract על רשת הבלוקצ'יין Polygon: הכתובת שמורה על השרשרת הפומבית, והנוזקה קוראת אותה משם בזמן ריצה. השיטה מקשה על חוסמי רשת, כי אין דומיין קבוע להשחיר, ומספקת לתוקף דרך זולה להחליף שרת בלי לגעת בנוזקה עצמה.
המטען הסופי הוא StealC, נוזקת גניבת מידע. לפי Island היא אוספת סיסמאות ו-cookies מהדפדפן, חוטפת סשנים פעילים, שולפת מידע מתוספי דפדפן, אוגרת פרטי אימות לאימייל ולכלי גישה מרחוק, מצלמת את המסך ומלקטת פרטים על המחשב. עבור מפתח שהריץ את הקובץ בתוך סביבת העבודה שלו, זה אומר חשיפה של בדיוק פרטי האימות שפותחים את המערכות הארגוניות.
מבט קדימה
חוקרי Trend Micro מייחסים את הפעילות לשחקן איום שהם מתעדים בשם Water Kurita, וקושרים אותה למבצע קודם של אותה קבוצה שהפיץ את נוזקת Lumma Stealer. המעבר הזה, מקמפיין שהתבסס על מפתחים אנושיים לקמפיין שממנף גם סוכני AI, ממחיש איך תשתית התקפה קיימת מסתגלת לכלים החדשים במקום להיבנות מאפס. שיא היצירה של מאגרים בנושאי AI נרשם באפריל 2026, עם קרוב ל-300 מאגרים חדשים באותו חודש בלבד.
מעבר לקנה המידה, מה שבולט הוא שהמבצע לא ניצל אף חולשה טכנית במודלים. הסוכנים עשו בדיוק את מה שנועדו לעשות, קראו תיעוד פומבי והמליצו על כלי, אלא שהתיעוד היה מזויף. ככל שיותר ארגונים נותנים לסוכני קוד להתקין רכיבים בעצמם, מרחב ההתקפה הזה רק יגדל, וההגנה עליו תצטרך להיבנות ברמת מקור האמון ולא ברמת הקובץ.
מה זה אומר בפועל
רכיב AI שסוכן ממליץ עליו לא ראוי לפחות ביקורת מקישור שמצאתם בעצמכם, אלא ליותר. שווה לבדוק את זהות המפרסם ולא רק את שם המאגר, לחשוד במאגר צעיר עם מעט כוכבים שמופיע פתאום בכמה רשימות, ולא להריץ קובצי ZIP שמורדים מעמוד Releases אל תוך סביבת עבודה עם גישה לפרטי אימות. לצוותי אבטחה כדאי להתייחס להתקנת שרתי MCP ו-Skills כמו לכל התקנת תוכנה מבחוץ, עם אותה בדיקת מקור, ולא כאל פעולה שקופה שהסוכן מבצע לבד.
תגובות