הערה חופשית בהזמנה אנונימית מגיעה ל-unserialize בתוך מחולל החשבוניות: גל של 52 רשומות PHP Object Injection בוורדפרס
מישהו נכנס לחנות WooCommerce, ממלא הזמנה בלי להירשם, בוחר העברה בנקאית, ובשדה ההערה כותב מה שהוא רוצה. התוסף שמייצר את החשבונית שותל את ההערה בקובץ ה-PDF, וארבעה רכיבים אחר כך היא מגיעה ל-unserialize של PHP. ככה נראית CVE-2026-109220 בציון 9.8, אחת מ-52 רשומות כאלה שנרשמו ב-NVD בשלושה ימים.
סקירה כללית
PHP יודעת לדחוס אובייקט שלם למחרוזת אחת כדי לשמור אותו במסד נתונים, ו-unserialize מחזירה את המחרוזת לאובייקט חי. הבעיה מתחילה כשהמחרוזת הגיעה ממשתמש, כי אז הוא קובע איזה class ייווצר ומה יישב בשדות שלו. לסוג החולשה הזה קוראים PHP Object Injection, ו-NVD מסמנת אותו CWE-502.
ההזרקה עצמה עוד לא מריצה כלום. מה שמריץ הוא קוד שכבר קיים באתר, methods שרצים אוטומטית כשאובייקט נוצר או נמחק, ואם דרכם מגיעים לכתיבת קובץ יש הרצת קוד. לצירוף הזה קוראים שרשרת gadget, והוא לא חייב לבוא מהתוסף הפגוע. ב-Gravity Forms, שקיבל ב-30 באוקטובר את CVE-2026-103039 בציון 9.8 על הגרסאות עד 3.1.2, Wordfence כותבת שבתוסף אין שרשרת כזאת, אבל כשהשדה ממופה למפתח _wp_page_template וורדפרס מספקת אחת.
מזהה: CVE-2026-109220
סוג: PHP Object Injection, CWE-502 לפי NVD
מוצר: התוסף PDF Invoice for WooCommerce + Drag and Drop Template Builder
גרסאות מושפעות: כל הגרסאות עד 7.1.1 ועד בכלל
גרסה מתוקנת: 7.2.0
ניצול בפועל: לא, אינה ברשימת ה-KEV של CISA
ציר זמן
09.02.2026: החוקר johska מדווח ל-Patchstack על PHP Object Injection ב-24 תבניות וורדפרס מסחריות.
12.10.2026: היצרן של התוסף מקבל את הדיווח, ובאותם ימים Patchstack מפרסמת את רשומות התבניות בלי תיקון.
29.10.2026: 43 רשומות מאותו סוג נרשמות ב-NVD ביום אחד.
31.10.2026: הרשומה של CVE-2026-109220 מגיעה ל-NVD, כשגרסה 7.2.0 כבר זמינה.
איך הניצול עובד
לפי NVD מספיק להשלים הזמנה אנונימית דרך ה-Store API הציבורי של WooCommerce ולבחור העברה בנקאית או צ'ק: ההזמנה עוברת אוטומטית למצב on-hold, וזה מה שמפעיל את יצירת החשבונית. משם ההערה עוברת בין ארבעה רכיבים: היא מוטמעת כמו שהיא ב-HTML של החשבונית, simplehtmldom מפענחת את ישויות ה-HTML בחזרה לתג אמיתי, mPDF מרכיבה מזה בייטים גולמיים, ו-_getObjAttr מעבירה את התוצאה ל-unserialize בלי בדיקה. כל רכיב עשה בדיוק את מה שנכתב בשבילו.
ניתוח ציון ה-CVSS
ציון CVSS: 9.8
מה שקובע את הציון בגל הזה הוא לא סוג החולשה אלא מי יכול להגיע אליה: אותה הזרקה בדיוק קיבלה 7.2 כשנדרשות הרשאות מנהל חנות, 8.8 כשמספיק חשבון מנוי, וכאן לא נדרש חשבון בכלל. את קיומה של שרשרת ה-gadget באתר הספציפי הציון מניח ולא מודד.
איפה למצוא Proof of Concept (PoC)
לא פורסם PoC פומבי לאף אחת מהרשומות בגל. התיעוד המפורט ביותר ל-CVE-2026-109220 הוא הרשומה עצמה, שמקשרת לשורות הקוד המדויקות. על חולשה אחרת בגל, רגרסיה בתוסף Enable Media Replace שמחזירה חולשה מ-2023, WPScan פרסמה תיאור טכני מלא, וה-PoC שלה יפורסם רק ב-28 בנובמבר: WPScan, CVE-2026-114422.
מי שמריץ את התוסף בחנות צריך 7.2.0. מי שמריץ אחת מ-24 התבניות שדווחו בפברואר לא יכול לעדכן, כי לפי Patchstack אין לאף אחת מהן גרסה מתוקנת.
תגובות