שתי פגיעויות התגלו בליבת לינוקס. פגיעויות אלו דומות במהותן לפגיעות Copy Fail שנחשפה לפני מספר ימים, אך הן משפיעות על תת-מערכות שונות - xfrm-ESP ו-RxRPC. סדרת פגיעויות זו זכתה לשם הקוד Dirty Frag (המכונה גם Copy Fail 2). פגיעויות אלו מאפשרות למשתמש לא מורשה לקבל הרשאות root על ידי החלפת נתוני תהליך במטמון הדף. קיים ניצול לרעה שפועל בכל הפצות לינוקס הנוכחיות. הפגיעות נחשפה לפני פרסום תיקונים, אך קיימת דרך עוקפת.
פגיעות Dirty Frag מכסה שתי פגיעויות שונות: הראשונה במודול xfrm-ESP, המשמש להאצת פעולות הצפנת IPsec באמצעות פרוטוקול ESP (Encapsulating Security Payload), והשנייה במנהל ההתקן RxRPC, המיישם את משפחת השקעים AF_RXRPC ואת פרוטוקול RPC בעל אותו שם, הפועלים על גבי UDP. כל פגיעות, בנפרד, מאפשרת הרשאות root. הפגיעות xfrm-ESP קיימת בליבת לינוקס מאז ינואר 2017, ופגיעות RxRPC קיימת מאז יוני 2023. שתי הבעיות נגרמות על ידי אופטימיזציות המאפשרות כתיבה ישירה למטמון הדף.
כדי לנצל את הפגיעות xfrm-ESP, על המשתמש להיות בעל הרשאה ליצור מרחבי שמות, וכדי לנצל את הפגיעות RxRPC, יש לטעון את מודול הליבה rxrpc.ko. לדוגמה, באובונטו, כללי AppArmor מונעים ממשתמשים לא מורשים ליצור מרחבי שמות, אך מודול rxrpc.ko נטען כברירת מחדל. בחלק מההפצות חסר מודול rxrpc.ko אך אינן חוסמות יצירת מרחבי שמות. החוקר שגילה את הבעיה פיתח פרצה משולבת המסוגלת לתקוף את המערכת באמצעות שתי הפגיעויות, מה שמאפשר לנצל את הבעיה בכל ההפצות העיקריות. אושר כי הניצול פועל על Ubuntu 24.04.4 עם ליבה 6.17.0-23, RHEL 10.1 עם ליבה 6.12.0-124.49.1, openSUSE Tumbleweed עם ליבה 7.0.2-1, CentOS Stream 10 עם ליבה 6.12.0-224, AlmaLinux 10 עם ליבה 6.12.0-124.52.3, ו-Fedora 44 עם ליבה 6.19.14-300.
בדומה לפגיעות Copy Fail, הבעיות ב-xfrm-ESP וב-RxRPC נגרמות מפענוח נתונים במקום באמצעות הפונקציה splice(), שמעבירה נתונים בין מתארי קבצים וצינורות ללא העתקה, על ידי העברת הפניות לאלמנטים במטמון הדף. קיזוזי כתיבה חושבו ללא בדיקות מתאימות כדי להתחשב בשימוש בהפניות ישירות לאלמנטים במטמון הדף, מה שאפשר לבקשות שנוצרו במיוחד לדרוס 4 בתים בקיזוז נתון ולשנות את תוכן כל קובץ במטמון הדף.
כל פעולות קריאת הקבצים מאחזרות תחילה תוכן ממטמון הדף. אם הנתונים במטמון הדף משתנים, פעולות קריאת הקבצים יחזירו נתונים שהוחלפו, לא את המידע בפועל המאוחסן בכונן. ניצול הפגיעות מסתכם בשינוי מטמון הדף עבור קובץ הרצה עם דגל root suid. לדוגמה, כדי לקבל הרשאות root, ניתן לקרוא את קובץ הרצה /usr/bin/su כדי למקם אותו במטמון הדף, ולאחר מכן להחליף קוד משלו בתוכן הקובץ שנטען במטמון הדף. הפעלה נוספת של כלי השירות "su" תגרום לכך שהעותק שהשתנה ממטמון הדף ייטען לזיכרון, ולא קובץ הרצה המקורי מהכונן.
גילוי הפגיעות ושחרור מתואם של התיקונים היו אמורים להתקיים ב-12 במאי, אך עקב דליפה, היה צורך לפרסם את פרטי הפגיעות לפני שחרור התיקונים. בסוף אפריל, תיקונים עבור rxrpc, ipsec ו-xfrm פורסמו לרשימת התפוצה הציבורית של netdev מבלי לציין שהם קשורים לפגיעות. ב-5 במאי, מתחזק תת-מערכת ה-IPsec קיבל שינוי במאגר Git של netdev עם תיקון מוצע במודול xfrm-esp. תיאור השינוי היה זהה ברובו לתיאור הבעיה שהובילה לפגיעות Copy Fail במודול algif_aead. חוקר אבטחה התעניין בתיקון זה, הצליח ליצור פרצת תקינה פעילה ופרסם אותו, מבלי להיות מודע לכך שהוטל אמברגו על גילוי מידע על הבעיה עד ה-12 במאי.
עדכונים עם תיקונים עבור ליבת לינוקס וחבילות ליבה בהפצות טרם פורסמו, אך קיימים תיקונים המטפלים בבעיות - xfrm-esp ו-rxrpc. מזהי CVE לא הוקצו, מה שמסבך את מעקב אחר עדכוני חבילות בהפצות. כפתרון עוקף, ניתן לחסום את טעינת מודולי הליבה של esp4, esp6 ו-rxrpc: sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"
מקור: OpenNet.ru
