בתוסף Bricksforge לוורדפרס התגלתה חולשה שקיבלה 9.8 מתוך 10. תוקף בלי חשבון באתר יכול לנצל אותה כדי להעלות קובץ קוד לשרת ולהריץ אותו, כלומר לקבל שליטה על האתר. היא קיימת בכל הגרסאות עד 3.1.8.9 ועד בכלל.
מה החולשה?
הדבר המעניין כאן הוא שבדיקת האבטחה לא נעדרת. היא בודקת דבר אחד, והשרת נשען אחר כך על דבר אחר.
נתחיל מהקובץ. אפשר לבנות קובץ שהוא בו זמנית תמונת GIF תקינה וגם קוד PHP תקין: הבתים הראשונים שלו נראים לכל בודק כמו תמונה, וההמשך הוא קוד שהשרת מוכן להריץ. לקובץ כזה קוראים polyglot.
התוסף מקבל את הקובץ לתיקיית העלאה זמנית, ושם הוא אכן בודק את סוג התוכן כמו שצריך. הקובץ עובר את הבדיקה, כי מבחינת הבדיקה הוא תמונה. השלב הבא הוא שליחת הטופס, ובו מופיע פרמטר בשם temporaryFileUploads שמכיל שני דברים: נתיב לקובץ שנבדק בצד השרת, ושדה url שהתוקף שולט בו. התוקף משאיר את הנתיב מכוון לקובץ ה-GIF שאושר, ומסיים את שדה ה-url בסיומת php. השרת נשען על השדה שהתוקף כתב, והקובץ נשמר ומורץ כקוד.
חוליה אחת נשארה, והיא הסיבה שלא צריך חשבון בכלל. כדי לשלוח טופס בוורדפרס נדרש nonce, token חד פעמי שהאתר מנפיק כדי להוכיח שהבקשה באה מטופס אמיתי. התוסף חושף endpoint בשם bricksforge_regenerate_nonce שמנפיק token כזה לכל מי שמבקש, וכך הדרישה מתרוקנת מתוכן. הסיווג של הבאג הוא CWE-434.
מי מושפע?
כל אתר וורדפרס שמותקן בו Bricksforge בגרסה 3.1.8.9 או ישנה יותר. הרשומה אינה מציינת מאיזו גרסה הבעיה מתחילה, ולכן ההנחה הבטוחה היא שכל גרסה עד 3.1.8.9 חשופה.
וורדפרס הוא הבסיס של חלק גדול מאתרי העסקים הקטנים בישראל, ותוסף כזה מותקן בדרך כלל בשלב בניית האתר, על ידי מי שבנה אותו, ואחר כך נשאר שם בלי שאף אחד עוקב אחריו. זה מה שהופך את החולשה למעשית: לא צריך חשבון, לא צריך שמשתמש יעשה דבר, וצריך רק שהאתר יהיה מקוון.
האם מנוצלת בפועל?
החולשה אינה רשומה בקטלוג ה-KEV של סוכנות הסייבר האמריקאית CISA, הקטלוג שמאגד חולשות שיש לגביהן ראיות לניצול בשטח, ולכן אין לגביה אישור רשמי של ניצול. את המשמעות צריך לקרוא בדיוק: היעדר ראיה אינו ראיה להיעדר.
המחקר פורסם על ידי Wordfence, שמפעילה שירות אבטחה לאתרי וורדפרס ומסד נתונים של חולשות בתוספים, והרשומה שלה מכילה את הפירוט הטכני המלא. העלאת קוד בלי אימות בתוסף וורדפרס היא מהסוג שסורקים אוטומטיים מחפשים באופן שוטף, כי הבדיקה זולה והתמורה מלאה.
מה עושים?
בממשק הניהול של וורדפרס, במסך התוספים, אתרו את Bricksforge וקראו את מספר הגרסה שמופיע תחת שמו. אם הוא 3.1.8.9 או נמוך ממנו, עדכנו מיד. הטווח הפגוע מוגדר עד 3.1.8.9 ועד בכלל, ולכן כל גרסה חדשה ממנה נושאת את התיקון, ואת ההיסטוריה לפי גרסה היצרן מפרסם ביומן הגרסאות.
אם האתר רץ בגרסה פגועה והוא נגיש מהאינטרנט, הניחו שהוא נסרק ובדקו בפועל. החולשה משאירה עקבות במקום מוגדר: חפשו בתיקיית ההעלאה הזמנית של התוסף ובתיקיות ההעלאה של האתר קבצים בסיומת php שאינם אמורים להיות שם, ובמיוחד קבצים שנוצרו בתאריך שאינו מתיישב עם עבודה שלכם על האתר.
הציצו גם ברשימת המשתמשים וחפשו חשבון בהרשאות ניהול שלא אתם פתחתם. העלאה והרצה של קוד הן בדיוק מה שתוקף מתרגם לגישה קבועה, ועדכון התוסף לבדו אינו מסלק גישה שהושגה לפני העדכון.