פרצה ב-AWS Bedrock: הנחיה אחת הספיקה כדי להשתלט על כל סוכני ה-AI בחשבון
חוקרי Zenity Labs מצאו שרשרת חולשות בפלטפורמת Amazon Bedrock AgentCore. לדבריהם, הודעת צ'אט אחת לסוכן ציבורי הספיקה כדי להשתלט על כל הסוכנים באותו חשבון AWS ובאותו אזור, ולחשוף קוד מקור, סיסמאות ושיחות פרטיות. AWS תיקנה את הבעיה באופן חלקי, והחוקרים ממליצים לחברות להגביל ידנית את ההרשאות של הסוכנים שלהן.
חוקרי אבטחה מחברת Zenity Labs חשפו שרשרת חולשות בפלטפורמת Amazon Bedrock AgentCore, שירות של AWS להרצת סוכני AI ארגוניים. לפי החוקרים, תוקף שיש לו גישת צ'אט לסוכן ציבורי אחד בלבד יכול היה להשתלט באמצעות הנחיה (prompt) אחת על כל הסוכנים שפועלים באותו חשבון AWS ובאותו אזור (region). מכאן נפתחה לו גישה לשיחות פרטיות, לקוד מקור ולפרטי גישה שמורים. החוקרים קראו לשרשרת החולשות "AgentCorruption", כך דיווח האתר The Decoder.
הסוכן מסר את המפתחות שלו
AgentCore מאפשרת לחברות לבנות סוכנים עם כלים, זיכרון וניהול הרשאות. בתשתית של AWS פועל שירות מטא-דאטה (Instance Metadata Service) בכתובת הפנימית 169.254.169.254. השירות מנפיק פרטי גישה זמניים שבעזרתם שרתים ועומסי עבודה מזדהים מול AWS. מי שמשיג את פרטי הגישה האלה יכול להתחזות לשרת.
סוכן AI לא אמור להגיע לשירות הזה. לפי Zenity, ב-AgentCore לא הייתה הפרדה (isolation) מספקת. החוקרים בנו סוכן ניסיוני עם Strands, ספריית קוד פתוח של AWS לבניית סוכנים שמגיעה עם כלי לגלישה ברשת. הם ביקשו ממנו במילים פשוטות לפנות לשירות המטא-דאטה ולשלוח את התוצאות לשרת חיצוני, והסוכן ביצע. "גבול ה-sandbox שהיינו אמורים להתמודד מולו פשוט לא היה שם", כתבו החוקרים.
ההודעה נשלחה דרך חלון שירות לקוחות רגיל. בתגובה, השירות החזיר את פרטי הגישה הזמניים המלאים של הסוכן, כולל מפתחות ו-session token. פרטי הגישה עבדו גם במחשב של החוקרים, מחוץ לפלטפורמה, כך שמאותו רגע הם כבר לא היו צריכים את הסוכן כדי להמשיך במתקפה. לפי החוקרים, שירות המטא-דאטה חשף גם חומרי הצפנה (תעודות ומפתחות) של שירות פנימי של AWS, וכתובת חתומה מראש לאחסון S3 פנימי שלא שייך לחשבון שלהם.
לפי Zenity, גם הסרה של כלי הגלישה לא הייתה עוזרת, כי הפגם נמצא בפלטפורמה עצמה. החוקרים ביצעו את המתקפה גם דרך כלי שורת פקודה.
הרשאות ברירת מחדל על האזור כולו
ההשתלטות התאפשרה כי הרשאות ברירת המחדל של AgentCore לא הוגבלו לסוכן שקיבל אותן. לפי Zenity, הן חלו על כל הסוכנים באותו חשבון ואזור, וכללו הרשאות קריאה, כתיבה ומחיקה, כלומר גם אפשרות לפעולות הרסניות.
עם ההרשאות האלה החוקרים יכלו להציג רשימה של כל הסוכנים, להוריד את חבילות הקוד שלהם תוך שניות ולהפעיל כל אחד מהם. לדבריהם, בחבילות כאלה נשארים לא פעם סיסמאות או מפתחות API שנשכחו בתוך הקוד. תוקף יכול היה, למשל, לעבור מסוכן שירות לקוחות ציבורי לסוכן פנימי של מחלקת הכספים ולגשת לנתונים שלו. החוקרים יכלו גם לקרוא את כל השיחות הפרטיות בין משתמשים לסוכנים באזור.
בסוכנים עם זיכרון ארוך טווח, החוקרים יכלו לשנות את הזיכרון ולהשפיע כך על ההתנהגות העתידית של הסוכן. בניסוי שלהם הם השתילו הוראות שגרמו לסוכנים להעביר שיחות עתידיות ליעד חיצוני. המשתמשים היו ממשיכים לשוחח עם סוכן שנראה אמין בלי לשים לב לשום דבר חריג.
תיקון חלקי
לפי הדיווח, AWS תיקנה את הבעיה באופן חלקי. סוכנים חדשים יתקשו יותר לשלוף מטא-דאטה פנימי, ותפקיד ההרצה (execution role) שמוגדר כברירת מחדל קיבל הרשאות מצומצמות יותר. החוקרים עדיין ממליצים לחברות להגדיר ידנית לכל סוכן תפקיד עם ההרשאות המינימליות שהוא צריך. מכיוון שהתיקון מתואר כנוגע לסוכנים חדשים, סביר להניח שארגונים שכבר מפעילים סוכנים על הפלטפורמה צריכים לבדוק את ההגדרות שלהם בעצמם.
למה זה חשוב
AWS עצמה ממליצה לשמור סיסמאות ומפתחות API באחסון מאובטח ונפרד מהסוכנים. לפי Zenity, הרשאות ברירת המחדל של AgentCore עקפו את ההגנה הזו. המקרה מראה שבעולם של סוכני AI, התוקף לא צריך לפרוץ לשרת. מספיק לבקש מהסוכן בנימוס. ככל הנראה, ככל שארגונים יחברו יותר סוכנים לנתונים ולמערכות פנימיות, הגדרות ברירת המחדל של הפלטפורמות, ולא רק המודלים עצמם, יהפכו לאחד ממוקדי הסיכון המרכזיים.