48 אלף קבצים נמחקו ב-103 שניות במהלך משימה של סוכן AI

סוכן של Claude Code התבקש לבנות מחדש עותק של פרויקט. לפי דיווח משתמש, פעולת הניקוי שביצע הגיעה גם לקבצים הפעילים. הפרט הטכני שהוביל לכך קטן, אבל הלקח נוגע לכל מי שנותן לסוכן גישה לקבצים שלו.
מחיקת עותק ישן של פרויקט נשמעת כמו משימת תחזוקה פשוטה. במקרה שדווח ב-Cyber Security News, היא הסתבכה בתוך פחות משתי דקות: לפי בדיקה שתיאר המשתמש, סוכן שהופעל באמצעות Claude Code מחק 48,218 קבצים מהפרויקט הפעיל בזמן שניסה לפנות עותק ישן.
המספרים מבוססים על דיווח המשתמש ועל דוח בדיקה שצורף אליו, ולא על חקירה עצמאית שפורסמה. הפוסט המקורי ב-Reddit נמחק מאז. לכן אי אפשר לקבוע בוודאות שכל פרטי האירוע התרחשו כפי שתוארו. ובכל זאת, דרך התקלה המתוארת מצביעה על סיכון ממשי שקל להבין.
כשהתיקייה הזמנית מובילה לפרויקט הפעיל
לפי הדיווח, הסוכן נדרש לבנות מחדש עותק של הפרויקט. כדי לעשות זאת, הוא יצר תוכנית למחיקת העותק הישן מתיקייה זמנית. אלא שהעותק לא הכיל רק קבצים: היו בו גם 614 קישורי תיקייה של Windows, המכונים junctions, שהפנו בחזרה לתיקיות בפרויקט הפעיל.
קישור תיקייה נראה כחלק ממבנה התיקיות הרגיל, אבל מעבר דרכו מוביל למיקום אחר במחשב. לכן תוכנית שמנקה תיקייה זמנית עלולה להגיע באמצעותו לקבצים שלא התכוונו למחוק. זהו ההבדל בין הנתיב שבו מתחילים את הפעולה לבין המקום שבו היא מסתיימת.
תוכנית המחיקה השתמשה בפעולת סריקה של Python בשם os.walk. היא הוגדרה שלא לעקוב אחר קישורים סמליים, אך לפי הדיווח, הבדיקה שבה השתמשה לא זיהתה נכון את קישורי התיקייה של Windows. ההגנה שהסוכן הוסיף מנעה חלק מן המעבר דרכם, אך לא עצרה את המחיקה בתיקיות שמתחתיהם. בתיעוד Python קיימת בדיקה ייעודית לקישורי תיקייה מסוג זה. התיעוד מסביר את ההבחנה הטכנית; הוא אינו מאמת את פרטי המקרה המדווח.
המשימה אושרה, דרך הביצוע לא נבדקה עד הסוף
המשתמש אישר לסוכן לבנות מחדש עותק הדרוש לעבודה. זו אינה בקשה למחוק את הפרויקט הפעיל. הסיכון נוצר כשהסוכן בחר לכתוב ולהריץ תוכנית מחיקה, בסביבה שבה קישורי התיקייה אפשרו לה להגיע גם לקבצים אחרים.
זהו גבול חשוב בשימוש בסוכני תכנות: אישור לבצע משימה אינו בדיקה של כל פעולה שהסוכן יבחר בדרך אליה. ככל שהסוכן יכול להפעיל פקודות ולגשת ליותר תיקיות, כך טעות בפרשנות של מבנה הקבצים עלולה לפגוע ביותר מידע.
לפי הדיווח, גם נתוני Git המקומיים נפגעו. פירוש הדבר שהיסטוריית הגרסאות שנשמרה באותה תיקייה לא סיפקה דרך פשוטה לשחזר את הקבצים. אין בכך קביעה שכל המידע אבד: בדיווח צוין שקבצים ותיקיות גיבוי במיקומים אחרים נותרו במקומם, ולא פורסם כמה מן העבודה אפשר היה לשחזר מהם.
תגובות
טוען תגובות…