في هذه المدونة، نستكشف الثغرة الأمنية CVE-2024-36401 - وهي ثغرة أمنية وُجدت في GeoServer، وهو خادم مفتوح المصدر قائم على Java يُستخدم على نطاق واسع لمعالجة البيانات الجغرافية المكانية ومشاركتها. هذه الثغرة، التي يمكن أن تسمح بتنفيذ التعليمات البرمجية عن بُعد (RCE) من قبل مستخدمين غير مصادقين، تؤكد على الأهمية البالغة لتصحيح عمليات نشر GeoServer في أسرع وقت ممكن.
في أحدث تحليل أمني لدينا، يقوم اثنان من الزملاء الخريجين من OPSWAT بالتحقيق في هذا التهديد من خلال
- الفحص العميق لنواقل هجوم CVE
- تحديد الثغرات الأمنية التي يمكن أن يستخدمها المهاجمون لاستغلال GeoServer
- محاكاة كيف يمكن للمهاجمين اختراق عمليات نشر GeoServer
كما سنشارك أيضًا كيف يمكن لتقنية OPSWAT SBOM اكتشاف هذه الثغرة، بالإضافة إلى توفير خطوات قابلة للتنفيذ للفرق لتأمين البنية التحتية الجغرافية المكانية قبل أن يهاجمها المهاجمون.

