
فحص ذاتي لـ 26 نشرة أمنية في jackson-databind + jackson-core: حساب التقاطع إعلانًا بإعلان حسب الإحداثيات لإعطاء النسخ المضمونة فعليًا (2.18.11/2.21.7/2.22.3/3.1.7/3.2.3، و2.21.6 لم تعد كافية)؛ وفحص الشيفرة المصدرية لتقليل الضجيج وإخبارك بعدد الثغرات التي أصابتك فعليًا؛ ويتضمن ثغرة واحدة غير مدرجة في مكتبة GitHub العامة ولا يبلّغ عنها Dependabot (ثغرة jackson-core، فحتى بعد ترقية databind تبقى مصابًا بها) CVE-2026-54515 / CVE-2026-54512
أداة فحص ذاتي لـ 26 نشرة أمنية في jackson-databind + jackson-core. ملف jar واحد بلا اعتماديات، دون اتصال بالشبكة.
تجيب على ثلاثة أسئلة لا يستطيع Dependabot الإجابة عليها:
CVE-2026-68498 في jackson-core (انظر قسم «v0.3.0»).@JsonView / الأنواع متعددة الأشكال / المطابقة غير الحساسة لحالة الأحرف……)، فيقلّل الضجيج من «مُثبَّت إصدار متأثر» إلى «واقع فعلاً في تلك الميزة».java -jar jackson-check.jar ./target ./src
في 09-30 و10-01، أصدرت FasterXML أربعة إشعارات أخرى بدرجة high (كلها 7.5، وكلها حجب خدمة):
| المعرّف | الإحداثي | الموضوع | شرط التفعيل |
|---|---|---|---|
| CVE-2026-91776 | jackson-databind | كل type id غير معروف يترك مدخلًا في ذاكرة التخزين المؤقت طوال عمر العملية، فالذاكرة تزداد ولا تنقص | @JsonTypeInfo(use = Id.NAME, defaultImpl = …) + قدرة المهاجم على التحكم في type id + إعادة استخدام mapper لفترة طويلة |
| CVE-2026-91777 | jackson-databind | عند إكمال التعريفات بالترتيب العكسي للإشارات الأمامية يبلغ عدد المقارنات نحو N²/2 (N=2000 → 2,003,000 مقارنة) | إلغاء تسلسل JSON غير موثوق إلى مجموعة أو Map تحمل @JsonIdentityInfo |
| CVE-2026-89425 | jackson-core | يُدمج الرمز المشوّه كاملًا في رسالة الاستثناء دون التقيد بـ maxErrorTokenLength | المسار الوحيد هو createParser(DataInput)؛ ويذكر الإشعار أنه لا يوجد إعداد يخفف الأثر |
| CVE-2026-89407 | jackson-core | تراجع تربيعي في تعبير NumberInput.looksLikeValidNumber() النمطي (74.4 ثانية مقاسة على 160 ألف حرف) | ربط سلاسل نصية من JSON بحقول رقمية (السلوك الافتراضي في databind)؛ ويخضع هذا المسار لـ maxStringLength (افتراضيًا 20 مليونًا) لا لـ maxNumberLength (افتراضيًا 1000) |
الإصدارات المُصلحة للإحداثيين تحمل الأرقام نفسها: 2.18.11 / 2.21.7 / 2.22.3 / 3.1.7 / 3.2.3 (جميعها متاحة للتنزيل من Central؛ و89407 مُصلح في فرع 3.2 ضمن 3.2.2، بينما يتطلب 89425 الإصدار 3.2.3، فاختر الأعلى).
لذلك فإن الإصدارات 2.18.10 / 2.21.6 / 2.22.2 / 3.1.6 / 3.2.2 التي طبعها v0.2.0 / v0.3.0 لم تعد كافية اعتبارًا من 09-30. ملفات jar للإصدارات القديمة لن تعرف بذلك — يُرجى التبديل إلى v0.4.0 وإعادة الفحص.
⚠️ هذه الأربعة ليست ضمن النقاط العمياء لـ Dependabot: فقد أُدرجت في قاعدة الثغرات العالمية على GitHub يوم صدورها، وسينبّه Dependabot إليها بشكل طبيعي. إن دمجها في v0.4.0 ليس إلا للحفاظ على صحة الإجابة عن سؤال «إلى أي إصدار ينبغي الترقية».
🔴 وتصحيح في الوقت نفسه لادعاء في v0.2.0: ما ورد في قسم «v0.2.0» أدناه من أن «تلك الأربعة لم تُدرج في قاعدة الثغرات العالمية على GitHub، ولن يبلّغ عنها Dependabot» كان صحيحًا حتى 09-14، ولم يعد صحيحًا اعتبارًا من 2026-09-28 — فقد أُدرجت الأربعة جميعًا في القاعدة العالمية (إعادة تشغيل ASSERT2 في
gen_rules.pyبتاريخ 10-05: النقاط العمياء في جانب databind من 4 → 0). الشيء الوحيد الذي لا يزال غير قابل للاستعلام الآن هوCVE-2026-68498فيjackson-core.
jackson-core هو إحداثي آخر، وفحص databind لا يكشفهكان جدول التحديد في v0.2.x يحتوي على artifactId واحد فقط هو jackson-databind. لذلك فإن الإشعارات السبعة التي أصدرتها FasterXML
في مستودع jackson-core لم تكن هذه الأداة قادرة على كشف أي منها — ولم تكن تُبلّغ عن أي خطأ بسبب ذلك، بل تتخطى بصمت كل ملفات jackson-core-*.jar.
«لم يُفحص» و«أنت في أمان» يبدوان متطابقين في التقرير.
غيّر v0.3.0 دقة التحديد من advisory × groupId × النطاق إلى advisory × groupId × artifactId × النطاق،
وأصبح التحديد وحساب التقاطع و«لم يُفحص هذا الإحداثي» كلها مبنية على الإحداثي الكامل كمفتاح.
أهم ما ينبغي الانتباه إليه — CVE-2026-68498 (high 7.5، 2026-09-12):
StreamReadConstraints.maxNameLength (افتراضيًا 50 ألف حرف) لم يكن فعّالًا على مسار إدخال الأحرف.
عند تجميع أسماء الخصائص يستدعي ReaderBasedJsonParser حد طول السلسلة النصية (افتراضيًا 100 مليون، أي نحو 2000 ضعف)،
ولا يُنفَّذ التحقق الفعلي من الاسم إلا بعد مسح المفتاح كاملًا — وعندها يكون نحو 200MB قد خُصصت بالفعل.
يكفي مفتاح JSON واحد فائق الطول، والإعداد الافتراضي وحده كافٍ للإصابة.
>= 2.16.0, <= 2.18.9 → 2.18.10 · >= 2.19.0, <= 2.21.5 → 2.21.6 ·
>= 2.22.0, <= 2.22.1 → 2.22.2 · 3.x (tools.jackson.core) <= 3.1.5 → 3.1.6 · <= 3.2.1 → 3.2.2UTF8StreamJsonParser التحقق في كل مرة يوسّع فيها المخزن المؤقت.
التحليل من byte[] / InputStream غير متأثر؛ المصاب هو التحليل من String / Reader / char[].validateNameLength موجود فقط في ReaderBasedJsonParser في الإصدار المُصلح،
وغير موجود في الإصدارات المصابة (أُعيد إنتاجه في الفروع الثلاثة جميعًا: 2.18.9→2.18.10 · 2.21.5→2.21.6 · 3.1.5→3.1.6).⚠️ حدود قدرات الأداة، مكتوبة هنا لتجنّب سوء الفهم: هذه الأداة تستطيع الحكم على إصدار jar، لكنها لا تستطيع الحكم على طريقة استدعائك —— الصيغة الأكثر شيوعًا
readValue(someStringVariable, …)، فمسح النص لا يكشف ما إذا كان ذلك المتغير من نوعStringأوbyte[]. لذلك فإن «لم يتم العثور على شرط التفعيل» لا يعني أنك غير متأثر، وهذا ما يُطبع في التقرير أيضًا.
🔴 لا تقرأ هذا على أنه «Dependabot أعمى تمامًا عن jackson-core»: من بين تلك السبعة في
jackson-coreيوجدCVE-2026-68498واحد فقط غير موجود في قاعدة الثغرات العالمية على GitHub، أما الستة الأخرى فكلها مسجّلة وDependabot ينبّه عنها بشكل طبيعي. هذا البند يعيدASSERT-C2فيgen_rules.pyالتحقق منه في كل إعادة تشغيل، ويرفض التوليد إذا تغيّر الرقم.
🔴 هذا القسم سجل بتاريخ 09-14، وفيه موضعان أصبحا قديمين (انظر «v0.4.0» أعلاه): ① هذه البنود الأربعة سُجّلت في القاعدة العالمية بتاريخ 2026-09-28، وDependabot سيُنبّه عنها الآن؛ ② الإصدارات التي «تُصلح كل شيء دفعة واحدة» لم تعد 2.18.10 / 2.21.6 / 3.1.6. النص الأصلي محفوظ ولم يُحذف.
أصدرت FasterXML في صفحة Security الخاصة بمستودعها 4 بنود جديدة:
| رقم | المستوى | الموضوع | الإصدار المُصلح |
|---|---|---|---|
| CVE-2026-68497 | high 7.5 | لا يوجد حد أعلى لطول الأرقام عند ربط السلاسل النصية بـ javax.xml.datatype.Duration / XMLGregorianCalendar ← حجب الخدمة عبر استهلاك المعالج (يكفي الـ mapper الافتراضي) | 2.18.10 / 2.21.6 / 2.22.2 / 3.1.6 / 3.2.2 |
| CVE-2026-19032 | medium 5.3 | إلغاء تسلسل java.nio.file.Path لا يقيّد مخطط URI، ما يسمح بتشغيل أي FileSystemProvider مسجّل | نفسه |
| CVE-2026-83557 | medium 5.6 | قائمة الرفض في PolymorphicTypeValidator الافتراضي أغفلت Comparable | نفسه |
| CVE-2026-77310 | medium 5.3 | CVE-2026-54514 لم يُصلح بشكل كامل: لا يزال فرع InetAddress يجري تحليل DNS فورًا | 2.18.9 / 2.21.5 / 2.22.1 / 3.1.5 / 3.2.1 |
اختبار فعلي بندًا بندًا:
jackson-databind:2.21.5 يعيد نتيجة فارغة.2.21.1 (بينما النطاق هو >= 2.22.0, < 2.22.1)، وقد صحّحت هذه الأداة ذلك وفق النطاق إلى 2.22.1 وطبعته عند التوليد.