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

מה החולשה?

וורדפרס שומר חלק מהנתונים שלו כאובייקטים שנארזו למחרוזת, ויש לו פונקציה שמפרקת מחרוזת כזאת בחזרה לאובייקט. הפונקציה הגלובלית הזאת, maybe_unserialize, אינה מגבילה אילו סוגי אובייקטים מותר לבנות. כשהמחרוזת שמגיעה אליה היא מה שמישהו הקליד בטופס, התוקף הוא זה שקובע איזה אובייקט נוצר בתוך האתר. לסוג הזה של באג קוראים PHP Object Injection.

ל-Gravity Forms יש פונקציה משלו לאותה מטרה, GFCommon::maybe_unserialize, שנוספה בגרסה 3.1.1 ומעבירה allowed_classes => false, כלומר אוסרת במפורש על בניית אובייקטים. הבאג הוא שהנתיב הספציפי הזה לא השתמש בה. GFFormsModel::create_post, הקוד שיוצר פוסט מתוך טופס שנשלח, קרא לפונקציה הגלובלית. השדה שמגיע לשם הוא Post Custom Field מסוג List, וכשמופעלת עבורו תבנית תוכן, השורה שהמשתמש שלח מגיעה לקריאה הזאת כמו שהיא.

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

ויש מקרה שבו וורדפרס מספק את השרשרת בעצמו. אם השדה ממופה למפתח המוגן _wp_page_template, הפונקציה validate_file מקבלת גם ערך שאינו מחרוזת פשוטה, WP_Theme::__toString פותר אחר כך נתיב שהתוקף שולט בו, ובשרת שיש בו התקנת PEAR קריאה וגם register_argc_argv מופעל, זה מגיע להרצת קוד על השרת. שלושה תנאים, לא אחד. כשהם מתקיימים, הזרקת האובייקט כבר אינה תרגיל תיאורטי.

מי מושפע?

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

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

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

האם מנוצלת בפועל?

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

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

מה עושים?

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

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

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