איור מופשט שנוצר על רקע אפור-כחול בהיר עם רשת שרטוט דהויה: ריבוע גדול המצויר בקו מתאר דק בצבע צפחת כהה נמצא במרכז-ימין, ותוחם ערימה אנכית של חמישה דפים בצורת קבצים בצבע אפור בהיר. קו ענבר בודד יוצא מהערימה, נע שמאלה, ועובר בצורה נקייה דרך הקיר השמאלי של הריבוע, ומסתיים בריבוע ענבר מלא קטן בשליש השמאלי של המסגרת, בין כמה מלבנים אפורים מפוזרים ולא מיושרים. קו הגבול נשאר רציף במקום שבו קו הענבר חוצה אותו. לא מופיעים טקסט, מספרים, אנשים, סימני מותג או לוגואים של ארגונים. הלוגו של OrcaRouter משולב בפינה הימנית התחתונה.
AI Safety Incidents

CVE-2026-18953: לשרת Transform MCP של AWS לא היה גבול כתיבה

מחבר

Alistair Wren

תאריך פרסום

מודלים אחרונים · 20צפו בכל המודלים →
בנצ'מרקים: Artificial Analysis · מתעדכן יומית
חזרה לכל הפוסטים

אמזון פרסמה ב-5 באוגוסט 2026 את הודעת האבטחה 2026-075-AWS עבור CVE-2026-18953, מעבר נתיב (path traversal) בget_resource, הכלי של awslabs.aws-transform-mcp-server, שרת Model Context Protocol בקוד פתוח שרץ במחשב של המפתח עצמו כדי שעוזר AI יוכל להפעיל משימות AWS Transform ולאחזר את הארטיפקטים שלהן. גרסאות 0.1.0 עד 0.1.4 לא הגבילו כראוי שמות נתיבים, ולפרמטר savePath יכול היה לכתוב קבצים מחוץ לספריית העבודה המיועדת — וזאת על פי ייעוץ GitHub במאגר של אמזון: "עלול להוביל להרצת קוד מקומית". אמזון דירגה אותה ב-8.6, גבוה. התיקון הוא גרסה 0.1.5, ואין פתרון עוקף בצד השרת או כזה שמבוסס רק על תצורה, משום שמסלול הקוד הפגיע קיים בתצורת ברירת המחדל. אף מקור ציבורי לא תיעד שמישהו ניצל אותה. הרשומה המלאה, עם דירוגי החומרה והמהימנות שלה, נמצאת בOrca AI Incident Archive לצד תקריות MCP ותקריות סביבת הרצת סוכנים שנרשמו באותו חודש.

שרת MCP שכותב במקום שבו המפתח עובד

שרתי Model Context Protocol הם השכבה שמעניקה לעוזר כלים הניתנים להפעלה, והשרת הזה הוא מקומי במכוון. העלון של Amazon מתאר אותו כ"שרת MCP בקוד פתוח שרץ באופן מקומי במחשב של מפתח ומאפשר לעוזרים מבוססי AI לתקשר עם AWS Transform כדי להריץ משימות שינוי קוד ולאחזר את הארטיפקטים שלהן". תיאור החבילה שלו ב-Python Package Index אומר שהוא חושף את מחזור החיים של Transform דרך 19 כלים, מנהל סביבות עבודה לשינוי, משימות, מחברים, משימות עם מעורבות אדם בלולאה, ארטיפקטים וצ'אט, ומכסה מודרניזציה של מיינפריים, הגירת VMware, מודרניזציה של .NET ושינויי קוד מותאמים אישית.

הצבה זו היא שנותנת לפגיעות את משמעותה. שרת בתשתית של הספק עצמו שמטפל בשם קובץ באופן שגוי משחית את האחסון של הספק. השרת הזה רץ בהרשאות המפתח, בספריית הבית של המפתח, לצד תצורת ה-shell ומפתחות ה-SSH שלו, וההשפעה שאמזון מתארת אינה הורדה פגומה אלא "הרצת קוד מקומית". כל ציון המשויך ל-CVE מסכים על נקודה אחת: וקטור התקיפה הוא מקומי, לא רשתי.

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