نظرة عامة على الخادم الجغرافي
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 (تنفيذ التعليمات البرمجية عن بُعد) عن طريق حقن مدخلات مصممة في تثبيت GeoServer الافتراضي.
وفقًا لإرشادات GitHub الأمنية، تحمل هذه الثغرة الأمنية درجة CVSS v3.1 9.8 (حرجة).
ميزات GeoServer البسيطة مقابل الميزات المعقدة
يدعم GeoServer كلاً من أنواع الميزات البسيطة والمعقدة لاستيعاب هياكل البيانات الجغرافية المكانية المختلفة، من مجموعات البيانات المسطحة إلى مجموعات البيانات المتداخلة والمعقدة. ومع ذلك، فإن المعالجة المعيبة لتعابير XPath عبر أنواع البيانات هذه هي ما يجعل CVE-2024-36401 قابلة للاستغلال.
ميزات بسيطة
تمثل أنواع السمات البسيطة بيانات جغرافية مكانية مباشرة بتنسيق مسطح، حيث يتوافق كل صف في قاعدة البيانات مع سمة جغرافية مكانية؛ وكل سمة تتوافق مباشرة مع عنصر XML.
على سبيل المثال، يمكن بسهولة تحويل جدول يمثل الشركات بأعمدة مثل المعرف والاسم والموقع إلى ميزات XML بسيطة.
الهوية | الاسم | الموقع |
1 | OPSWAT | النقطة (10.769829، 106.685248) |
الميزات المعقدة
في المقابل، تتعامل أنواع الميزات المعقدة مع بيانات أكثر تعقيدًا. يدعم هذا النوع من الميزات الخصائص المتداخلة والعلاقات بين مجموعات البيانات المختلفة. لا يتم إنشاء هذه المخططات المعقدة تلقائيًا، ولكن يتم تعريفها باستخدام معايير المجتمع، كما هو موضح في ملحق مخطط التطبيق الخاص بخادم GeoServer.
مثل:
تحت جدول الشركات السابق، نضيف مفتاحًا خارجيًا ضمن جدول الشركات السابق gu_id
لوصف العلاقة بين الشركة والوحدة الجيولوجية المكافئة لها:
الهوية | الاسم | الموقع | gu_id |
1 | OPSWAT | النقطة (10.769829، 106.685248) | 12 |
يتم تخزين معلومات الوحدة الجيولوجية بشكل منفصل في الجدول الوحدة الجيولوجية
:
gu_id | الجرة | الوصف |
12 | urn:x-demo:feature:GeologicUnit:12 | نيس متحولة |
باستخدام هذه الجداول، يمكننا ربط الشركة بـ SA:شركة أخذ العينات
الذي يحتوي على gsml:GeologicUnit
. ينشئ هذا الإعداد ميزة معقدة، حيث يتضمن أنواعًا متداخلة وعلاقات محددة بمواصفات المجتمع بدلاً من المخططات التي يتم إنشاؤها تلقائيًا.
تُعد هذه المرونة ضرورية لنمذجة سيناريوهات العالم الحقيقي المعقدة، ولكنها تقدم أيضًا نقاط ضعف بسبب اعتمادها على تقنيات المعالجة المتقدمة مثل تقييم JXPath لإدارة البنى المتداخلة بفعالية.
كيف ينشأ الضعف
تم تصميم GeoServer لاستخدام تقييم XPath لمعالجة أنواع الميزات المعقدة (مثل تلك الموجودة في مخازن بيانات مخطط التطبيقات). ولكن بسبب المعالجة غير الصحيحة، فإنه يطبق خطأً تقييم XPath على أنواع الميزات البسيطة أيضًا. هذا يخلق ناقل هجوم لأن:
- يعتمد GeoServer على مكتبة GeoTools لتقييم أسماء الخصائص أثناء استرجاع البيانات.
- إن
مشترك-ج-إكسباث
المستخدمة في معالجة تعبيرات XPath، تفتقر إلى التحقق المناسب من الصحة، مما قد يؤدي إلى تنفيذ تعليمات برمجية عشوائية عند معالجة تعبيرات XPath. - يُعرّض هذا الخلل جميع مثيلات GeoServer إلى ثغرات محتملة في RCE، حيث يمكن للمهاجم صياغة طلب خبيث يستغل تنفيذ XPath غير الآمن للتحكم في الخادم.
نظرة عامة على سير عمل الاستغلال
- A
البريد
يتم إرسال الطلب إلىGetPropertyValue
العملية. ثم يحاول GeoServer استرداد الخاصية (أوالقيمةالمرجع
) لخاصية معينة. - إذا كانت الخاصية المطلوبة موجودة في جدول تفاصيل نوع الميزة، يقوم GeoServer بمعالجتها بشكل طبيعي.
- ومع ذلك، إذا لم تكن الخاصية مدرجة، يعود GeoServer إلى
مشترك-ج-إكسباث
لتفسير معلمة الطلب كتعبير XPath. - منذ
مشترك-ج-إكسباث
تسمح بتنفيذ تعليمات Java البرمجية لـ Java مباشرةً من XPath، تتيح هذه الآلية الاحتياطية إمكانية استغلال معلمات الطلبات التي يوفرها المستخدم لتنفيذ التعليمات البرمجية عن بُعد. ببساطة، يمكن للمهاجمين حقن تعليمات برمجية خبيثة لتحقيق RCE.
استغلال الثغرات الأمنية وتحليلها
JXPath وجسر تنفيذ جافا
إن مشترك-ج-إكسباث
التي يُشار إليها عادةً باسم JXPath، تتيح التنقل عبر الرسوم البيانية لكائنات Java (JavaBeans، كائنات DOM، إلخ) باستخدام صيغة XPath. على سبيل المثال، إذا كان لديك كائن موظف بسيط بخصائص مثل الاسم والعنوان، فإن JXPath يتيح لك الاستعلام عن هذه الخصائص كما لو كانت عقدًا في مستند XML.
استغلال الوظائف الإضافية
بالإضافة إلى الدوال القياسية، يدعم JXPath أيضًا دوال الامتداد التي تعمل كجسر إلى Java. يعد هذا "الجسر إلى جافا" أمرًا بالغ الأهمية لأنه يسمح باستدعاء دوال جافا مباشرةً ضمن استعلامات XPath، على سبيل المثال:
نظرًا للقيود القليلة التي يمكن استدعاء أساليب جافا من خلال هذا الجسر، يمكن للمهاجم استغلال تنفيذ()
(أو طرق مشابهة) لتنفيذ أوامر عشوائية على الخادم.
WFS GetPropertyValue
يتيح WFS الخاص ب GeoServer للمستخدمين الاستعلام عن الميزات الجغرافية المكانية ومعالجتها. في ظل الظروف العادية، فإن WFS GetPropertyValue
ستعيد العملية ببساطة الخاصية المطلوبة في بنية XML.


