
בבלוג זה, נחקור את CVE-2024-36401 - פגיעות אבטחה שנמצאה ב-GeoServer, שרת מבוסס ג'אווה בקוד פתוח המשמש באופן נרחב לניהול ושיתוף נתונים גיאו-מרחביים. פגיעות זו, אשר עלולה לאפשר ביצוע קוד מרחוק (RCE) על ידי משתמשים לא מאומתים, מדגישה את החשיבות הקריטית של תיקון פריסות GeoServer בהקדם האפשרי.
בניתוח האבטחה האחרון שלנו, שניים OPSWAT עמיתים לתארים מתקדמים חוקרים איום זה על ידי:
- בחינה מעמיקה של וקטורי התקיפה של ה-CVE
- זיהוי פערי אבטחה שתוקפים עלולים להשתמש בהם כדי לנצל את GeoServer
- סימולציה של האופן שבו תוקפים יכולים לפגוע בפריסות GeoServer
נשתף גם כיצד OPSWAT טכנולוגיית SBOM יכולה לזהות את הפגיעות הזו, בנוסף לספק צעדים מעשיים לצוותים לאבטחת התשתית הגיאו-מרחבית שלהם לפני שתוקפים יתקפו.

סקירה כללית של GeoServer
GeoServer הוא שרת קוד פתוח מבוסס ג'אווה, המיועד לצפייה, עריכה ושיתוף של נתונים גיאו-מרחביים. GeoServer, שהושק לראשונה בשנת 2001 על ידי TOPP (פרויקט התכנון הפתוח), פותח כדי לשפר את מעורבות הציבור בתכנון ממשלתי ועירוני באמצעות חילופי נתונים מרחביים פתוחים. למעלה משני עשורים לאחר מכן, GeoServer התבגר לפלטפורמה חזקה המסוגלת לטפל בפורמטים שונים של נתונים מרחביים ולשלב עם מקורות נתונים שונים.
GeoServer מספקת שירותים המבוססים על תקני OGC (קונסורציום גיאו-מרחבי פתוח) , כולל:
רקע על CVE-2024-36401
CVE-2024-36401 משפיע על גרסאות GeoServer קודמות ל-2.25.2, 2.24.4 ו-2.23.6. הליקוי נובע מהערכה לא בטוחה של שמות מאפיינים כביטויי XPath על פני פרמטרים מרובים של בקשות OGC. תוקפים יכולים לנצל פגם זה כדי ליצור RCE (ביצוע קוד מרחוק) על ידי הזרקת קלטים בעלי מבנה (crafted inputs) בהתקנת GeoServer ברירת מחדל.
לפי יועצי האבטחה של GitHub, פגיעות זו נושאת ציון CVSS גרסה 3.1 של 9.8 (קריטי).

התכונות הפשוטות לעומת המורכבות של GeoServer
GeoServer תומך בסוגי מאפיינים פשוטים ומורכבים כאחד כדי להתאים למבני נתונים גיאו-מרחביים שונים, החל ממערכי נתונים שטוחים ועד מערכי נתונים מורכבים ומקוננים. עם זאת, הטיפול הפגום בביטויי XPath על פני סוגי נתונים אלה הוא שהופך את CVE-2024-36401 לניתן לניצול.
תכונות פשוטות
סוגי מאפיינים פשוטים מייצגים נתונים גיאו-מרחביים פשוטים בפורמט שטוח, שבו כל שורה במסד נתונים מתאימה לתכונה גיאו-מרחבית; וכל תכונה ממופה ישירות לאלמנט XML.
לדוגמה, טבלה המייצגת חברות עם עמודות כמו מזהה, שם ומיקום ניתנת להמרה בקלות לתכונות XML פשוטות.
| תְעוּדַת זֶהוּת | שֵׁם | מִקוּם |
| 1 | OPSWAT | נקודה (10.769829, 106.685248) |

