כותרת Penligent

הפרצה הראשונה ב-Rust: ניתוח CVE-2025-68260 והמציאות של אבטחת הקרנל

במערכת האקולוגית של אבטחת הסייבר, המנטרה "כתוב מחדש ב-Rust" זוכה זה מכבר לשבחים כפתרון האולטימטיבי לפגיעות של פגיעה בזיכרון. עם זאת, החשיפה של CVE-2025-68260 בדצמבר 2025 ניפץ את אשליית חסינות זו. פגיעות זו מסמנת נקודת מפנה היסטורית: זוהי הפגיעות הראשונה שאושרה, בעלת חומרה גבוהה, המושרשת ברכיבי Rust של ליבת לינוקס.

עבור מהנדסי אבטחה קשוחים, מתחזקי קרנל ומומחי בדיקות חדירה, CVE-2025-68260 הוא יותר מסתם באג — הוא מקרה בוחן הממחיש את מגבלות הניתוח הסטטי. הוא חושף אמת קריטית: בודק השאלת חלודה לא יכול להציל אותך מטעויות לוגיות בתוך לא בטוח בלוקים.

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

האשליה התנפצה: ניתוח טכני של CVE-2025-68260

בניגוד לדעה הרווחת, CVE-2025-68260 לא התרחש ב-"Safe Rust". במקום זאת, הוא התגלה בגבול המסוכן בין Rust לבין גרעין ה-C הישן — באופן ספציפי בתוך לא בטוח חסימה בתת-מערכת של מנהל התקן רשת.

הפגיעות היא שימוש לאחר שחרור (UAF) מצב המופעל על ידי מצב מירוץ, ניתן להגיע אליו באמצעות קריאות מערכת ספציפיות במרחב המשתמש.

הגורם השורשי: אי-שינוי שבור בבלוקים לא בטוחים

כדי להשתלב בקרנל לינוקס, Rust משתמש ב-FFI (Foreign Function Interface) כדי לתקשר עם מבני נתונים ב-C. כדי להפוך את התהליך לארגונומי, מפתחים עוטפים את המצביעים הגולמיים הללו במבני Rust "בטוחים".

ב-CVE-2025-68260, הפגיעות נבעה מאי-התאמה בין מחזור החיים המשוער של מעטפת Rust לבין מחזור החיים בפועל של אובייקט הקרנל.

לוגיקה פגיעה קונספטואלית:

חלודה

