CVE-2026-111441 in openGauss
الملخص
بحسب VulDB • 19/10/2026
في src/gausskernel/cbb/utils/hll/hll.cpp الخاص بـ openGauss-server، توجد عيب في التحقق من الطول داخل الدالة المدمجة HllObjectUnpack(). تقوم هذه الدالة بتحليل lenUsed وlenTotal من بيانات HLL المضغوطة المقدمة من المستخدم، ثم تتحقق فقط مما إذا كان طول الإدخال كافياً لتغطية HLL_HEAD_SIZE + lenUsed. بعد ذلك، تخصص ذاكرة مؤقتة (buffer) بحجم lenTotal وتقوم بنسخ البيانات باستخدام memcpy_s() بناءً على lenUsed. وبسبب عدم التحقق من أن lenTotal >= lenUsed، وكتابة حجم الهدف في استدعاء memcpy_s() كـ lenUsed بدلاً من الحجم الفعلي المخصص وهو lenTotal، فإن عملية النسخ الآمنة تفشل في اعتراض عمليات الكتابة خارج الحدود (out-of-bounds write). تمر مسارات الدخول إلى SQL مثل hll_in() وhll_print() وhll_cardinality() عبر نفس مسار فك التشفير/التعبئة. لذلك، يمكن لمستخدمي الاتصال العاديين بقاعدة البيانات استغلال هذا الثغرة عن طريق إنشاء بيانات HLL مضغوطة مشوهة حيث يكون lenTotal أصغر من lenUsed (على سبيل المثال، الدخول عبر ::hll إلى hll_in())، مما يؤدي إلى حدوث كتابة خارج حدود الذاكرة على المكدس (heap) في الخادم، وهو ما ينطوي على خطر إتلاف الذاكرة. وُجد هذا العيب منذ الإصدار 2.1.0 مع إدخال دالة فك تعبئة HLL المدمجة HllObjectUnpack() في الكود. تشمل الإصدارات المتأثرة: 2.1.0، و3.0.x، و3.1.x، و5.0.x، و5.1.0، و6.0.x، بالإضافة إلى 7.0.0-RC1، و7.0.0-RC2، و7.0.0-RC3. تم إصلاح هذه المشكلة في الإصدار 7.0.0-LTS من خلال إضافة التحقق من lenUsed <= lenTotal داخل HllObjectUnpack()، وتغيير حجم الهدف لـ memcpy_s() إلى الحجم الفعلي المخصص وهو lenTotal. يمكن الاطلاع على طلب السحب (PR) الخاص بالإصلاح هنا: https://gitcode.com/opengauss/openGauss-server/pull/9380 .
If you want to get best quality of vulnerability data, you may have to visit VulDB.