פגיעות ב-Docker המאפשרת לך לברוח מהמכולה

בערכת כלים לניהול מיכלי Docker Linux מבודדים מזוהה פגיעות (CVE-2018-15664), אשר, תחת סט מסוים של נסיבות, מאפשר לך לגשת לסביבת המארח ממיכל אם יש לך את היכולת להפעיל את התמונות שלך במערכת או עם גישה למיכל פועל. הבעיה מופיעה בכל הגרסאות של Docker ונשארת לא מתוקנת (מוצעת, אך עדיין לא התקבלה, תיקון, המיישמת את השעיית המכולה תוך כדי ביצוע פעולות עם ה-FS).

הפגיעות מאפשרת לחלץ קבצים ממיכל לחלק שרירותי של מערכת הקבצים של המערכת המארחת בעת ביצוע הפקודה "docker cp". חילוץ הקבצים מתבצע עם זכויות שורש, מה שמאפשר לקרוא או לכתוב כל קבצים בסביבת המארח, וזה מספיק כדי לקבל שליטה על המערכת המארח (למשל, אתה יכול להחליף את /etc/shadow).

ההתקפה יכולה להתבצע רק כאשר המנהלן מבצע את הפקודה "docker cp" כדי להעתיק קבצים אל המכולה או ממנה. לפיכך, התוקף צריך לשכנע איכשהו את מנהל הדוקר בצורך לבצע פעולה זו ולחזות את הנתיב המשמש בעת ההעתקה. מצד שני, התקפה יכולה להתבצע, למשל, כאשר שירותי ענן מספקים כלים להעתקת קבצי תצורה לתוך קונטיינר, שנבנה באמצעות פקודת "docker cp".

הבעיה נגרמת בשל פגם ביישום הפונקציה FollowSymlinkInScope, שמחשב את הנתיב המוחלט במערכת הקבצים הראשית על סמך הנתיב היחסי, תוך התחשבות במיקום הקונטיינר. בזמן ביצוע הפקודה "docker cp", קצר טווח מצב Race, שבו הנתיב כבר אומת, אך הפעולה טרם בוצעה. מכיוון שההעתקה מתבצעת בהקשר של מערכת הקבצים הראשית של המערכת המארחת, בתוך פרק זמן מוגדר, ניתן להצליח להחליף את הקישור בנתיב אחר וליזום העתקה של נתונים למיקום שרירותי במערכת הקבצים מחוץ ל- מְכוֹלָה.

מכיוון שחלון הזמן להתרחשות מצב מירוץ מוגבל מאוד במכשיר מוכן לנצל אב טיפוס בעת ביצוע פעולות העתקה ממיכל, ניתן היה להגיע לתקיפה מוצלחת בפחות מ-1% מהמקרים בהחלפה מחזורית של קישור סמלי בנתיב בו נעשה שימוש בפעולת ההעתקה (התקיפה המוצלחת בוצעה לאחר כ-10 שניות של ניסיונות להעתיק ברציפות את הקובץ בלולאה עם הפקודה "docker cp").

על ידי ביצוע פעולת העתקה לתוך קונטיינר, אתה יכול להשיג התקפת החלפת קבצים שניתן לחזור על המערכת המארחת בכמה איטרציות בלבד. אפשרות ההתקפה נובעת מכך שבעת העתקה לקונטיינר נעשה שימוש במושג "chrootarchive", לפיו תהליך archive.go מחלץ את הארכיון לא ל-chroot של שורש המכולה, אלא ל-chroot של ה-container. ספריית האב של נתיב המטרה, נשלטת על ידי התוקף, ואינה עוצרת את ביצוע הקונטיינר (chroot משמש כסימן לניצול תנאי מירוץ).

מקור: OpenNet.ru

הוספת תגובה