תכונות מורכבות
לעומת זאת, סוגי מאפיינים מורכבים מטפלים בנתונים מורכבים יותר. סוג מאפיינים זה תומך במאפיינים מקוננים ובקשרים בין מערכי נתונים שונים. סכמות מורכבות אלו אינן נוצרות באופן אוטומטי, אלא מוגדרות באמצעות סטנדרטים קהילתיים, כפי שמתואר בהרחבת Application Schema של GeoServer.
דוּגמָה:
מתחת לטבלת החברות הקודמת, נוסיף מפתח זר gu_id כדי לתאר את הקשר בין חברה ליחידה הגיאולוגית המקבילה שלה:
| תְעוּדַת זֶהוּת | שֵׁם | מִקוּם | gu_id |
| 1 | OPSWAT | נקודה (10.769829, 106.685248) | 12 |
מידע היחידה הגיאולוגית מאוחסן בנפרד בטבלה יחידה גיאולוגית:
| gu_id | מֵיחָם | תֵאוּר |
| 12 | urn:x-demo:feature:GeologicUnit:12 | גנייס מטמורפי |
באמצעות טבלאות אלו, נוכל למפות את החברה ל- חברת דגימה sa:, אשר מכיל קוד מקונן gsml:יחידה גיאולוגיתהגדרה זו יוצרת תכונה מורכבת, מכיוון שהיא כוללת סוגים וקשרים מקוננים המוגדרים על ידי מפרטי קהילה ולא סכמות שנוצרו אוטומטית.

גמישות כזו חיונית למידול תרחישים מורכבים בעולם האמיתי, אך גם מציגה פגיעויות עקב הסתמכותה על טכניקות עיבוד מתקדמות כמו הערכת JXPath לניהול יעיל של המבנים המקוננים.
כיצד נוצרת הפגיעות
GeoServer נועד להשתמש בהערכת XPath כדי לעבד סוגי מאפיינים מורכבים (כגון אלו הנמצאים במאגרי נתונים של Application Schema). אך עקב טיפול לא נכון, הוא מיישם בטעות הערכת XPath גם על סוגי מאפיינים פשוטים. זה יוצר וקטור תקיפה מכיוון ש:
- GeoServer מסתמך על ספריית GeoTools כדי להעריך שמות מאפיינים במהלך אחזור נתונים.
- ה
commons-jxpathלספרייה, המשמשת לעיבוד ביטויי XPath, חסרה אימות מתאים, מה שעלול לבצע קוד שרירותי בעת עיבוד ביטויי XPath. - פגם זה חושף את כל מופעי GeoServer לפגיעויות RCE פוטנציאליות, שכן תוקף יכול ליצור בקשה זדונית המנצלת את ביצוע ה-XPath הלא בטוח הזה כדי לשלוט בשרת.
סקירת תהליך עבודה של ניצול
- א
שֶׁלְאַחַרהבקשה נשלחת אלקבל ערך נכספעולה. לאחר מכן GeoServer מנסה לאחזר את המאפיין (אוערך הפניה) עבור תכונה נתונה. - אם המאפיין המבוקש קיים בטבלת פרטי סוג התכונה, GeoServer מעבד אותו כרגיל.

- עם זאת, אם הנכס אינו רשום, GeoServer נוטה לעזרה ב-
commons-jxpathספרייה כדי לפרש את פרמטר הבקשה כביטוי XPath. - מֵאָז
commons-jxpathמאפשר ביצוע קוד Java ישירות מ-XPath, מנגנון גיבוי זה מאפשר פוטנציאלית ניצול פרמטרים של בקשה שסופקו על ידי המשתמש לצורך ביצוע קוד מרחוק. במילים פשוטות, תוקף יכול להזריק קוד זדוני כדי להשיג RCE.

ניצול וניתוח פגיעויות
JXPath וגשר הביצוע של ג'אווה

