
GeoServer و GeoTools حقن SQL (CVE-2023-25157 و CVE-2023-25158)
يحتوي هذا المستودع على وصف تفصيلي وخطوات تكرار لثغرات حقن SQL الموجودة في منصة GeoServer ومكتبة GeoTools. تم تعيين المعرف CVE-2023-25157 لـ GeoServer و CVE-2023-25158 لـ GeoTools.
GeoServer هو خادم برمجي مفتوح المصدر مكتوب بلغة Java يوفر القدرة على عرض وتحرير ومشاركة البيانات الجغرافية المكانية. وهو مصمم ليكون حلاً مرنًا وفعالًا لتوزيع البيانات الجغرافية المكانية من مجموعة متنوعة من المصادر مثل قواعد بيانات نظام المعلومات الجغرافية (GIS)، والبيانات المستندة إلى الويب، ومجموعات البيانات الشخصية.
يلتزم GeoServer بمعايير Open Geospatial Consortium (OGC) لمشاركة البيانات، بما في ذلك Web Feature Service (WFS) و Web Map Service (WMS) و Web Coverage Service (WCS). يعني هذا الالتزام بالمعايير أن البيانات من GeoServer يمكن استخدامها في مجموعة واسعة من التطبيقات، من برامج GIS المبنية خصيصًا إلى الحلول الجاهزة.
تم بناء GeoServer بشكل أساسي على إطار Spring Framework، ومع ذلك، يستخدم أيضًا عددًا من المكتبات والأطر الأخرى، بما في ذلك:
GeoTools: مكتبة Java مفتوحة المصدر توفر أدوات للبيانات الجغرافية المكانية. يستخدم GeoServer مكتبة GeoTools للعديد من وظائفه الأساسية، مثل قراءة البيانات وكتابتها وتحويلها.الثغرات المعنية مغروسة بعمق داخل تعبيرات الفلتر والوظائف المحددة بواسطة معايير Open Geospatial Consortium (OGC). تشكل هذه التعبيرات العمود الفقري للاستعلام عن البيانات الجغرافية المكانية ومعالجتها، وتلعب دورًا محوريًا في وظائف أنظمة مثل GeoServer و GeoTools.
عند استغلال هذه الثغرات، يمكن أن تؤدي إلى خروقات أمنية خطيرة. يعد الكشف غير المصرح به عن المعلومات مصدر قلق رئيسي، حيث يمكن للمهاجمين الوصول إلى البيانات الحساسة المخزنة في قاعدة البيانات. التعديل غير المصرح به هو نتيجة محتملة أخرى، حيث يمكن للمهاجمين معالجة البيانات لصالحهم. علاوة على ذلك، يمكن لهذه الثغرات أيضًا تسهيل تعطيل الخدمة، وقد يؤدي الاستغلال الناجح إلى عدم توفر الخدمة.
يقدم ما يلي تحليلاً متعمقًا لكل ثغرة تم تحديدها. يتم استكشاف كل ثغرة بالتفصيل، ومناقشة خصائصها المحددة، والظروف التي تؤدي إلى ظهورها، والتأثيرات المحتملة لاستغلالها. فيما يلي تفصيل مفصل للثغرات الموجودة في GeoServer:
PropertyIsLike filter: هذه الثغرة موجودة عند استخدام فلتر PropertyIsLike مع حقل نصي (String field) بالاقتران مع أي مخزن قائم على قاعدة بيانات علائقية، أو مخزن بيانات PostGIS مع تمكين وظائف الترميز، أو أي فسيفساء صور مع فهرس مخزن في قاعدة بيانات علائقية.strEndsWith function: تنشأ هذه الثغرة عند استخدام دالة strEndsWith مع مخزن بيانات PostGIS مع تمكين وظائف الترميز.strStartsWith function: توجد هذه الثغرة عند استخدام دالة strStartsWith مع مخزن بيانات PostGIS مع تمكين وظائف الترميز.FeatureId filter: هذه الثغرة موجودة عند استخدام فلتر FeatureId مع أي جدول قاعدة بيانات يحتوي على عمود مفتاح أساسي نصي (String primary key) وعند تعطيل البيانات المعدة (prepared statements).jsonArrayContains function: توجد هذه الثغرة عند استخدام دالة jsonArrayContains مع حقل نصي (String) أو JSON ومع مخزن بيانات PostGIS أو Oracle (فقط في إصدارات GeoServer 2.22.0 والإصدارات الأحدث).DWithin filter: يتم اكتشاف هذه الثغرة عند استخدام فلتر DWithin مع مخزن بيانات Oracle.وفيما يلي تفصيل مفصل للثغرات الموجودة في GeoTools:
PropertyIsLike filter:
strEndsWith function:
strStartsWith function:
FeatureId filter:
jsonArrayContains function:
DWithin filter:
CVE-2023-25157 GeoServer SQL Injection.CVE-2023-25158 GeoTools SQL Injection.الإجراء الموصى به لكل من ثغرة GeoServer SQL Injection (CVE-2023-25157) وثغرة GeoTools SQL Injection (CVE-2023-25158) هو الترقية إلى الإصدارات المشار إليها أو الأحدث. إذا تم إتمام هذه الترقية، فلا حاجة لخطوات إضافية. ومع ذلك، بالنسبة لأولئك الذين قد يجدون صعوبة في الترقية فورًا، قدم فريق Geo بعض الحلول البديلة أدناه.
تعطيل إعداد وظائف الترميز لمخزن بيانات PostGIS لتخفيف ثغرات strEndsWith و strStartsWith (مثل الفلاتر ليس لها تخفيف، إذا كان هناك حقل نصي في نوع المعلم المنشور).
تمكين إعداد البيانات المعدة (preparedStatements) لمخزن بيانات PostGIS لتخفيف ثغرة FeatureId.```java
Map<String, Object> params = new HashMap < >();
params.put("dbtype", "postgis");
params.put("host", "localhost");
params.put("port", 5432);
params.put("schema", "public");
params.put("database", "database");
params.put("user", "postgres");
params.put("passwd", "postgres");
params.put("preparedStatements", true); // mitigation
params.put("encode functions", false); // mitigation
DataStore dataStore = DataStoreFinder.getDataStore(params);
- كممارسة جيدة لتقليل سطح الهجوم، من المهم إعطاء حساب قاعدة البيانات المستخدم لمجموعات الاتصال الحد الأدنى المطلوب من الامتيازات (مثل القراءة فقط ما لم يتم استخدام WFS-T/importer/REST granule harvesting، وتقييد الوصول فقط إلى المخططات والجداول اللازمة للاستخدام الإنتاجي)
- لا يوجد إجراء تخفيف متاح لمرشح `PropertyIsLike`، يمكنك اختيار تعطيل DataStores الخاصة بقاعدة البيانات حتى تتمكن من الترقية.
- لا يوجد إجراء تخفيف متاح لـ `DWithin` مع Oracle DataStore، يمكنك اختيار تعطيل DataStores الخاصة بـ Oracle حتى تتمكن من الترقية.
### <b>تحليل التصحيح: مشكلة GitHub والالتزامات ذات الصلة</b>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
الروابط أدناه توفر العديد من مشكلات JIRA ذات الصلة بثغرات حقن SQL الموجودة في كل من GeoServer و GeoTools. توفر هذه الروابط إمكانية الوصول إلى بيانات ومناقشات وحلول مقترحة مهمة تتعلق بهذه الثغرات المحددة.
- [GEOS-10842: JDBCConfig: escape user inputs in SQL queries](https://osgeo-org.atlassian.net/browse/GEOS-10842)
- [GEOS-10839: JDBCConfig: add JDBC Configuration parameter to disable SQL comments and pretty-printing](https://osgeo-org.atlassian.net/browse/GEOS-10839)
- [GEOT-7302: Escape user inputs in SQL queries](https://osgeo-org.atlassian.net/browse/GEOT-7302)