כמה רע, ולפי החשבון של מי

שלושה ציונים משויכים ל-CVE הזה והם אינם תואמים. Amazon, שהקצתה את ה-CVE כרשות המספור, מדרגת אותו ב-8.6 High ב-CVSS v3.1 עם הווקטור CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H — מקומי, מורכבות נמוכה, ללא הרשאות נדרשות, נדרשת אינטראקציה של משתמש, היקף שונה, השפעה גבוהה על סודיות, שלמות וזמינות. לרשומה של NIST ב-National Vulnerability Database יש ציון ראשי משלה ב-v3.1 של 8.8 על וקטור אחר, CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H: נדרשות הרשאות נמוכות, ללא אינטראקציה של משתמש. שניהם נמצאים ברצועת High. אי-ההסכמה נוגעת לתנאים מוקדמים — האם התוקף כבר זקוק לנקודת אחיזה, והאם יש לשכנע אדם — ולא לשאלה עד כמה חמורה התוצאה.

ציון CVSS v4.0 של Amazon עבור אותו CVE הוא 6.3, בינוני, על CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H. קראו את מדדי ההשפעה: שום דבר במערכת הפגיעה עצמה, הכול גבוה במערכת העוקבת. זו הצורה של מעבר שפורץ את הגבול של הכלי עצמו — הנזק נגרם לכל מה שהכלי יכול להגיע אליו, ולכן הוא נופל לעמודת תת-המערכת והמערכת הפגיעה מקבלת ציון אפס.

A self-built HTML card titled 'One CVE, three scores', badged 'CVE-2026-18953 · CWE-22', subtitled 'Who scored it, on which scale, and what the vectors disagree about'. A table of four rows: Amazon as CVE numbering authority, CVSS v3.1, 8.6 High, vector AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H, noted as no privileges required and user interaction required; NIST as NVD primary, CVSS v3.1, 8.8 High, vector AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H, noted as low privileges required and no user interaction; Amazon again, CVSS v4.0, 6.3 Medium, vector AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H, noted as impact recorded on the subsequent system only; CISA SSVC dated 6 August 2026 with no numeric score, listing exploitation none, automatable no, technical impact total. Three boxes below read 'Where the two v3.1 vectors diverge', 'Where they agree' and 'What the record does not carry'. A footer reads 'Sources: AWS security bulletin 2026-075-AWS; GHSA-66mr-jr63-2jgw; NVD record for CVE-2026-18953, last modified 23 October 2026; CISA Vulnrichment SSVC dated 6 August 2026. The two v3.1 vectors are separate assessments of the same CVE, not a correction of one by the other.' The OrcaRouter logo is composited in the bottom-right corner.

ההעשרה של CISA ל-CVE, מיום 6 באוגוסט 2026, מתעדת החלטת SSVC: ניצול: אין, אוטומציה: לא, השפעה טכנית: מוחלטת. הרשומה של NVD עודכנה לאחרונה ב-23 באוקטובר 2026 ועדיין כוללת את 8.6 ואת 8.8 זה לצד זה. אף אחד מהמסמכים אינו מתייחס לאחר כאל שגוי.

מה הקוד הפגיע עשה, ומה השתנה ב-0.1.5

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

התיאור הציבורי המפורט ביותר של המנגנון אינו של אמזון. מדובר במאגר קטן להוכחת היתכנות, ronamosa/CVE-2026-18953, שפורסם ב-GitHub ב-8 באוגוסט 2026 תחת Apache-2.0 — שני קומיטים, ללא כוכבים וללא פורקים נכון למועד הכתיבה — וכולל עותקים זהים של הגרסה הפגיעה והמתוקנת של file_validation.py ומריץ את שניהם באמצעות אותם קלטים.

הפרשנות שלה ל-0.1.4 היא זו: validate_write_path() פתרה את savePath באמצעות realpath ו-expanduser, דחתה רשימת חסימה קצרה של מיקומים (~/.aws, ~/.ssh, ~/.gnupg, ~/.docker, ~/.aws-transform-mcp, /etc/shadow, /etc/passwd), והסירה רכיבי תיקיות משם הקובץ שסופק. היא מעולם לא הגבילה את הנתיב שנפתר לשום תיקיית בסיס או תיקיית עבודה. רשימת חסימה של שמות קבצים רגישים — .bashrc, .zshrc, authorized_keys, id_rsa — נאכפה בקריאות אך לא בכתיבות.

