במערכת האקולוגית של אבטחת הסייבר, המנטרה "כתוב מחדש ב-Rust" זכתה זה מכבר לשבחים כפתרון האולטימטיבי לפגיעות של פגיעה בזיכרון. ההבטחה הייתה פשוטה: ערבויות בזמן הקומפילציה יבטל סוגי באגים שלמים. עם זאת, החשיפה של CVE-2025-68260 בדצמבר 2025 ניפץ את האשליה של חסינות מוחלטת. פגיעות זו מסמנת נקודת מפנה היסטורית: זוהי הפגיעות הראשונה שאושרה כפגיעות חמורה המושרשת ברכיבי Rust של ליבת לינוקס.
עבור מהנדסי אבטחה קשוחים, מתחזקי קרנל ומומחי בדיקות חדירה, CVE-2025-68260 הוא יותר מסתם באג — הוא מקרה בוחן הממחיש את מגבלות הניתוח הסטטי. הוא חושף אמת קריטית: בודק השאלת חלודה לא יכול להציל אותך מטעויות לוגיות בתוך לא בטוח בלוקים, במיוחד בגבול FFI.
ניתוח מקיף זה מנתח את המנגנונים הטכניים של הפגיעות, את כישלון מעטפות האבטחה, ואת האופן שבו פרדיגמות אבטחה מבוססות בינה מלאכותית מתפתחות כדי לתפוס את מה שהקומפילרים מפספסים.
האשליה התנפצה: ניתוח טכני של CVE-2025-68260
בניגוד לתפיסות מוטעות נפוצות, CVE-2025-68260 לא התרחש ב-"Safe Rust". במקום זאת, הוא התגלה בגבול המסוכן בין Rust לבין גרעין ה-C הישן — באופן ספציפי בתוך לא בטוח חסימה בתת-מערכת של מנהל התקן רשת.
הפגיעות היא שימוש לאחר שחרור (UAF) מצב המופעל על ידי מצב מירוץ, ניתן להגיע אליו באמצעות קריאות מערכת ספציפיות במרחב המשתמש.
הגורם השורשי: אי-שינוי שבור בבלוקים לא בטוחים
כדי להשתלב בקרנל לינוקס, Rust משתמש ב-FFI (Foreign Function Interface) כדי לתקשר עם מבני נתונים ב-C. כדי להפוך את זה לארגונומי עבור מפתחים, מצביעים גולמיים אלה לעתים קרובות עטופים במבני Rust "בטוחים".
ב-CVE-2025-68260, הפגיעות נבעה מאי-התאמה בין מחזור החיים המשוער של מעטפת Rust לבין מחזור החיים בפועל של אובייקט הקרנל המנוהל על ידי C.
לוגיקה פגיעה קונספטואלית:
חלודה
// ייצוג מפושט של לוגיקת מנהל ההתקן הפגיע struct NetDeviceWrapper { // מצביע גולמי למבנה התקן הרשת בצד C raw_c_ptr: *mut c_void, }
// המפתח מניח בטיחות מפורשת של תהליכים או אי-בטיחות של התמדת אובייקטים impl Send עבור NetDeviceWrapper {}
impl NetDeviceWrapper { pub fn transmit_frame(&self, payload: &[u8]) { unsafe { // פגיעות: // קוד Rust מניח ש-'raw_c_ptr' תקף מכיוון ש-'&self' קיים. // עם זאת, ייתכן שהאובייקט C הבסיסי שוחרר על ידי // אירוע קרנל מקביל (לדוגמה, ניתוק חם של התקן באמצעות syscall). let device = self.raw_c_ptr as *mut c_net_device;
// ביטול הפניה של מצביע תלוי מוביל ל-UAF // הקומפילר אינו יכול לראות ש-'device' מצביע על זיכרון משוחרר. (*device).ops.xmit(payload.as_ptr(), payload.len()); } }
}`
בעוד שהמהדר של Rust אימת ש- &self היה תקף, לא הייתה לו נראות למצב הזיכרון שאליו הצביע raw_c_ptr. כאשר הצד C של הקרנל שחרר את המכשיר עקב מצב תחרות, מעטפת Rust נותרה עם מצביע תלוי.
זהו תמציתו של CVE-2025-68260: הקומפילר סמך על המפתח האנושי שיקיים את הקבועים בתוך ה- לא בטוח בלוק, והאדם לא הצליח להתמודד עם הכאוס של ריבוי המשימות בקרנל לינוקס.
ניתוח השפעה: מפאניקה להחרפת הפריבילגיות
אמנם התסמין המיידי של ניצול CVE-2025-68260 הוא לרוב Kernel Panic (DoS), אך טכניקות ניצול מתקדמות הכוללות Heap Spraying (המכוונות באופן ספציפי ל- kmalloc מטמון) יכול להפוך את ה-UAF הזה ל- העלאת הרשאות מקומיות (LPE) וקטור.
על ידי ריסוס ערימת הקרנל בנתונים מבוקרים, תוקף יכול לדרוס את הקרנל המשוחרר. net_device מבנה. כאשר קוד Rust מבצע את הקריאה החוזרת, הוא קופץ לכתובת הנשלטת על ידי התוקף, תוך עקיפת הגנות הקרנל כמו KASLR (אם דלף) ו-SMEP/SMAP באמצעות שרשראות ROP.
פגיעויות Rust לעומת פגיעויות Legacy: השוואה
| תכונה | פגיעויות C ישנות | CVE-2025-68260 (Rust) |
|---|---|---|
| הגורם העיקרי | עודף זיכרון, זיכרון לא מותאם | שגיאות לוגיות ב לא בטוח בלוקים, חוזים FFI שבורים |
| איתור | קל (KASAN, ניתוח סטטי) | קשה (נראה כמו קוד תקין בהקשר זה) |
| ניצול מורכבות | נמוך/בינוני (פרימיטיבים ידועים) | גבוה (נדרשת הבנה של מבנה הזיכרון של Rust) |
| הפחתה | בדיקת גבולות | ביקורת קפדנית של לא בטוח גבולות |
תפקידה של הבינה המלאכותית בביקורת Rust לא בטוחה: הגישה הפניגנטית
כלי SAST (בדיקת אבטחת יישומים סטטית) מסורתיים מתקשים להתמודד עם CVE-2025-68260. הם רואים תוקף לא בטוח הפניה למשתנה. אין להם את ההקשר הדרוש כדי לדעת זאת. חיצונית, האובייקט עשוי להשתחרר.
זה המקום שבו Penligent.ai מגדירה מחדש את תחום בדיקות החדירה האוטומטיות. Penligent משתמשת בסוכני AI מתקדמים המסוגלים לבצע חשיבה סמנטית, ולא רק התאמת תבניות.
- ניתוח הקשר סמנטי: המנוע של Penligent מנתח את הקוד כוונה. הוא מבין שמצביע בתוך עטיפת Rust תלוי במחזור החיים של ליבת C חיצונית. הוא מסמן
לא בטוחבלוקים שחסרים בהם בדיקות אימות מפורשות (כמו ספירת הפניות) עבור מצבים חיצוניים אלה. - פוזינג אוטומטי של תנאי מירוץ: בהכירה בפוטנציאל לקיומם של באגים במקביל, Penligent יכולה ליצור ניצולים ספציפיים של PoC המכים בממשק עם קריאות מערכת מקבילות, ובכך מעמיסים עומס על
לא בטוחהנחות שביצע המפתח.
ככל שהקרנל של לינוקס מאמץ יותר את Rust (באמצעות Rust עבור לינוקס פרויקט), נפח לא בטוח קוד הדבק יגדל. Penligent מספקת את הפיקוח האוטומטי והחכם הדרוש כדי לאמת את הגבולות הקריטיים הללו, שבהם הבדיקה האנושית לעתים קרובות נכשלת.
מסקנה: העתיד של אבטחת הקרנל
CVE-2025-68260 אינו כתב אישום נגד Rust; זהו ציון דרך בהתבגרות. הוא מלמד את קהילת האבטחה שלושה לקחים חשובים:
- בטיחות הזיכרון אינה מוחלטת: זה נגמר איפה
לא בטוחמתחיל. - משטח התקיפה השתנה: התוקפים יעברו מחיפוש אחר הצפות זיכרון פשוטות לחיפוש אחר פגמים לוגיים מורכבים במעטפות FFI.
- כלי העבודה חייבים להתפתח: אנו זקוקים לכלים מהדור הבא, כמו Penligent, שמבינים את מודלי הזיכרון ההיברידיים של גרעינים מודרניים.
עבור מהנדסי אבטחה, המסר ברור: Rust מעלה את הרף באופן משמעותי, אך אינו סוגר את הדלת. החיפוש אחר נקודות תורפה נמשך, רק בחלק אחר ומורכב יותר של הקוד.