ה commons-jxpath ספריית קוד, המכונה בדרך כלל JXPath, מאפשרת ניווט בין גרפי אובייקטים של Java (JavaBeans, אובייקטי DOM וכו') באמצעות תחביר XPath. לדוגמה, אם יש לך אובייקט Employee פשוט עם מאפיינים כמו שם וכתובת, JXPath מאפשר לך לבצע שאילתה על מאפיינים אלה כאילו היו צמתים במסמך XML.

ניצול פונקציות הרחבה
מעבר לפונקציות סטנדרטיות, JXPath תומך גם בפונקציות הרחבה הפועלות כגשר ל-Java. "גשר ל-Java" זה חיוני משום שהוא מאפשר קריאה ישירה של פונקציות Java בתוך שאילתות XPath, לדוגמה:

בגלל המגבלות המעטות על אפשרויות הקריאה של מתודות Java דרך גשר זה, תוקף יכול לנצל את exec() פונקציה (או שיטות דומות) לביצוע פקודות שרירותיות בשרת.

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


ניתוח זרימת עבודה
- תוקף שולח בקשת POST אל /geoserver/wfs.
- GeoServer בוחן את תג ה-XML החיצוני ביותר—
wfs:GetPropertyValue—כדי לקבוע איזו פעולה להפעיל. - לאחר מכן, GeoServer מאציל את פרמטרי הבקשה לשיטה המתאימה במחלקת WFS. בתרחיש זה, ה-Dispatcher מנתב את הבקשה אל
קבל ערך נכסשִׁיטָה.

- בתוך המחלקה DefaultWebFeatureService20 (WFS), זה
קבל ערך נכסהשיטה מעבירה את הפרמטרים של המשתמש למטפל בעל אותו שם. - של המטפל
לָרוּץ()השיטה מקבלת את הבקשה, כולל הקריטיערך הפניהפרמטר הנשלט על ידי המשתמש.

- במהלך ה
לָרוּץ()שיטה, GeoServer מאחזר אתערך ייחוסומפעיל אתלְהַעֲרִיך()פוּנקצִיָה.

- אִם
ערך הפניהאינו תואם את המאפיינים המוגדרים מראש של GeoServer, GeoServer מגדיר אותו כברירת מחדל ל-גישה לתכונה, אשר מפרשערך הפניהכביטוי XPath.

- ה
לְקַבֵּל()השיטה ב-FeaturePropertyAccessor משתמשתcommons-jxpathכדי לבצע את שאילתת ה-XPath. כאן, של המשתמשערך הפניהמועבר ישירות לפרמטר xpath ללא אימות. דרךJXPathContext.newContext()GeoServer מאתחל סביבה עבור שאילתות XPath, ואז מפעיל אותן דרךאיטרציה מצביעים().

מכיוון ש-JXPath תומך בפונקציות הרחבה, תוקפים יכולים להחדיר קוד זדוני לביטוי XPath, מה שמפעיל ביצוע קוד שרירותי במופע GeoServer.

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

לאחר שהשרת פועל, תוקף יכול לנצל את הפגיעות על ידי שליחת בקשת POST עם ביטוי XPath זדוני דרך ערך הפניה לנקודת הקצה /geoserver/wfs.

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

הפחתה והמלצות
פרצת אבטחה פשוטה יכולה להסלים למתקפת שרשרת אספקה של תוכנה, במיוחד בפרויקטים המסתמכים על תוכנות קוד פתוח כמו GeoServer. טכנולוגיית OPSWAT SBOM ( Software Bill of Materials) מסייעת בזיהוי פגיעויות כמו CVE-2024-36401 בבסיס הקוד שלך.
דוגמה זו מדגימה כיצד OPSWAT SBOM:
- מזהה את רכיבי התוכנה המושפעים מפגיעויות.
- מעריך ומדרג את חומרת פרצת האבטחה - כאן, אירועי ה-CVE של GeoServer מסומנים כ"קריטיים".
- מזהה את הגרסה המושפעת.
- ממליץ על הגרסה המתוקנת כדי שצוותי פיתוח יוכלו להחיל תיקונים או לנקוט באמצעי תיקון באופן מיידי.

צעדים מומלצים נוספים
- עדכון GeoServer: שדרגו לגרסאות GeoServer 2.25.2, 2.24.4 או 2.23.6 (או גרסה מתקדמת יותר) שבהן הפגיעות תוקנה.
- תלויות בביקורת: השתמשו באופן קבוע בכלים כמו OPSWAT SBOM לזיהוי ספריות מיושנות (למשל,
commons-jxpath) בסביבה שלך. - הגבלת גישה: פרוס את GeoServer מאחורי חומות אש או שכבות אימות כדי למזער את משטח ההתקפה.
- ניטור אזהרות אבטחה: יש לעקוב אחר הערות השחרור הרשמיות של GeoServer ומסדי הנתונים של CVE כדי להישאר מעודכנים בתיקונים חדשים.
אוֹדוֹת OPSWAT SBOM
OPSWAT SBOM תומך בשפות התכנות הפופולריות ביותר, ומספק לצוותי פיתוח תוכנה נראות לספריות קוד פתוח של צד שלישי, התלויות הנלוות אליהן והגרסאות העדכניות ביותר הזמינות לשדרוג. מפתחים יכולים לשלב OPSWAT SBOM לתוך קוד המקור שלהם ושירותי קונטיינרים כגון GitHub, BitBucket, GitLab, Amazon ECR, DockerHub ועוד. למידע נוסף על SBOM .
דברו עם מומחה עוד היום כדי ללמוד כיצד לשלב OPSWAT כלים ופתרונות עם התשתית ותהליכי העבודה הקיימים שלך:
