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

الملخص

بحسب VulDB • 04/09/2026

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

nvmet-tcp: تحديد طول بيانات SGL قبل تخصيص مخازن أوامر الأوامر (command buffers).

تقوم الدالة `nvmet_tcp_map_data()` بقراءة قيمة `sgl->length` التي يتحكم فيها المضيف (host)، والتي تكون 32 بت، وتتحقق منها مقابل `port->inline_data_size` في حالة واصف الإزاحة داخل الكبسولة (type 0x01) قبل استخدامها. أي نوع آخر من واصفات SGL -- بما في ذلك واصف كتلة بيانات SGL للنقل غير المتداخل (non-inline transport SGL data-block descriptor، وهو النوع `(NVME_TRANSPORT_SGL_DATA_DESC << 4) | NVME_SGL_FMT_TRANSPORT_A` الذي يستخدمه المضيف الحقيقي للكتابات خارج الكبسولة) -- يتخطى هذا التحقق تماماً وينتقل مباشرة إلى:

```c cmd->req.sg = sgl_alloc(len, GFP_KERNEL, &cmd->req.sg_cnt); ```

حيث يتم أخذ `len` مباشرة من الشبكة (on the wire)، دون حدود، تصل حتى 4 جيجابايت.

لا تقوم الدالة `nvmet_req_init()` إلا بتحليل الأمر ولا تفحص أبداً قيمة `sgl->length`. كما أن دالة `nvmet_check_transfer_len()` -- وهي المكان الوحيد الآخر الذي يتم فيه التحقق من `transfer_len` -- تعمل لاحقاً، عبر استدعاء `req->execute()`، بعد حدوث التخصيص بالفعل. في حالة أمر الكتابة (write command)، يستجيب الهدف بـ R2T ويوقف تنفيذ الأمر بانتظار إرسال المضيف للبيانات؛ وإذا لم يقم المضيف (أو نظير غير مصرح له ببساطة لا يتابع الإجراء) بذلك، تبقى مخازن ذاكرة `sgl_alloc()` موجودة في الذاكرة طوال مدة حياة الأمر. بما أن NVMe/TCP لا يتطلب مصادقة إلزامية في التكوين الافتراضي، فإن أي نظير قادر على الوصول إلى بوابة الهدف وإتمام اتصال Fabrics يمكنه استغلال ذلك بأمر واحد مُصاغ بشكل متعمد (crafted)، ويمكن تكراره عبر طوابير واتصالات مختلفة لتحقيق تضخيم التأثير. هذا يمثل تخصيصاً غير محدود لذاكرة النواة يتم تشغيله بواسطة نظير عن بُعد، وغير مصرح له فعلياً.

يتم التحقق من `len` مقابل سقف NVMET_TCP_MAXH2CDATA نفسه الذي تستخدمه هذه الوحدة بالفعل لتحديد حدود بيانات H2C لكل PDU (Protocol Data Unit)، بالنسبة لجميع أنواع واصفات SGL، قبل القيام بأي عملية تخصيص. وهذا يغلق الفجوة الخاصة بالواصف غير المتداخل مع الإبقاء على التحقق الحالي والأكثر صرامة لـ `inline_data_size` في حالة الكبسولة الداخلية.

تم التحقق من التشغيل باستخدام أداة KASAN (Kernel Address Sanitizer) على إصدار v6.19: بوجود هذا التحديد، يتم رفض أمر الكتابة المُصاغ الذي يحمل طول SGL غير متداخل ومفرط الحجم قبل تشغيل `sgl_alloc()`، حيث كان الطلب نفسه في السابق يؤدي إلى تخصيص ذاكرة نواة غير محدود يقارب 256 ميغابايت (يصل حتى 4 جيجابايت) يبقى مقيّداً بالذاكرة بانتظار R2T لم يلبِّه المضيف أبداً.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

مسؤول

Linux

حجز

26/08/2026

إفشاء

04/09/2026

الاعتدال

تمت الموافقة

إدخال

VDB-398931

EPSS

0.00234

KEV

لا

النشاطات

منخفض جدًا

المصادر

Do you want to use VulDB in your project?

Use the official API to access entries easily!