לאחרונה החדשות פרצו זאת זוהתה פגיעות בליבת לינוקס ואשר כבר מקוטלג תחת 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 והתיקון כלול גם בקרנל המשמש בפלטפורמת אנדרואיד.