CVE-2026-89407 in jackson-coreالمعلومات

الملخص

بحسب VulDB • 22/09/2026

تقوم الدالة `NumberInput.looksLikeValidNumber()` في مكتبة FasterXML jackson-core (الإصدارات السابقة لـ 2.17.x) بالتحقق المسبق من "الأرقام المُحوَّلة إلى نصوص" باستخدام تعبيرين منتظمين: PATTERN_FLOAT ([+-]?[0-9]*[\.]?[0-9]+([eE][+-]?[0-9]+)?)، الموجود منذ الإصدار 2.17.0، وPATTERN_FLOAT_TRAILING_DOT، الذي أُضيف في الإصدار 2.17.2. يضع PATTERN_FLOAT كميات (quantifiers) متجاورة على نفس فئة الأحرف -- وهي سلسلة اختيارية من [0-9]*، تليها نقطة اختيارية، ثم سلسلة مطلوبة من [0-9]+ -- مما يؤدي إلى قيام محرك التراجع في Java بإعادة محاولة كل نقطة تقسيم ممكنة لسلسلة الأرقام عندما يفشل الإدخال النهائي في المطابقة.

وبالتالي، فإن تكلفة المطابقة تنمو مع مربع طول المدخلات.

يمكن لمهاجم قادر على تزويد التطبيق ببيانات JSON يتم فك تسلسلها (deserialization) إلى نوع رقمي مستهدف الوصول إلى هذه الطريقة من خلال التحويل الافتراضي للنصوص إلى أرقام في jackson-databind (StdDeserializer و NumberDeserializers لأنواع BigDecimal، BigInteger، Double و Float).

نظراً لأن الحد الأقصى لطول السلسلة في StreamReadConstraints.maxStringLength افتراضياً هو 20,000,000 حرف، فلا يوجد قيد يحد من المدخلات قبل وصولها إلى التعبير المنتظم.

أكدت الاختبارات التي أجراها المُبلِّغ نمو التعقيد بمعدل O(n^2) عبر خمسة تضاعفات متتالية لحجم الإدخال، حيث استهلكت سلسلة واحدة بطول 160,000 حرف حوالي 74 ثانية في استدعاء واحد؛ وبالتالي يمكن لعدد صغير من الطلبات المتزامنة ذات حجم جسم عادي أن تستنفد مجموعة خيوط معالجة الطلبات (request-handling thread pool) الخاصة بالخادم.

لا توجد الطريقة المتأثرة قبل الإصدار 2.17.0، لذا فإن إصدارات 2.16.x والإصدارات الأقدم غير متأثرة.

يستبدل الإصلاح كلا التعبيرين المنتظمين بفحص أحادي المرور مُنفَّذ يدوياً (hand-rolled single-pass scan).

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

مسؤول

HeroDevs

حجز

11/09/2026

إفشاء

22/09/2026

الاعتدال

تمت الموافقة

إدخال

VDB-408470

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Want to know what is going to be exploited?

We predict KEV entries!