Dirty Pipe: פגיעות המאפשרת החלפת נתונים

לאחרונה החדשות פרצו זאת זוהתה פגיעות בליבת לינוקס ואשר כבר מקוטלג תחת CVE-2022-0847 ואשר הם שמו בתור "צינור מלוכלך".

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

בפן המעשי, הפגיעות יכול לשמש להחדרת קוד לתהליכים שרירותיים או נתונים פגומים בקבצים פתוחים. לדוגמה, אתה יכול לשנות את התוכן של קובץ authorized_keys עבור תהליך sshd.

לגבי Dirty Pipe

זה דומה לפגיעות הקריטית Dirty COW זוהה בשנת 2016 ו- Dirty Pipe מוזכר באותה רמה כמו Dirty COW מבחינת סכנה, אבל זה הרבה יותר קל לתפעול.

צינור מלוכלך זוהה במהלך ניתוח תלונות על פגיעה תקופתית בארכיונים הורדה ברשת על מערכת שמורידה קבצים דחוסים משרת רישום (37 נזקים ב-3 חודשים על מערכת טעונה), שהוכנו באמצעות פעולת splice() וצינורות ללא שם.

פגיעות מופיע מאז גרסת ליבת לינוקס 5.8, שוחרר באוגוסט 2020.

נראה בדרך אחרת, אנו יכולים לומר שהוא קיים בדביאן 11 אבל זה לא משפיע על ליבת הבסיס באובונטו 20.04 LTS, בעוד שעבור RHEL 8.x ו-openSUSE/SUSE 15 ליבות שמבוססות במקור על ענפים ישנים, אבל זה אפשרי שהשינוי שגורם לבעיה הועבר אליהם (עדיין אין נתונים מדויקים).

הפגיעות נובעת מהיעדר אתחול הערך "buf->flags" בקוד של הפונקציות copy_page_to_iter_pipe() ו-push_pipe(), למרות שהזיכרון לא נמחק בעת הקצאת המבנה, ועם מניפולציות מסוימות עם ללא שם. pipes, "buf->flags" עשוי להכיל ערך מפעולה אחרת. עם תכונה זו, משתמש מקומי ללא הרשאות יכול להשיג את המראה של הערך PIPE_BUF_FLAG_CAN_MERGE בדגל, מה שמאפשר לו להחליף נתונים במטמון הדף פשוט על ידי כתיבת נתונים חדשים לצינור ללא שם שהוכן במיוחד.

להתקפה ניתן לעשות, אתה צריך קובץ יעד שחייב להיות קריא ומכיוון שזכויות הגישה אינן נבדקות בעת כתיבה ל-pipe, ניתן לבצע החלפה במטמון העמוד, אפילו עבור קבצים הממוקמים במחיצות לקריאה בלבד (לדוגמה, עבור קבצי CD-ROM c).

בכך, לאחר החלפת המידע במטמון העמוד, התהליך, בעת קריאת הנתונים מהקובץ, לא יקבל את הנתונים האמיתיים, אלא את המוחלפים.

מוזכר ש פעולת ה-Dirty Pipe מסתכמת ביצירת צינור ללא שם ומילויו בנתונים שרירותיים כדי להשיג את הגדרת הדגל PIPE_BUF_FLAG_CAN_MERGE על כל מבני הטבעת המשויכים אליו.

לאחר מכן, הנתונים נקראים מהצינור, אך הדגל נשאר מוגדר בכל המופעים של מבנה pipe_buffer במבני הטבעת pipe_inode_info. לאחר מכן מתבצעת קריאה ל-splice() כדי לקרוא את הנתונים מקובץ היעד לתוך צינור ללא שם, החל מההיסט הנדרש. בעת כתיבת נתונים לצינור ללא שם זה, הדגל PIPE_BUF_FLAG_CAN_MERGE יחליף את הנתונים במטמון העמוד במקום ליצור מופע חדש של מבנה ה-pipe_buffer.

בסופו של דבר אם אתה מעוניין לדעת יותר על כך, אתה יכול לבדוק את הפרטים בהערה המקורית בקישור הבא.

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

מוזכר שתיקון הפגיעות המוצע זמין בגרסאות Linux Kernel 5.16.11, 5.15.25 ו-5.10.102 והתיקון כלול גם בקרנל המשמש בפלטפורמת אנדרואיד.


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי על הנתונים: AB Internet Networks 2008 SL
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.