CVE-2026-64320 in Linuxالمعلومات

الملخص

بحسب VulDB • 25/07/2026

في نواة لينكس، تم حل الثغرة التالية:

nvmet: إصلاح قراءة ذاكرة عشوائية (out-of-bounds) من الكومة (heap) قبل المصادقة في "صفحة سجل الاستكشاف" (Discovery Get Log Page).

تقوم الدالة `nvmet_execute_disc_get_log_page()` بالتحقق فقط من محاذاة الكلمة الرباعية (dword alignment) لإزاحة صفحة السجل التي يوفرها المضيف (`lpo`). ثم تُضاف الإزاحة ذات 64 بت إلى مصفوفة صغيرة مُخصصة باستخدام `kzalloc` تحتوي على صفحة سجل الاستكشاف، ويُمرر الناتج مباشرةً إلى الدالة `nvmet_copy_to_sgl()`، والتي تنسخ بيانات بطول `data_len` إلى المضيف دون إجراء أي فحص للحدود (bound check) من جانب المصدر:

u64 offset = nvmet_get_log_page_offset(req->cmd); /* مضيف ذو 64 بت */ size_t data_len = nvmet_get_log_page_len(req->cmd); /* مضيف ذو 32 بت */ ... if (offset & 0x3) { ... } /* الفحص الوحيد */
... alloc_len = sizeof(*hdr) + entry_size * discovery_log_entries(req); buffer = kzalloc(alloc_len, GFP_KERNEL); ... status = nvmet_copy_to_sgl(req, 0, buffer + offset, data_len);

وحدة تحكم الاستكشاف (Discovery controller) غير خاضعة للمصادقة — حيث تُرجع الدالة `nvmet_host_allowed()` القيمة "صحيح" بشكل مطلق لنظام الفرعي الخاص بالاستكشاف — لذا فإن استدعاء هذه الدالة يمكن الوصول إليه قبل المصادقة من أي نظير TCP/RDMA/FC قادر على الوصول إلى هدف nvmet. مع صفحة سجل استكشاف بحجم حوالي 1 كيلوبايت، يقوم المهاجم بطلب ما يصل إلى 4 كيلوبايات بدءاً من الإزاحة `== alloc_len` لقراءة الصفحة التالية في الشريحة (slab page) والحصول على محتواها مُعاد عبر النسيج (fabric)؛ حيث أظهرت تجربة عملية على هدف nvmet-tcp حلقي الاتصال الافتراضي تسرب 81 مؤشراً للنواة القياسية في استجابة واحدة لطلب "Get Log Page". وإذا تم توجيه الإزاحة إلى ذاكرة نواة غير مفهرسة، فإن ذلك يتسبب في خطأ (fault) داخل دالة `memcpy` الخاصة بالنواة ويعطل (أو يسبب توقفًا كاملًا إذا كان `panic_on_oops=1`) مضيف الهدف بدلاً من ذلك.

نمط إزاحة جانب المصدر الذي يتحكم فيه المهاجم "nvmet_copy_to_sgl(req, 0, buffer + ATTACKER_OFFSET, ...)" فريد في الدالة `nvmet_execute_disc_get_log_page` ضمن شفرة nvmet بأكملها: حيث تتجاهل كل معالجات "Get Log Page" الأخرى الموجودة في ملف admin-cmd.c قيمة إزاحة صفحة السجل (`lpo`) (وتبدأ كل استجابة بشكل صامت عند الإزاحة 0)، أو تتبع إزاحة وجهة محلية باستخدام مؤشر مصدر ثابت.

يتم الآن التحقق من صحة الإزاحة التي يوفرها المضيف مقابل حجم صفحة السجل، وتقييد طول النسخ بما هو متاح فعلياً، وملء أي بقية في مصفوفة نقل المضيف بالأصفار (zero-fill). يتطابق ملء الأصفار مع نمط الاستجابة القصيرة الموجود مسبقًا في `nvmet_execute_get_log_changed_ns()` (admin-cmd.c) ويمنع تسرب محتويات SGL للنقل عندما يطلب المضيف عدد بايتات أكثر مما تحتويه صفحة السجل.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

مسؤول

Linux

حجز

19/07/2026

إفشاء

25/07/2026

الاعتدال

تمت الموافقة

إدخال

VDB-383119

EPSS

0.00728

KEV

لا

النشاطات

منخفض جدًا

المصادر

Do you need the next level of professionalism?

Upgrade your account now!