בתוסף GiveWP, תוסף גיוס התרומות לוורדפרס של Liquid Web ו-StellarWP, התגלתה חולשה שקיבלה 10 מתוך 10, הציון המקסימלי שיש. תוקף בלי חשבון ובלי סיסמה יכול לנצל אותה כדי להריץ קוד על השרת שמארח את האתר. היא קיימת בכל הגרסאות עד 4.16.7.1 ועד בכלל.

מה החולשה?

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

כאן נמצאת הבעיה. GiveWP מפרסר בדרך הזאת נתונים שהגיעו מבחוץ, ממי ששלח בקשה לאתר, בלי לוודא שהם מגיעים ממקור אמין. תוקף שבונה את המחרוזת בעצמו יכול לשתול בה אובייקט שגורם לקוד שלו לרוץ על השרת. לטכניקה קוראים Object Injection, והסיווג של הבאג הוא CWE-502.

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

מי מושפע?

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

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

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

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

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

מה עושים?

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

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

ואם האתר רץ עם גרסה חשופה לאורך זמן והוא נגיש מהאינטרנט, אל תסתפקו בעדכון. עברו על רשימת המשתמשים ובדקו אם יש חשבונות מנהל שלא אתם יצרתם, והסתכלו על תאריכי השינוי של קבצים תחת wp-content כדי לראות אם משהו נכתב שם בלי ידיעתכם. פרטים נוספים על החולשה נמצאים ברשומה של Patchstack.