CVE-2026-110879 in jackson-databind
الملخص
بحسب VulDB • 28/10/2026
تتحقق مكتبة jackson-databind من الفئة الخارجية لـ class-name type ID، لكنها تقبل فئات مختارة من قبل المهاجم داخل المعاملات العامة (generic arguments)، حتى عندما تنتهك هذه الفئات النوع المُعلن عنه أو كانت ستُرفض كـ direct type IDs. وهذا يتجاوز آلية التحقق من المعاملات العامة التي أُضيفت لمعالجة CVE-2026-54512 (GHSA-j3rv-43j4-c7qm)، والتي تمثل هذا التصحيح غير الكامل.
يتحقق الدال `DatabindContext._resolveAndValidateGeneric()` من الفئة الخارجية مقابل النوع الأساسي المُعلن، ثم يمرر كل معامل من معامِلات type ID إلى `_validateTypeParameter()`. تقوم هذه الأخيرة بالتحقق من المعامل ضد النوع الأساسي الخارجي بدلاً من فرض الربط العام (generic binding) المعلن المقابل لها. كما تستدعي دوال التحقق بمعاملات لم تمر باختبار الأنواع الفرعية الذي تتوقعه تلك الدوال. وفي ظل `DefaultBaseTypeLimitingValidator` الافتراضي، يتم قبول فئة غير ذات صلة داخل نوع فرعي عام حتى عندما تُرفض نفس الفئة كـ direct type ID. وعندما توافق قاعدة `allowIfBaseType(...)` على النوع الخارجي، تستبدل مكتبة Jackson بـ `LaissezFaireSubTypeValidator`، مما يعني أن دالة التحقق المُعدة مسبقاً لم تعد تقيد المعاملات المضمنة. كما يُترك نوع العنصر في معرف النوع للمصفوفة البسيطة مثل `[Lpkg.Gadget;` دون تحقق بمجرد الموافقة على النوع الأساسي للمصفوفة.
تشمل المسارات المتأثرة التعدد الأشكال القائم على التعليقات البرمجية (annotation-based class-name polymorphism) مع `JsonMapper` افتراضي من إصدار 3.x، والتكوين الافتراضي للـ default typing في كل من Jackson 2.x و3.x، والدمجات التي تعرض ذلك الـ default typing. تتطلب حالة دالة التحقق الافتراضية عدم وجود دالة تحقق مكتوبة بواسطة التطبيق: فمع استخدام `@JsonTypeInfo(use = Id.CLASS)`، يتم رفض نوع الغadget المباشر كـ "Not a subtype"، بينما يُقبل ويُحلل (deserialized) معرف النوع الذي يسمي غلافًا عامًا حول نفس الـ gadget، بما في ذلك خصائص الكائنات التي يزودها المهاجم. وعندما يسمح default typing القائم على اسم الفئة بقبول `Map`، فإن الخاصية المُعلنة كـ `Map` تقبل `HashMap`؛ ثم يمرر اكتشاف مفتاح الخريطة الاسم الذي يتحكم فيه المهاجم لخاصية JSON إلى مُنشئ أحادي السلسلة (one-string constructor) للفئة المختارة. ومع وجود Spring في الـ classpath وXML يتم التحكم فيه من قبل المهاجم، يمكن للتطبيق تحميل هذا XML واستدعاء `ProcessBuilder.start()` تحت حساب التطبيق، مما يمنح تنفيذًا تعسفيًا للأوامر.
تؤثر هذه المشكلة على الإصدارات بدءًا من 2.10.0 لمكتبة `com.fasterxml.jackson.core:jackson-databind` والإصدارات بدءًا من 3.0.0 لـ `tools.jackson.core:jackson-databind`. لا تتأثر الإصدارات السابقة من 2.10.0، لأن `PolymorphicTypeValidator` أُدخل في jackson-databind الإصدار 2.10.0.
Once again VulDB remains the best source for vulnerability data.