تحليل سير العمل
- يرسل المهاجم طلب POST إلى /geoserver/wfs.
- يفحص GeoServer علامة XML الخارجية-
wfs:GetPropertyValueValue-
لتحديد العملية التي سيتم تشغيلها. - ثم يقوم GeoServer بتفويض معلمات الطلب إلى الأسلوب المقابل في فئة WFS. في هذا السيناريو، يقوم المرسل بتوجيه الطلب إلى
GetPropertyValue
الطريقة.
- ضمن فئة DefaultWebFeatureService20 (WFS) الافتراضية، هذه
GetPropertyValue
يُعيد توجيه معلمات المستخدم إلى معالج يحمل الاسم نفسه. - المعالج
تشغيل()
تتلقى الطريقة الطلب، بما في ذلكالقيمةالمرجع
معلمة يتحكم فيها المستخدم.
- خلال
تشغيل()
GeoServer، يستردّ الخادم الجغرافيالقيمة المرجعية
واستدعاءتقييم()
الوظيفة.
- إذا كان
القيمةالمرجع
لا تتطابق مع خصائص GeoServer المحددة مسبقًا، يقوم GeoServer بتحويلها افتراضيًا إلىناصل خصائص الميزة
الذي يفسرالقيمةالمرجع
كتعبير XPath.
- إن
الحصول على ()
في خاصية الميزة في خاصية الميزة يستخدممشترك-ج-إكسباث
لتنفيذ استعلام XPath. هنا، يقوم المستخدمالقيمةالمرجع
مباشرةً إلى معلمة xpath دون التحقق من صحتها. من خلالJXPathContext.newContext()
، يقوم GeoServer بتهيئة بيئة لاستعلامات XPath، ثم يقوم بتشغيلها عبرتكرار المؤشرات()
.
نظرًا لأن JXPath يدعم دوال الامتداد، يمكن للمهاجمين حقن تعليمات برمجية خبيثة في تعبير XPath، مما يؤدي إلى تنفيذ تعليمات برمجية عشوائية على مثيل GeoServer.
توضح هذه السلسلة من الأحداث كيف أن التعامل غير الآمن مع القيمةالمرجع
يمكن أن تؤدي المعلمة إلى RCE، مما يمثل تهديدًا أمنيًا خطيرًا لعمليات نشر GeoServer الضعيفة.
محاكاة الهجوم
لمحاكاة هذا الاستغلال في سيناريو واقعي، قام زملاؤنا الخريجون في OPSWAT بنشر GeoServer على جهاز ويندوز محلي. تم عرض الواجهة التالية عند الوصول إلى GeoServer.
وبمجرد تشغيل الخادم، يمكن للمهاجم استغلال الثغرة عن طريق إرسال طلب POST بتعبير XPath خبيث عبر القيمةالمرجع
إلى نقطة النهاية /geoserver/wfs.
النتيجة: بعد إرسال الطلب، يقوم تعبير XPath الخبيث بتنفيذ أمر النظام وتشغيل تطبيق الحاسبة.
تخفيف الآثار والتوصيات
يمكن أن يتصاعد الاستغلال البسيط إلى هجوم على سلسلة توريد برمجيات، خاصةً في المشاريع التي تعتمد على برمجيات مفتوحة المصدر مثل GeoServer. تساعد تقنيةOPSWAT SBOM (فاتورة الموادSoftware ) في تحديد الثغرات الأمنية مثل CVE-2024-36401 في قاعدة التعليمات البرمجية الخاصة بك.
يوضح هذا المثال كيف أن OPSWAT SBOM:
- يكتشف مكونات البرامج المتأثرة بالثغرات الأمنية.
- تقييم وتصنيف درجة خطورة الثغرة الأمنية - هنا، تم وضع علامة "حرجة" على الثغرات الأمنية في GeoServer.
- يحدد الإصدار المتأثر.
- يوصي بالإصدار الثابت حتى تتمكن فرق التطوير من تطبيق التصحيحات أو اتخاذ تدابير الإصلاح على الفور.
الخطوات الأخرى الموصى بها
- قم بتحديث GeoServer: قم بالترقية إلى إصدارات GeoServer 2.25.2 أو 2.24.4 أو 2.23.6 (أو أحدث) حيث تم تصحيح الثغرة.
- تبعيات التدقيق: استخدم بانتظام أدوات مثل OPSWAT SBOM لتحديد المكتبات القديمة (على سبيل المثال,
مشترك-ج-إكسباث
) في بيئتك. - تقييد الوصول: انشر GeoServer خلف جدران الحماية أو طبقات المصادقة لتقليل سطح الهجوم.
- راقب الإرشادات الأمنية: راقب ملاحظات إصدار GeoServer الرسمية وقواعد بيانات مكافحة التطرف العنيف للبقاء على اطلاع دائم على التصحيحات الجديدة.
نبذة عن OPSWAT SBOM
يدعم OPSWAT SBOM لغات البرمجة الأكثر شيوعًا، مما يوفر لفرق تطوير البرمجيات إمكانية الاطلاع على مكتبات الطرف الثالث مفتوحة المصدر والتبعيات المرتبطة بها وأحدث الإصدارات المتاحة للترقية. يمكن للمطوِّرين دمج OPSWAT SBOM في التعليمات البرمجية المصدرية وخدمات الحاويات مثل GitHub وBitBucket وGitLab وAmazon ECR وDockerHub وغيرها. تعرف على المزيد حول SBOM.
تحدث إلى أحد الخبراء اليوم للتعرف على كيفية دمج أدوات وحلول OPSWAT مع بنيتك التحتية الحالية وسير العمل لديك: