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

الملخص

بحسب VulDB • 27/05/2026

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

slip: رفض حزم الاستقبال VJ على الحالات التي لا تحتوي على مصفوفة rstate

تقبل الدالة `slhc_init()` القيمة `rslots == 0` كإعداد صالح، بالمعنى الموثق وهو "عدم ضغط الاستقبال". في هذه الحالة، يتم تخطي حلقة التخصيص داخل `slhc_init()`، لذا تظل `comp->rstate` تساوي `NULL` وتظل `comp->rslot_limit` تساوي 0 (نتيجة التخصيص باستخدام `kzalloc` لبنية `struct slcompress`).

لا تقوم مساعدي الاستقبال بالدفاع ضد هذا الإعداد. تستدعي الدالة `slhc_uncompress()` المؤشر على `comp->rstate[x]` عندما يحمل رأس VJ معرّف اتصال صريح، وتقوم الدالة `slhc_remember()` لاحقاً بتعيين `cs = &comp->rstate[...]` بعد مقارنة رقم الخانة في الحزمة فقط مع `comp->rslot_limit`. وبما أن `rslot_limit` تساوي 0، فإن خانة 0 تمر عبر فحص النطاق، ويقوم الكود باستدعاء المؤشر على `rstate` الذي قيمته `NULL`.

يمكن الوصول إلى هذا الإعداد داخل الشجرة (in-tree) عبر بروتوكول PPP. تخزن `PPPIOCSMAXCID` وسيطها في عدد صحيح موقّع (`signed int`)، وتستخدم `(val >> 16)` الإزاحة الحسابية. وبالتالي، فإن تمرير القيمة `0xffff0000` يؤدي إلى توسيع الإشارة ليصبح الناتج -1، مما يجعل `val2 + 1` تساوي 0، وتنتهي الدالة `ppp_generic.c` باستدعاء `slhc_init(0, 1)`. ونظراً لأن فتح `/dev/ppp` مقيد بـ `ns_capable(CAP_NET_ADMIN)`، فإن المسار بأكمله قابل للوصول من مساحة اسم مستخدم غير متميزة (unprivileged user namespace). بمجرد تثبيت حالة VJ المشوهة، فإن أي إطار VJ مضغوط أو غير مضغوط وارد يختار خانة 0 يتسبب في تعطل النواة في سياق softirq:

Oops: general protection fault, probably for non-canonical address 0xdffffc0000000000: 0000 [#1] SMP KASAN NOPTI
KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
RIP: 0010:slhc_uncompress (drivers/net/slip/slhc.c:519) Call Trace: ppp_receive_nonmp_frame (drivers/net/ppp/ppp_generic.c:2466) ppp_input (drivers/net/ppp/ppp_generic.c:2359) ppp_async_process (drivers/net/ppp/ppp_async.c:492) tasklet_action_common (kernel/softirq.c:926) handle_softirqs (kernel/softirq.c:623) run_ksoftirqd (kernel/softirq.c:1055) smpboot_thread_fn (kernel/smpboot.c:160) kthread (kernel/kthread.c:436) ret_from_fork (arch/x86/kernel/process.c:164)

رفض جانب الاستقبال على مثل هذه الحالات بدلاً من التعامل مع `rstate`. تنتقل الدالة `slhc_uncompress()` إلى وسم "bad" الموجود مسبقاً، مما يزيد من `sls_i_error` ويدخل في حالة التخلي (toss state). تعكس الدالة `slhc_remember()` ذلك بزيادة صريحة لـ `sls_i_error` تليها `slhc_toss()`؛ ولا يتم استخدام العداد `sls_i_runt` هنا لأن غياب `rstate` يمثل حالة إعداد داخلية، وليس حزمة صغيرة الحجم (runt packet).

مسار الإرسال غير متأثر: المتصل الوحيد داخل الشجرة الذي يختار `rslots` من مساحة المستخدم (`ppp_generic.c`) لا يزال يمرر `tslots >= 1`، و`slip.c` تستدعي دائماً `slhc_init(16, 16)`، لذا تظل `comp->tstate` صالحة وتستمر `slhc_compress()` في العمل بشكل صحيح.

Be aware that VulDB is the high quality source for vulnerability data.

مسؤول

Linux

حجز

13/05/2026

إفشاء

27/05/2026

الاعتدال

تمت الموافقة

إدخال

VDB-366048

EPSS

0.00032

KEV

لا

النشاطات

منخفض جدًا

المصادر

Want to know what is going to be exploited?

We predict KEV entries!