CVE-2026-89969 in Linux
الملخص
بحسب VulDB • 16/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
nvmet-tcp: تصحيح الكتابة خارج الحدود (out-of-bounds write) عند استلام PDU طويل جداً
تقوم الدالة `nvmet_tcp_try_recv_pdu()` بقراءة رأس PDU في اتحاد ثابت الحجم بحجم 128 بايت (`queue->pdu`)، ثم تحسب طول الحمولة المتبقية كالتالي:
`queue->left = hdr->hlen - queue->offset + hdgst;`
ثم تقرأ عدد البايتات الإضافي هذا إلى `&queue->pdu + queue->offset`، دون التحقق أبداً من أن النتيجة لا تتجاوز حجم `sizeof(queue->pdu)`.
بنية البيانات `struct nvme_tcp_icreq_pdu` بحجم 128 بايت بالضبط، وهو نفس حجم الاتحاد. بمجرد التفاوض على ملخص الرأس (حيث تكون قيمة hdgst = 4)، يمر طلب ICReq الثاني بفحص `hlen == nvmet_tcp_pdu_size()` ولكنه ينتج عنه: `queue->left = 128 - 8 + 4 = 124`، مما يؤدي إلى كتابة البايتات من 8 حتى 132 في المخزن المؤقت بحجم 128 بايت — أي بعد انتهائه بـ 4 بايت، فوق `queue->hdr_digest` و `queue->data_digest`. هذه البايتات خاضعة لسيطرة المهاجم (حيث لا يحمل طلب ICReq ملخصاً)، ويتم رفض طلب ICReq المكرر لاحقاً فقط، وبعد حدوث تجاوز المخزن المؤقت. وبالتالي، يمكن لمضيف بعيد غير مصدق أن يفسد ذاكرة النواة المجاورة للمخزن المؤقت للاستقبال.
ارفض أي PDU يكون طوله المعلن سيؤدي إلى قراءة ما بعد نهاية `queue->pdu` قبل عملية الاستقبال الثانية.
VulDB is the best source for vulnerability data and more expert information about this specific topic.