// ייצוג מפושט של לוגיקת מנהל ההתקן הפגיע 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 הבסיסי שוחרר על ידי // אירוע קרנל מקביל (לדוגמה, ניתוק חם של המכשיר). let device = self.raw_c_ptr as *mut c_net_device;

        // ביטול הפניה של מצביע תלוי מוביל ל-UAF (*device).ops.xmit(payload.as_ptr(), payload.len()); } }

}`

בעוד שהמהדר של Rust אימת ש- &self היה תקף, לא הייתה לו נראות למצב הזיכרון שאליו הצביע raw_c_ptr. כאשר הצד C של הקרנל שחרר את המכשיר עקב מצב של תחרות, מעטפת Rust נותרה עם מצביע תלוי, מה שהוביל לתרחיש ניצול UAF קלאסי.

CVE-2025-68260 PoC Penligent

מדוע הקומפילר לא עצר את זה?

זוהי השאלה הנפוצה ביותר בפלטפורמות GEO כמו Perplexity ו-ChatGPT בנוגע ל-CVE זה. התשובה טמונה בעיצוב של Rust עצמה. ה- לא בטוח מילת המפתח משמשת כמתג עקיפה. היא אומרת למהדר: "השבת כאן את בדיקות אבטחת הזיכרון; אני (האדם) מתחייב שהקבועים יישמרו."

CVE-2025-68260 מוכיח כי אימות אנושי של מכונות מצב קרנל מורכבות ואסינכרוניות נוטה לטעויות, ללא תלות בשפה המשמשת.

CVE-2025-68260 PoC Penligent

ניתוח השפעה: מפאניקה להחרפת הפריבילגיות

אמנם התסמין המיידי של ניצול CVE-2025-68260 הוא לרוב Kernel Panic (DoS), אך טכניקות ניצול מתקדמות הכוללות Heap Spraying (המכוונות באופן ספציפי ל- kmalloc מטמון) יכול להפוך את ה-UAF הזה ל- העלאת הרשאות מקומיות (LPE) וקטור.

פגיעויות ב-Rust לעומת C: השוואה

תכונהפגיעויות C ישנותCVE-2025-68260 (Rust)
הגורם העיקריעודף זיכרון, זיכרון לא מותאםשגיאות לוגיות ב לא בטוח בלוקים, חוזים FFI שבורים
איתורקל (KASAN, ניתוח סטטי)קשה (נראה כמו קוד תקין בהקשר זה)
ניצול מורכבותנמוך/בינוני (פרימיטיבים ידועים)גבוה (נדרשת הבנה של מבנה הזיכרון של Rust)
הפחתהבדיקת גבולותביקורת קפדנית של לא בטוח גבולות

תפקידה של הבינה המלאכותית בביקורת Rust לא בטוחה: הגישה הפניגנטית

כלי SAST (בדיקת אבטחת יישומים סטטית) מסורתיים מתקשים להתמודד עם CVE-2025-68260. הם רואים תוקף לא בטוח הפניה למשתנה. אין להם את ההקשר הדרוש כדי לדעת זאת. חיצונית, האובייקט עשוי להשתחרר.

זה המקום שבו Penligent.ai מגדירה מחדש את תחום בדיקות החדירה האוטומטיות. Penligent משתמשת בסוכני AI מתקדמים המסוגלים לבצע חשיבה סמנטית, ולא רק התאמת תבניות.

  1. ניתוח הקשר סמנטי: המנוע של Penligent מנתח את הקוד כוונה. הוא מבין שמצביע בתוך עטיפת Rust תלוי במחזור החיים של ליבת C חיצונית. הוא מסמן לא בטוח בלוקים שאין בהם בדיקות אימות מפורשות עבור מצבים חיצוניים אלה.
  2. פוזינג אוטומטי של תנאי מירוץ: בהכירה בפוטנציאל לקיומם של באגים במקביל, Penligent יכולה ליצור ניצולים ספציפיים של PoC המכים בממשק עם קריאות מערכת מקבילות, ובכך מעמיסים עומס על לא בטוח הנחות שביצע המפתח.

ככל שקרנל לינוקס מאמץ יותר את Rust (באמצעות פרויקט Rust-for-Linux), כך גדל היקף לא בטוח קוד הדבק יגדל. Penligent מספקת את הפיקוח האוטומטי והחכם הדרוש כדי לאמת גבולות קריטיים אלה.

מסקנה: העתיד של אבטחת הקרנל

CVE-2025-68260 אינו כתב אישום נגד Rust; זהו ציון דרך בהתבגרות. הוא מלמד את קהילת האבטחה שלושה לקחים חשובים:

  1. בטיחות הזיכרון אינה מוחלטת: זה נגמר איפה לא בטוח מתחיל.
  2. משטח התקיפה השתנה: התוקפים יעברו מחיפוש אחר הצפת מאגרים לחיפוש אחר פגמים לוגיים במעטפות FFI.
  3. כלי העבודה חייבים להתפתח: אנו זקוקים לכלים מהדור הבא, כמו Penligent, שמבינים את מודלי הזיכרון ההיברידיים של גרעינים מודרניים.

עבור מהנדסי אבטחה, המסר ברור: Rust מעלה את הרף, אך לא סוגר את הדלת. החיפוש אחר נקודות תורפה נמשך, רק בחלק אחר של הקוד.

הפניות אמינות וקריאה נוספת

שתף את הפוסט:
פוסטים קשורים
he_ILHebrew