המאגר מדגים שלוש כתיבות שהיכולת הזו מאפשרת: נתיב מוחלט שאינו זקוק כלל למעבר נתיבים, מילוט יחסי מסוג ../../, ושם של קובץ נקודה שנתיב הקריאה היה דוחה. כל השלוש נוחתות בתוך ספרייה זמנית שהסקריפט יוצר, ופלט הדוגמה שלו מציג dropped_by_absolute_path.sh, dropped_by_traversal.sh וקובץ .bashrc תחת ספריית בית מדומה; לעולם לא נוגעים בספריית הבית האמיתית. גרסה 0.1.5 מוסיפה את הגבול החסר: ספריית בסיס שנלקחת מתוך $AWS_TRANSFORM_MCP_WRITE_DIR או מספריית העבודה של השרת בעת האתחול, שכל כתיבה שנפתרה חייבת להימצא תחתיה, ובנוסף רשימת החסימה של שמות קבצים שמוחלת על נתיב הכתיבה הסופי שנפתר. המאמת המתוקן מעלה את ההודעה "Write path must be within the working directory" עבור כל שלושת המקרים.

A generated abstract illustration on a pale grey-blue field with a faint blueprint grid: two nested rectangles drawn in thin dark-slate outline, one inside the other with a gap between them, sit slightly left of centre. A dotted cyan line runs from the centre of the inner rectangle outward, crossing the gap, and stops at the outer rectangle before resuming on the far side. Three small solid amber squares sit at staggered positions along that line, the outermost well beyond the larger rectangle. No text, numbers, people, brand marks or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.

אף אחד מהפרטים הללו אינו מופיע בהודעת הייעוץ, והמאגר אינו טוען שהם מקורם שם. יש להתייחס לרשימת החסימה, לבדיקת שם הקובץ לקריאה בלבד ולתיקון תיקיית הבסיס כאל שחזור מקוד המקור, ולא כממצא רשמי שני. מה שהמאגר כן מוסיף מעבר להודעת הייעוץ הוא תיאור של מי שיכול לספק את הנתיב: מכיוון שתפקיד השרת הוא למשוך תוכן של עבודות ומשימות אל ההקשר של עוזר, הגורם שבוחר את savePath אינו חייב להיות האדם שליד המקלדת. עוזר המונחה על ידי תוכן לא מהימן שאותו אסף דרך אותו כלי יכול להכריע. זו טענת המאגר, הנשענת על הקוד ועל עיצוב הכלי, ולא טענה שאמזון משמיעה; ה״גורם תלוי ההקשר״ הבלתי מוגדר של אמזון מתיישב עם זה ונעצר שם.

שבעה שבועות בין התיקון לבין העלון

התיקון לא הגיע עם ההודעה. היסטוריית השחרורים של Python Package Index — מטא-נתונים ממקור ראשון מהמרשם שדרכו מופצת החבילה — מתארכת את 0.1.4 ל-20 במאי 2026 ואת 0.1.5 ל-17 ביוני 2026, שבעה שבועות לפני פרסום Bulletin 2026-075 ב-5 באוגוסט. אין במרשם קובץ 0.1.0 כלל; הארטיפקט המוקדם ביותר שפורסם בתוך הטווח הפגוע הוא 0.1.1, שהועלה ב-9 במאי 2026. מפתח המתקין מהמרשם יכול היה אפוא לקבל גרסה פגיעה רק בין 9 במאי ל-17 ביוני, וכל מי שעקב אחר השחרורים כבר היה בקוד מתוקן באמצע יוני.

