כותרת Penligent

אנטומיה של CVE-2025-32432: הפיכת הזרקת מכולות Yii2 לנשק ב-Craft CMS

בהיררכיה של פגיעויות באינטרנט, מעט דברים דורשים את תשומת הלב המיידית של מפעיל צוות אדום כמו הזרקת אובייקטים ב-PHP (POI) נקודת קצה חשופה למשתמשים לא מאומתים.

CVE-2025-32432 זה בדיוק זה. עם ציון CVSS v3.1 של 10.0, פגיעות זו ב-Craft CMS אינה סתם עוד באג; היא מהווה דוגמה מובהקת לאופן שבו ניתן להפוך את מכולות הזרקת התלות (DI) המודרניות לכלי נשק נגד היישומים שהן תומכות בהם.

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

הפגם האדריכלי: כאשר DI משתבש

כדי להבין את CVE-2025-32432, יש להבין את הארכיטקטורה של Craft CMS. Craft מסתמך במידה רבה על דפוסי Service Locator ו-Dependency Injection של Yii2.

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

הכיור הפגיע

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

  1. בליעה: הבקר מקבל בקשת POST המכילה לשנות מערך.
  2. נורמליזציה: הנתונים מועברים ל Craft::$app->getAssetTransforms()->normalizeTransform().
  3. ביצוע (הכיור): השיטה בסופו של דבר קוראת Craft::createObject($config).

ב-Yii2, createObject הוא עטיפה חזקה. אם ה- $config המערך מכיל כיתה מפתח, Yii2 ינסה ליצור מופע של אותו מחלקה ספציפית, וימלא את המאפיינים הציבוריים שלה עם שאר מפתחות המערך.

PHP

// זרימת פגיעות פשוטה פונקציה ציבורית actionGenerateTransform() { $transformId = Craft::$app->getRequest()->getBodyParam(‘transformId’); // התוקף שולט על כל מערך התצורה $transformConfig = Craft::$app->getRequest()->getBodyParam(‘transform’);

