בהיררכיה של פגיעויות 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).

בניית שרשרת ההרג: ה-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" } }
פירוט המטען:
כיתה: אנו מורים למכל DI ליצור מופעyii\\rest\\IndexAction.בדוק גישה: זהו הנכס המסוכן שלנו. בגאדג'ט הספציפי הזה, הבדוק גישההמאפיין נועד להכיל פונקציית callable. אנו מגדירים אותו כ-מערכת.- הפעלת הביצוע: כאשר היישום מעבד אובייקט זה (לעתים קרובות במהלך
הפעל()ביצוע שיטה או אימות מאפיין), הוא קורא לפונקציית החזרה המאוחסנת ב-בדוק גישהעם ארגומנטים המסופקים על ידי ההקשר (או התוקף). - תוצאה: השרת מבצע
system('id; uname -a').
הערה: בסביבה מאובטחת, תוקפים עשויים לשלב זאת עם yii\\caching\\FileCache לכתוב מעטפת אינטרנט PHP ל- אינטרנט/ ספרייה.
מדוע סורקים מסורתיים מפספסים את זה
איתור CVE-2025-32432 הוא משימה קשה במיוחד עבור כלי DAST מסורתיים.
- ללא חתימה: הנתונים הם JSON תקפים. הם אינם מכילים תחביר הזרקת SQL (
' או 1=1) או תגי XSS (). - תלוי הקשר: הפגיעות אינה נמצאת בקלט עצמו, אלא ב איך המסגרת מפרשת את
כיתהמפתח. סורק רגיל אינו מבין זאת.כיתהמפות לYii::createObject.
זיהוי מבוסס בינה מלאכותית: היתרון של Penligent
זה המקום שבו Penligent.ai משנה את הפרדיגמה. Penligent מנצל סוכני AI המודעים להקשר המבינים את ההיגיון הספציפי למסגרת.
- זיהוי מסגרת: סוכני Penligent מזהים שהיעד מריץ Craft CMS / Yii2. הוא מכיר את "הנקודות המסוכנות" הספציפיות למסגרת זו (לדוגמה,
Yii::createObject). - הסקת מסקנות לוגיות: במקום לבצע fuzzing עיוור, ה-AI מנתח את סכימת ה-API. אם הוא רואה אובייקט JSON המקבל פרמטרים דמויי תצורה, הוא מזריק באופן חכם "Probing Payloads" — כגון ניסיון ליצור מופע של מחלקה תמימה כמו
yii\\helpers\\VarDumper—כדי לבדוק אם ניתן להגיע למכל. - אימות אוטומטי: אם הבדיקה מצליחה (למשל, היישום מתנהג אחרת או מחזיר שגיאה ספציפית המציינת יצירת מופע של מחלקה), Penligent מסמן את נקודת הקצה כפגיעה ל הזרקת מיכלים ומפיק את המטען הספציפי של RCE לצורך אימות התיקון.
תיקון והגנה
כדי להגן על Craft CMS מפני CVE-2025-32432 ומתקפות DI דומות:
- בדיקת סוג קפדנית: לעולם אל תעביר מערכים של קלט משתמש גולמי ל-
Yii::createObject. תמיד יש לאמת שה-כיתההמפתח אינו קיים (מקודד קבוע במערכת האחורית) או מותר רק ברשימת ההיתרים. - עדכון Craft CMS: החל את התיקונים האחרונים באופן מיידי. סביר להניח שהספק הידק את
פעולהלוגיקת עיבוד לדחיית הגדרות מחלקות שרירותיות. - השבת פונקציות מסוכנות: בשלך
php.ini, השתמשdisable_functionsלחסוםמערכת,exec,מעבר, וproc_openכדי למתן את השפעת ה-RCE.
סיכום
CVE-2025-32432 מהווה תזכורת חדה לכך שמסגרות PHP מודרניות, על אף עוצמתן, מציגות משטחי תקיפה מורכבים. הזרקת קונטיינר היא "הזרקת SQL של שנות ה-2020" — פגם לוגי המעניק שליטה מוחלטת.
עבור מהנדסי אבטחה, הלקח ברור: אם תתנו למשתמשים להגדיר את האובייקטים, הם יגרמו להרס שלכם. אימות "צורת" הנתונים כבר אינו מספיק; עליכם לאמת את "הסוג".

