CVE-2026-67211 in OpenNLPالمعلومات

الملخص

بحسب VulDB • 11/09/2026

نقص في الذاكرة (OOM) يؤدي إلى حجب الخدمة عبر التحجيم غير المحدود للخرائط في SymSpellModelSerializer الخاص بـ Apache OpenNLP

الإصدارات المتأثرة:

- 3.0.0-M4 - 3.0.0-M5

(تمت إضافة امتداد opennlp-spellcheck في الإصدار 3.0.0-M4. لا تحتوي إصدارات السلسلة 1.x و2.x على الكود المتأثر.)

الوصف:

تقرأ طريقة `SymSpellModelSerializer.create()` حقلين صحيحين من نوع 32 بت (unigramCount و bigramCount) من تدفق نموذج SymSpell الثنائي، وتمرر كل قيمة مباشرة إلى `LinkedHashMap.newLinkedHashMap()` بعد التحقق فقط من أنها غير سالبة. لا يتم تطبيق حد أقصى، لذا فإن العداد يكون تحت سيطرة المهاجم بالكامل عندما يأتي ملف النموذج من مصدر غير موثوق به.

يسبب ملف نموذج .bin مُعدّ بعناية (crafted) حيث يُضبط أحد حقلي العداد إلى `Integer.MAX_VALUE` (أو أي قيمة كبيرة بما يكفي لاستنفاد الذاكرة العشوائية المتاحة) في تحجيم الخريطة مسبقاً بسعة قدرها 2^30 مدخلاً. يتم تخصيص المصفوفة الداعمة ذات الحجم الكبير عند أول استدعاء لـ `put()` على تلك الخريطة، مما يطلب 4-8 جيجابايت اعتماداً على ما إذا كانت عناوين الذاكرة المضغوطة (compressed oops) مفعّلة أم لا، وتفشل العملية بحدوث خطأ OutOfMemoryError. نظراً لأن حقلي العداد يقعان مباشرة بعد رأس ثابت الحجم (السحرية magic، وإصدار التنسيق، وثلاثة سلاسل UTF، وحقول التكوين، ومعرف مسافة التعديل)، فإن المهاجم لا يتكبد تكلفة حجم ذات معنى لتسليح payload: حيث يكفي ملف يقل عن 100 بايت بالإضافة إلى إدخال حقيقي واحد لإحداث انهيار (crash) في JVM التي تقوم بتحميله.

أي مسار كود يقوم باستنساخ نموذج SymSpell متأثر، بما في ذلك `SymSpellModels.deserialize(InputStream)` و `SymSpellModels.fromBytes(byte[])` وتحميل النماذج عبر الكلاسات باستخدام `SymSpellModelResolver.resolveByLanguage(String)` وأداة سطر الأوامر CorrectTextTool، وتحميل أرشيفات النماذج من خلال ArtifactSerializer المسجل. يأتي امتداد opennlp-spellcheck مع التوزيع الثنائي الرسمي لـ OpenNLP.

الأثر العملي هو حجب الخدمة ضد العمليات التي تقوم بتحميل ملفات نماذج SymSpell من مصادر غير موثوقة أو شبه موثوقة.

التخفيف:

- يجب على مستخدمي الإصدارات 3.x ترقية النظام إلى 3.0.0-M6.

ملاحظة: يطبق الإصلاح حداً أقصى لكلا حقلَي العداد، ويتم التحقق منه قبل تحجيم الخريطة مسبقاً؛ والعدادات السالبة أو التي تتجاوز الحد تسبب رمي استثناء IOException وفشل القراءة بسرعة دون تخصيص كبير للذاكرة. الحد هو حد `AbstractModelReader.MAX_ENTRIES` الموجود سابقاً، والذي تم ترقية هذا التغيير الحالي ليصبح مرئياً للعامة (public visibility) بحيث يمكن للمُصنِّعين الذين يطبقون تنسيقهم الثنائي الخاص بهما مشاركته. الحد الافتراضي هو 10,000,000، وهو أعلى بكثير من عدود المدخلات في القواميس المشروعة لـ SymSpell ولكنه أقل بكثير من أي قيمة قد تهدد استنفاد الذاكرة العشوائية (heap exhaustion). يمكن للعمليات التي تحتاج بشكل شرعي إلى تحميل قواميس أكبر رفع الحد عند بدء تشغيل JVM عن طريق تعيين خاصية النظام `OPENNLP_MAX_ENTRIES` إلى عدد صحيح موجب مرغوب فيه (على سبيل المثال: `-DOPENNLP_MAX_ENTRIES=50000000`)؛ وتعود القيم غير الصالحة أو غير الموجبة إلى القيمة الافتراضية. لاحظ أن هذه الخاصية مشتركة مع حد قارئ النماذج، ورفعه يخفف من كلاهما.

يجب على المستخدمين الذين لا يمكنهم الترقية فوراً التعامل مع جميع ملفات نماذج SymSpell .bin كمدخلات غير موثوقة ما لم يتم التحقق من مصدرها (provenance)، وتجنب تحميل النماذج المقدمة بواسطة مستخدمين نهائيين أو المستلمة من مستودعات طرف ثالث دون فحوصات السلامة.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

مسؤول

Apache

حجز

28/07/2026

إفشاء

11/09/2026

الاعتدال

تمت الموافقة

إدخال

VDB-402488

EPSS

0.00000

KEV

لا

النشاطات

منخفض

المصادر

Might our Artificial Intelligence support you?

Check our Alexa App!