בתוך PeopleSoft יש ממשק ניהול פנימי שלא אמור להיות נגיש מהאינטרנט, ו-Oracle הגנה עליו בבדיקה שנשמעת סבירה לגמרי. לפני שהרכיב עונה לבקשה הוא מוציא ממנה את שם המחשב ואת כתובת ה-IP של הפונה, משווה אותם לרשימת מחשבים מאושרים שיושבת בקובץ הגדרות על השרת, ועונה רק למי שנמצא ברשימה. הרשימה שמגיעה עם ההתקנה כברירת מחדל כוללת שלוש רשומות: את שם השרת, את כתובת ה-IP שלו, ואת localhost.

הרשומה השלישית היא כל הסיפור. חוקרי Zero Day Initiative פרסמו ב-27 באוקטובר את הניתוח המלא של CVE-2026-35273, החולשה בציון 9.8 ב-PeopleSoft שקבוצת ShinyHunters מנצלת מאז מאי, ומצאו דרך לגרום לשרת לשלוח בקשה אל עצמו עם תוכן שהתוקף מכתיב. ברגע שהבקשה מגיעה מ-127.0.0.1, הבדיקה מאשרת אותה. "התראת ספוילר", כותב Bobby Gould, שערך את המחקר עם Minh Giang ועם Lucas Miller, "ה-SSRF מאפשר לתוקפים לייצר בקשות שמספקות את הוולידציה הזאת ולהגיע ל-endpoints שחשופים להרצת קוד מרחוק".

מה שהתברר בדרך מעניין לא פחות. Oracle תיקנה את כל הסיפור תחת מזהה אחד, שלפי NVD נוגע לגרסאות PeopleTools 8.61 ו-8.62, אבל ב-ZDI דיווחו על שלוש חולשות נפרדות בשני רכיבים שונים של המוצר. עד עכשיו נרשם רק מזהה אחד, והחוקרים כותבים שהם מתכתבים עם Oracle על הקצאת CVE לכל אחת מהשלוש. בהמשך נעבור על שלושתן לפי הסדר שבו תוקף משתמש בהן, ואחר כך נראה מה Mandiant תיעדה בשטח.

שני רכיבים שלא אמורים לדבר עם האינטרנט

שני הרכיבים שבמרכז הסיפור רצים כשתי אפליקציות WebLogic נפרדות על אותו שרת. הראשון, Environment Management Hub, או בקצרה PSEMHUB, הוא חלק ממסגרת ניהול הסביבה של Oracle, וזה הרכיב שמוגן באותה בדיקת מחשבים מאושרים. ב-ZDI מתארים אותו כמטרה מועדפת בדיוק בגלל התפקיד הזה: ממשק ניהול פנימי שמי שמגיע אליו מקבל בבת אחת יכולות שמשתמש רגיל של המערכת לא אמור לראות.

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

הבקשה שהשרת שולח לעצמו

המסלול שמעניין את התוקף נקרא HttpListeningConnector. הוא מקבל בקשת HTTP נכנסת, מתרגם את התוכן שלה לפורמט שהמחבר היוצא מבין, ושולח אותה אל כתובת שמצוינת בבקשה עצמה. שתי המילים החשובות כאן הן "בבקשה עצמה": גם כתובת היעד וגם המטען המלא שיישלח אליה נקבעים על ידי מי ששלח את הבקשה המקורית. "אנחנו שולטים ב-URL שאליו פונים וגם במטען המלא שנשלח", כותב Gould.

לתבנית הזאת, שבה תוקף מגרה שרת לשלוח בקשה אל יעד שהתוקף בוחר, קוראים Server-Side Request Forgery, ובקצרה SSRF. בדרך כלל הערך שלה מוגבל: היא מאפשרת להציץ לשירותים פנימיים, לסרוק רשת, לפעמים לדלות מידע ממקומות שלא אמורים להיות נגישים מבחוץ. כאן היא שווה הרבה יותר, כי אחד היעדים שהתוקף יכול לבחור הוא השרת עצמו.

ב-ZDI בדקו את הקוד שמטפל בהעברה ולא מצאו בו שום בדיקה שהתעבורה חוקית או שהיעד תקף. Gould מציין שהפונקציה הזאת חורגת מ-800 שורות, ומזמין את הקוראים לפרק אותה בעצמם: "אני מקווה שאתם אוהבים ספגטי".

אז למה הבדיקה מאשרת אותה?

המתודה שאחראית על ההגנה נקראת validateClient, והיא עושה בדיוק את מה שהשם מרמז. היא מוציאה מהבקשה את שם המחשב ואת כתובת ה-IP של הפונה, בונה נתיב אל הקובץ allowedhosts.properties שיושב תחת תיקיית ההגדרות של הרכיב, קוראת ממנו את רשימת המחשבים המאושרים ומשווה. אם הפונה ברשימה, התשובה חוזרת. אם לא, הדלת נשארת סגורה.

והקובץ שמגיע עם ההתקנה כבר מכיל את localhost. זאת החלטה הגיונית בפני עצמה, כי רכיבים אחרים על אותו שרת צריכים לדבר עם ה-hub, ובקשה מהמחשב עצמו היא לכאורה בקשה מהמערכת. אבל ברגע שקיימת ב-PSIGW דרך לשלוח בקשות אל 127.0.0.1 עם תוכן שהתוקף בוחר, הבדיקה מפסיקה להגן על משהו. "הפתרון הזה כן מגביל גישה", כותבים ב-ZDI, "אבל תוקף שנמצא על מחשב מאושר עדיין יכול להגיע ל-PSEMHUB, ומכיוון ש-Oracle מאשרת את localhost כברירת מחדל, ה-SSRF ב-PSIGW נותן בדיוק את הגישה הזאת".