A self-built HTML card titled 'The patch came seven weeks early', subtitled 'Release dates from the Python Package Index, laid against the advisory', with a side note that Amazon publishes no report date and no discovery date. A vertical timeline of nine dated milestones reads: 23 April 2026, first package file 0.0.0 on the index; 9 May 2026, 0.1.1, earliest artifact inside the affected range; 20 May 2026, 0.1.4, last vulnerable release; 17 June 2026, tagged PATCHED, 0.1.5, first fixed release, seven weeks before the bulletin; 5 August 2026 at 12:30 PDT, tagged ADVISORY, bulletin 2026-075-AWS published with the CVE published at 19:33 UTC the same day; 6 August 2026, CISA SSVC recording exploitation none, automatable no, technical impact total; 8 August 2026, independent proof-of-concept repository published; 23 October 2026, NVD last modified, carrying NIST's 8.8 beside Amazon's 8.6; 27 October 2026, 0.2.4, latest release at the time of writing. A highlight box reads '49 days' from the first fixed release to the bulletin. A footer reads 'Sources: PyPI release metadata for awslabs.aws-transform-mcp-server; AWS security bulletin 2026-075-AWS; CVE record for CVE-2026-18953; CISA Vulnrichment; github.com/ronamosa/CVE-2026-18953; NVD.' The OrcaRouter logo is composited in the bottom-right corner.

אמזון אינה אומרת מתי נודע לה על הבעיה, מתי הגיע הדוח, או מדוע יצאה ההפצה שסגרה אותה. האדם היחיד הנקוב ברשומה הוא דרו ריינס, שמודים לו גם בבולטין וגם בייעוץ של GitHub "על שיתוף הפעולה בנושא זה במסגרת תהליך גילוי הבעיה המתואם". GHSA-66mr-jr63-2jgw פורסם במאגר awslabs/mcp של אמזון ב-5 באוגוסט 2026, באותו יום שבו פורסם הבולטין; רשומת ה-CVE הוקצתה ב-13:44 UTC ופורסמה ב-19:33 UTC באותו יום.

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

מה שהתיעוד מבסס, ומה שהוא אינו מבסס

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

• מאומת. Amazon פרסמה את עלון 2026-075-AWS ב-5 באוגוסט 2026 המכסה את CVE-2026-18953, חציית נתיב מסוג CWE-22 בטיפול ב-get_resource של savePath ב-awslabs.aws-transform-mcp-server 0.1.0 עד 0.1.4, שתוקנה ב-0.1.5, ללא פתרון עוקף בצד השרת או פתרון עוקף מבוסס תצורה בלבד מכיוון שהנתיב הפגיע נמצא בתצורת ברירת המחדל.

• מבוסס. הציונים והפער ביניהם: 8.6 גבוה מאת Amazon כרשות המספור של CVE, 8.8 גבוה מאת NIST כציון הראשי של NVD, 6.3 בינוני ב-CVSS v4.0, והחלטת SSVC של CISA מ-6 באוגוסט שלא נצפו ניצול ולא נתיב שניתן לאוטומציה.

• נקבע. מועדי השחרור ב-Python Package Index, והקרדיט לדרו ריינס על גילוי מתואם.

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

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

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

• לא נקבע.דיווח עצמאי. נראה שאף כלי תקשורת מיינסטרים לא סיקר את ה-CVE הזה. התיעוד הציבורי כולל את שלושת המסמכים של Amazon, את תוספות המידע של NIST ו-CISA למסמכים אלה, דפי מעקב שמציגים מחדש את התיעוד, ואת מאגר ההוכחה-היתכנות הקטן היחיד שתואר לעיל.

מה השתנה, ומה כדאי לבדוק

הפתרון של אמזון הוא העלאת גרסה ותו לא: שדרגו ל-0.1.5 או לגרסה מאוחרת יותר, ו"ודאו שכל קוד מסועף או נגזר מוטלא כך שיכלול את התיקונים החדשים". הסעיף השני הוא זה שממשיך הלאה. השרת הוא קוד פתוח, וסיעוף שהטמיע את מאמת 0.1.4 יורש את הפגם בלי לרשת את הודעת האבטחה; הבולטין מבקש ממפעילי קוד נגזר להעביר את השינוי לתוכו, כלומר מהדורת המעלה-זרם אינה מגיעה לעותק שמישהו אחר מתחזק.

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

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