כותרת Penligent

המחלקת פנטום: הפיכת CVE-2025-32432 Yii2 Container Injection לנשק ב-Craft CMS

בהיררכיה של פגיעויות PHP, הזרקת תלות (DI) הזרקת מכולה נמצא בראש הרשימה — מורכב לזיהוי, אלגנטי לניצול, והשפעתו הרסנית.

הגילוי של CVE-2025-32432 מיקוד Craft CMS (ובהרחבה, הבסיס מסגרת Yii2) משמש כתזכורת אכזרית: כאשר קלט המשתמש שולט ביצירת מופעים של מחלקות, היישום שייך לתוקף.

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

ארכיטקטורת הכישלון: בתוך המכולה Yii2

כדי להבין את CVE-2025-32432, עליך להבין את ליבת Yii2: ה- yii\\di\\מכל.

Craft CMS מסתמך על מכולת DI של Yii2 לניהול תלות בין מחלקות. המכולה מאפשרת למפתחים להגדיר אובייקטים באמצעות מערכים. לדוגמה:

PHP

// שימוש לגיטימי $object = Yii::createObject([ 'class' => 'app\\models\\User', 'name' => 'Admin', ]);

הפגיעות מתעוררת כאשר תוקף יכול להשפיע על מערך התצורה הזה. אם פעולת בקר מקבלת קלט JSON גולמי ומעבירה אותו באופן עיוור ל- Yii::createObject() או Yii::$container->set(), התוקף יכול לאלץ את היישום ליצור מופע של כל סוג זמין בנתיב הטעינה האוטומטית, עם כל נכס ערכים.

משטח התקיפה

הפגם נמצא בדרך כלל בבקרי Craft CMS המטפלים בבקשות API או בתצורות תוספים, שבהן טיהור הקלט מתמקד ב-XSS (תגי HTML) ולא בלוגיקה (הגדרות מחלקות).

  • מקור: JSON המסופק על ידי המשתמש (לדוגמה, POST /actions/vulnerable-plugin/save-config).
  • כיור: Yii::createObject($userInput).
המחלקת פנטום: הפיכת CVE-2025-32432 Yii2 Container Injection לנשק ב-Craft CMS

בניית שרשרת ההרג: ה-PoC

ניצול דורש מציאת גאדג'ט—מחלקת מחלקה המבצעת פעולות מסוכנות (כגון כתיבת קבצים או ביצוע פקודות) בשיטות מחזור החיים שלה (__construct, init, __destruct, או __wakeup).

בהקשר של CVE-2025-32432, אנו מנצלים שרשרת גאדג'טים נפוצה הנמצאת במערכת האקולוגית Yii2, הכוללת yii\\rest\\IndexAction או מחלקות דומות עם שימוש רב בפונקציות callback.

הקונספט

אנו רוצים ליצור מופע של מחלקה שתאפשר לנו לבצע פונקציית callback ב-PHP (כמו מערכת או exec) על טיעון שסופק.

מטען JSON משמש כנשק

להלן הוכחת היתכנות (PoC) המדגימה כיצד להפעיל RCE על ידי הזרקת הגדרת מחלקה זדונית.

JSON

{ "rce_trigger": { "class": "yii\\\\rest\\\\IndexAction", "checkAccess": "system", "id": "rce", "controller": { "class": "yii\\\\web\\\\Controller", "id": "dummy" }, "modelClass": "yii\\\\base\\\\Model", "run": "id; uname -a" } }

פירוט המטען:

  1. כיתה: אנו מורים למכל DI ליצור מופע yii\\rest\\IndexAction.
  2. בדוק גישה: זהו הנכס המסוכן שלנו. בגאדג'ט הספציפי הזה, ה בדוק גישה המאפיין נועד להכיל פונקציית callable. אנו מגדירים אותו כ- מערכת.
  3. הפעלת הביצוע: כאשר היישום מעבד אובייקט זה (לעתים קרובות במהלך הפעל() ביצוע שיטה או אימות מאפיין), הוא קורא לפונקציית החזרה המאוחסנת ב- בדוק גישה עם ארגומנטים המסופקים על ידי ההקשר (או התוקף).
  4. תוצאה: השרת מבצע system('id; uname -a').

הערה: בסביבה מאובטחת, תוקפים עשויים לשלב זאת עם yii\\caching\\FileCache לכתוב מעטפת אינטרנט PHP ל- אינטרנט/ ספרייה.

מדוע סורקים מסורתיים מפספסים את זה

איתור CVE-2025-32432 הוא משימה קשה במיוחד עבור כלי DAST מסורתיים.

  • ללא חתימה: הנתונים הם JSON תקפים. הם אינם מכילים תחביר הזרקת SQL (' או 1=1) או תגי XSS ().
  • תלוי הקשר: הפגיעות אינה נמצאת בקלט עצמו, אלא ב איך המסגרת מפרשת את כיתה מפתח. סורק רגיל אינו מבין זאת. כיתה מפות ל Yii::createObject.

זיהוי מבוסס בינה מלאכותית: היתרון של Penligent

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

  1. זיהוי מסגרת: סוכני Penligent מזהים שהיעד מריץ Craft CMS / Yii2. הוא מכיר את "הנקודות המסוכנות" הספציפיות למסגרת זו (לדוגמה, Yii::createObject).
  2. הסקת מסקנות לוגיות: במקום לבצע fuzzing עיוור, ה-AI מנתח את סכימת ה-API. אם הוא רואה אובייקט JSON המקבל פרמטרים דמויי תצורה, הוא מזריק באופן חכם "Probing Payloads" — כגון ניסיון ליצור מופע של מחלקה תמימה כמו yii\\helpers\\VarDumper—כדי לבדוק אם ניתן להגיע למכל.
  3. אימות אוטומטי: אם הבדיקה מצליחה (למשל, היישום מתנהג אחרת או מחזיר שגיאה ספציפית המציינת יצירת מופע של מחלקה), Penligent מסמן את נקודת הקצה כפגיעה ל הזרקת מיכלים ומפיק את המטען הספציפי של RCE לצורך אימות התיקון.

תיקון והגנה

כדי להגן על Craft CMS מפני CVE-2025-32432 ומתקפות DI דומות:

  1. בדיקת סוג קפדנית: לעולם אל תעביר מערכים של קלט משתמש גולמי ל- Yii::createObject. תמיד יש לאמת שה- כיתה המפתח אינו קיים (מקודד קבוע במערכת האחורית) או מותר רק ברשימת ההיתרים.
  2. עדכון Craft CMS: החל את התיקונים האחרונים באופן מיידי. סביר להניח שהספק הידק את פעולה לוגיקת עיבוד לדחיית הגדרות מחלקות שרירותיות.
  3. השבת פונקציות מסוכנות: בשלך php.ini, השתמש disable_functions לחסום מערכת, exec, מעבר, ו proc_open כדי למתן את השפעת ה-RCE.

סיכום

CVE-2025-32432 מהווה תזכורת חדה לכך שמסגרות PHP מודרניות, על אף עוצמתן, מציגות משטחי תקיפה מורכבים. הזרקת קונטיינר היא "הזרקת SQL של שנות ה-2020" — פגם לוגי המעניק שליטה מוחלטת.

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

הפניות אמינות

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