משם יש שתי דרכים להרצת קוד

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

הדרך השנייה שקטה יותר. באותה יכולת כתיבה אפשר להשתיל קובץ XML זדוני בתיקייה שבה PSEMHUB שומר את נתוני הסביבה שלו. כשהרכיב עולה בפעם הבאה, למשל אחרי הפעלה מחדש של השירות או של השרת כולו, הוא קורא את כל הקבצים מאותה תיקייה ומעביר כל אחד מהם ל-XMLDecoder של Java, שמייצר אובייקטים לפי מה שכתוב בקובץ. התוקף לא כתב web shell ולא השאיר אחריו קובץ JSP חדש, ולכן, כפי שמציינים ב-ZDI, הסיכוי שמנגנוני זיהוי סטנדרטיים ישימו לב קטן יותר.

מה ShinyHunters עשו עם זה בפועל

עד כאן מה שאפשר לעשות עם החולשות. מה שנעשה איתן בשטח מתועד בשני דוחות של Mandiant ושל Google Threat Intelligence Group, שעוקבים אחרי הקבוצה תחת הכינוי UNC6240. חלון הפעילות הראשון שתועד נמשך מ-27 במאי עד 9 ביוני 2026, כלומר כולו לפני שהתיקון של Oracle יצא ב-10 ביוני. Mandiant ו-GTIG הודיעו ליותר ממאה ארגונים בעולם שכתובות ה-IP שלהם התאימו ל-endpoints שעלולים להיות חשופים, ו-68 אחוזים מהם היו מוסדות להשכלה גבוהה, רובם בארצות הברית.

בדוח השני, שפורסם ב-25 בספטמבר, מתואר גל חדש שיצא מגבולות ההשכלה הגבוהה והגיע לטכנולוגיה, לשירותי IT, לבריאות, לחקלאות, לתחבורה וגם לגופי ממשל. Mandiant לא נותנת מספר מדויק וכותבת על "עשרות מערכות בעולם". מה שכן השתנה בגל הזה הוא תו בודד: במקום לבקש את הנתיב של PSEMHUB, התוקפים קודדו את האות הראשונה שלו בקידוד URL. חוקי WAF רבים משווים את הנתיב כפי שהוא מופיע בבקשה ולכן מפספסים אותו, בעוד שרת האפליקציה של PeopleSoft מפענח את הקידוד ומנתב את הבקשה בדיוק לאותו מקום. מה שכן, כבר הדוח של יוני רשם בקשות לשני המקומות, גם אל ה-hub וגם אל המחבר של PSIGW, ושם Mandiant ציינה את ה-SSRF כטכניקה חשודה בלי לתעד אותה במלואה. הניתוח של ZDI מאוקטובר הוא זה שמחבר בין השניים.

על השרתים שנפרצו מצאה Mandiant סדרת קבצי JSP קטנים שמקבלים פקודות ומחזירים את הפלט, רכיב מנהרה שמעביר תעבורת SOCKS5 מעל HTTP, ובמקרים אחרים קובץ התקנה מזויף בגודל 5.2 מגהבייט שהתחזה למתקין של נגן מדיה וסחב איתו דלת אחורית בשם SIDEEYE. הדלת הזאת מדברת עם שרת שליטה ובקרה (C2, השרת שממנו התוקף שולח פקודות לתוכנה הזדונית) ב-TCP גולמי, פורט אחד לפקודות ופורט שני לנתונים, ויודעת לחלץ פרטי אימות מהדפדפן ומהמכונה, לנהל תהליכים וקבצים ולפתוח מנהרות. לפי הדוח, כרבע מהפקודות שנצפו רצו בהרשאות root או NT AUTHORITY\SYSTEM, והשאר תחת חשבונות השירות של PeopleSoft ושל WebLogic, שגם הם חושפים קבצי הגדרות ומחרוזות התחברות למסד הנתונים.

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

מה זה אומר בפועל

אם אתם מריצים PeopleTools 8.61 או 8.62, העדכון של Oracle מ-10 ביוני הוא הדבר היחיד שסוגר את הכניסה, ושני הדוחות של Mandiant אומרים את זה במפורש: חוקי WAF וחסימה לפי נתיב אינם תחליף לעדכון. מי שלא יכול לעדכן מיד מתבקש להשבית את שירות ה-hub היכן שהוא לא בשימוש או להסיר את אפליקציית PSEMHUB, ולחסום מהאינטרנט גם אותה וגם את המחבר המאזין של ה-Integration Broker; לפי Mandiant, החסימה הזאת אינה פוגעת בעבודה הרגילה של המשתמשים במערכת.

וכאן נכנסת הנקודה הפחות נוחה. הניצול התחיל שבועיים לפני שהתיקון היה קיים, כך שעדכון עכשיו סוגר את הדלת אבל לא מעיד שאף אחד לא נכנס דרכה קודם. Mandiant ממליצה להתייחס לכל שרת שנמצא עליו קובץ חשוד כאל שרת שנפרץ, לשמר ממנו ראיות, ולהחליף כל פרטי אימות שהיו נגישים משכבת PeopleSoft, בראש ובראשונה במקומות שבהם WebLogic רץ כ-root או כ-SYSTEM.