קלוד קוד סגר ארבע דרכים שבהן בדיקת ההרשאות פספסה פקודות
מאת ירון דויטשר עודכן לאחרונה:
ב-14 בספטמבר 2026 יצאה גרסה 2.1.271 של קלוד קוד, אחת הארוכות של החודש: קרוב לתשעים שורות ברשימת השינויים. ארבע מהן יושבות בסמיכות ומתארות את אותו כשל, וזה מה שהופך אותן לשוות קריאה ביחד ולא כל אחת לחוד.
בכל ארבע המקרים, בדיקת ההרשאות של כלי ה-Bash ניתחה את טקסט הפקודה והגיעה למסקנה שגויה לגבי מה שהפקודה עומדת לעשות. התוצאה זהה בכולן: פקודה עברה בלי לעורר את הכלל שהיה אמור לתפוס אותה.
מה בדיוק תוקן
קובץ שמגיע אחרי דגל שהבדיקה לא מכירה. פקודות כמו fmt ו-column מקבלות
שם קובץ לקריאה. כשהקובץ הופיע אחרי אופציה שהמנתח לא זיהה, הבדיקה לא ראתה אותו
כלל — כלומר כלל שחוסם קריאה של אותו נתיב לא הופעל.
תווים כלליים שלא הורחבו. כשתו כללי יושב בתוך התבנית של הפקודה או בתוך ערך של אופציה, הבדיקה דילגה על הקבצים שהוא מתרחב אליהם. הדוגמה שמופיעה ברשימה עצמה:
grep -v dir/* file
דגלי הכרזה על משתנים שהסוו את הפקודה. דגלים של הכרזת משתני shell יכלו לגרום לבדיקה לראות פקודה אחת בזמן שפקודה אחרת היא שרצה בפועל. זו החמורה מבין הארבע, מפני שכאן לא מדובר בקובץ שפוספס אלא בזהות הפקודה עצמה.
שרשראות מעבר בין תיקיות. פקודה שכללה שני מעברי תיקייה, תת-מעטפת, או שרשור
של מעבר תיקייה עם git דילגה על שאלת האישור כשההגדרה
permissions.blockReadsOutsideWorkingDirectories הייתה דלוקה — וזאת במצב
עוקף הרשאות ובמצב אוטומטי. ההגדרה הזאת אמורה לגרום לכלי הקבצים לסרב לקריאות
מחוץ לתיקיות העבודה בכל מצב הרשאות, ובדיוק זה מה שלא קרה.
למה ארבע יחד זה הסיפור
אישור ההרשאות אינו גבול אבטחה — זה מה שנכתב כאן באוגוסט, כששתי תקלות דומות נסגרו בגרסה 2.1.221. הטענה שם הייתה שבדיקת ההרשאות היא מנתח טקסט: היא קוראת מחרוזת לפני שמשהו רץ, ולכן היא טובה בדיוק כמו הניתוח שמאחוריה.
ארבע שורות באותה גרסה הן ההוכחה הנקייה ביותר לטענה הזאת עד כה. זה אינו כשל בתכנון ואין כאן פרצה דרמטית: אף אחת מהן אינה מאפשרת לתוקף חיצוני להריץ משהו, וכולן דורשות שקלוד ינסח פקודה בצורה מסוימת. אבל הן מראות שהמרחק בין “הכלל מוגדר” לבין “הכלל נאכף” עובר דרך מנתח תחביר שעדיין לומד תחביר shell.
למי זה באמת משנה
לרוב האנשים שעובדים מול המסך ומאשרים פקודות ידנית, ההשפעה המעשית קטנה: אישור ידני הוא עדיין אישור ידני.
הקהל שצריך לשים לב הוא מי שנשען על כללי הרשאות כדי למנוע מקלוד לקרוא דברים
— מפתחות ב-~/.ssh, קובצי .env, תיקיות של לקוחות אחרים — ובמיוחד מי שמריץ
סשנים ארוכים בלי לשבת מולם. שלוש מארבע התקלות מסתיימות בקובץ שנקרא בלי שהכלל
שחוסם אותו נכנס לפעולה, והרביעית נוגעת במפורש למצב האוטומטי ולמצב עוקף ההרשאות,
כלומר בדיוק לשני המצבים שבהם אין אדם שיעצור את זה.
מה עושים עכשיו
הצעד הראשון קצר: מעדכנים, ומוודאים שהגרסה היא 2.1.271 ומעלה.
claude update
claude --version
הצעד השני הוא זה שלא משתנה מגרסה לגרסה. כללי הרשאות הם סינון, לא גבול:
- מי שרוצה גבול אמיתי מפעיל בידוד: הסביבה המבודדת אינה קוראת את הפקודה כלל, אלא מגדירה גבול שמערכת ההפעלה אוכפת על התהליך שרץ. היא אינה מושפעת מאיך שהפקודה נוסחה, ולכן גם לא משגיאת ניתוח
- מי שמריץ במצב אוטומטי מגדיר גבול אמון: המסווג סומך על תיקיית העבודה ועל ה-remotes שלה, וכל השאר נחשב חיצוני. איך מגדירים את זה: מצב אוטומטי לא מכיר את התשתית שלכם
- וסוד שבאמת אסור שייקרא לא נשען על כלל טקסטואלי: אם נתיב חייב להישאר סגור, עדיף שלא יהיה נגיש לתהליך מלכתחילה
שורה תחתונה
גרסה 2.1.271 לא הוסיפה סיכון, היא חשפה כמה רחב המרווח בין שתי שכבות ההגנה של קלוד קוד. הבדיקה שקוראת טקסט תמשיך להשתפר ותמשיך לפספס מקרי קצה, כי זה טבעה. הבידוד שמערכת ההפעלה אוכפת אינו עובד כך, ולכן מי שמשאיר סוכן לרוץ לבד צריך את שניהם ולא רק את הראשון.
כל ההסבר על שתי השכבות ומה כל אחת מהן באמת עוצרת: הסביבה המבודדת בקלוד קוד. המקור: יומן השינויים הרשמי של קלוד קוד.