// פגם קטלני: אין אימות רשימת הלבנים בפרמטר 'class' $object = Craft::createObject($transformConfig); return $object->transform();

}`

זוהי ההגדרה של דה-סריאליזציה לא מאובטחת (CWE-502), למרות שהוא משתמש בתצורת JSON/Array במקום בתצורה מקורית. unserialize(). התוצאה זהה: התוקף קובע את זרימת הבקרה.

אנטומיה של CVE-2025-32432: הפיכת הזרקת מכולות Yii2 לנשק ב-Craft CMS

שרשרת הניצול: יצירת הגאדג'ט

סקריפט קידיז ייכשלו ב-CVE זה מכיוון שדי בהפניית מטען לנקודת הקצה כדי להחזיר 400 בקשה לא חוקית. ניצול מוצלח דורש הבנה מעמיקה של מצב היישום.

שלב 1: סיור קונטקסטואלי (זיהוי הנכס)

ה פעולהGenerateTransform לפונקציה יש תלות קשה: היא דורשת assetId (מספר שלם המייצג תמונה שהועלתה ל-CMS).

אם ה assetId לא קיים, הקוד זורק חריגה לפני הוא מגיע לפגיעים createObject שיחה.

  • המלכודת: סורקים מסורתיים (Nessus, Nuclei) משגרים מטענים באופן עיוור. הם משתמשים ב-IDs אקראיים או ללא IDs. הם מקבלים שגיאות ומסמנים את היעד כ"בטוח".
  • המעקף: תוקף מתוחכם (או סוכן) מגרד את קוד המקור הציבורי של HTML, ומחפש תבניות נכסים אופייניות של Craft (לדוגמה, /assets/images/1042/logo.png). המספר השלם 1042 הוא המפתח לפתיחת נתיב הביצוע.

שלב 2: שרשרת הגאדג'טים

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

בהקשר של CVE-2025-32432, חוקרים זיהו שרשראות המשתמשות ב- \\GuzzleHttp\\Client (אם מותקן) או מחלקות מטמון Yii2 מקוריות.

וקטור נפוץ כולל שימוש ב- yii\\rbac\\PhpManager או התעללות ב הצג renderer כדי לכלול קבצים מקומיים. עם זאת, השיטה הישירה ביותר לביצוע RCE כרוכה בניצול ה- Craft\\Config אובייקט בשילוב עם עטיפות פרוטוקול PHP.

מבנה המטען של הניצול:

JSON

{ "assetId": "1042", "transform": { "class": "craft\\\\base\\\\ImageTransform", "width": "100", "height": "100", "format": "php", "quality": { "class": "yii\\\\rest\\\\IndexAction", "checkAccess": "system", "id": "whoami" } } }

הערה: שרשרת הגאדג'טים בפועל עשויה להשתנות בהתאם לתלות הספציפיות של Composer המותקנות בשרת, מה שמצריך התאמה דינמית של המטען.

שימוש בהזרקת Yii2 Container ב-Craft CMS

כישלון כלי האבטחה הסטטיים

פגיעות זו חושפת את המגבלות של הדור הנוכחי של כלי האבטחה.

  1. חוסר אזרחות: סורקים מסורתיים הם חסרי מצב. הם אינם "זוכרים" שמצאו מזהה נכס בדף הבית ו"מחליטים" להשתמש בו בבקשת POST 10 דקות לאחר מכן.
  2. עיוורון קונטקסטואלי: הם אינם יכולים להסיק מסקנות לגבי ההיגיון העסקי. הם רואים את מזהה התמונה כמספר בלבד, ולא כמפתח הכרחי לשרשרת ניצול.

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

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

כאשר ניתחנו את CVE-2025-32432 ב- Penligent, גילינו כי שיטת ה-fuzzing הסטנדרטית השיגה שיעור הצלחה של 0%. כדי לאמת את הפגיעות הזו באופן מהימן, נאלצנו לפרוס סוכן AI המסוגל לבצע היסק רב-שלבי.

ה Penligent זרימת העבודה עבור CVE זה מדגימה את ההבדל בין "סריקה" ל"בדיקת חדירה":

  1. טביעת אצבע: הסוכן מזהה את X-Powered-By: Craft CMS כותרת.
  2. ניתוח סמנטי: במקום לבצע fuzzing, הסוכן מנתח את ה-DOM של דף הנחיתה. הוא מזהה <img src="..."> תגיות ומתאים את מבנה ה-URL לביטוי רגולרי כדי לחלץ מזהי נכסים פוטנציאליים.
  3. בדיקת השערות: הסוכן מנסה לבצע בקשת שינוי תמימה עם המזהה שחולץ. אם הוא מקבל 200 OK או חריגה לוגי (ולא 404), הוא מאשר שהזהות תקפה.
  4. מוטציה של מטען: הסוכן בונה את מטען ה-JSON. אם השרת מריץ גרסת PHP חדשה יותר, אשר מבטלת עטיפות מסוימות, הסוכן משנה את שרשרת הגאדג'טים בזמן אמת כדי לנסות הזרקות אובייקטים חלופיות.

היכולת הזו לוגיקת שרשרת—מציאת מפתח בשלב A ושימוש בו בשלב B—הוא מה שמבדיל בין האקרים אנושיים (וסוכנים) לבין סקריפטים אוטומטיים.

תיקון והגנה

אם אתה מגן על התקנת Craft CMS, נדרשת פעולה מיידית.

1. תיקון

הספק פרסם אימות קפדני בגרסאות הבאות. ודא שאתה מריץ:

  • Craft CMS 3.x -> 3.9.15+
  • Craft CMS 4.x -> 4.14.15+
  • Craft CMS 5.x -> 5.6.17+

2. תצורת WAF

אם לא ניתן לבצע תיקון באופן מיידי (בגלל הקפאת קוד ישן), עליך לחסום את וקטור התקיפה הספציפי ברמת WAF.

דוגמה לכלל ModSecurity:

אפאצ'י

SecRule REQUEST_URI "@contains /actions/assets/generate-transform" \\ "id:100001,phase:2,t:none,t:lowercase,deny,status:403,msg:'Block Craft CMS RCE CVE-2025-32432', \\ chain" SecRule ARGS_POST:transform "@rx class"

כלל זה חוסם כל בקשה לנקודת הקצה של ההמרה המנסה להגדיר פרמטר 'class' בגוף ה-POST.

השוואת פגיעות בעלות השפעה רבה (2024-2025)

כדי להבין את ההקשר של CVE-2025-32432, כדאי להשוות אותו לכישלונות ארכיטקטוניים אחרים שהתרחשו לאחרונה במסגרות מרכזיות.

מזהה CVEיעדוקטורמורכבותמדוע זה חשוב
CVE-2025-32432Craft CMSהזרקת אובייקטיםבינוניממחיש את הכשל של מיכלי DI שלא אומתו.
CVE-2024-21626runcבריחה מהמכולהגבוהפגם מהותי בבידוד זמן הריצה של המכולה.
CVE-2024-23897ג'נקינסקריאת קובץ שרירותיתנמוךשימוש לרעה בתכונות ה-CLI parser (args4j).
CVE-2024-3400פאלו אלטו PAN-OSהזרקת פקודהנמוךRCE לא מאומת במכשירי אבטחה קצה.

סיכום

CVE-2025-32432 מזכיר לנו שבפיתוח אתרים מודרני, "עשיר בתכונות" פירושו לעתים קרובות "עשיר במשטחי תקיפה". הנוחות של Yii2 createObject סיפק למפתחים גמישות, אך העניק לתוקפים כלי נשק טעון.

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

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

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