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

الملخص

بحسب VulDB • 25/09/2026

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

ppp_async: إسقاط الإطار الخطأ بدلاً من إعادة تعيين مساحة الرأس (headroom) الخاصة به

تقوم الدالة `ppp_receive_nonmp_frame()` بإضافة وسم اتجاه مكون من بايتين قبل تشغيل مرشحات BPF للنقل/النشاط:

*(__be16 *)skb_push(skb, 2) = htons(PPP_FILTER_INBOUND_TAG);

لا يضمن أي جزء في مسار الاستلام وجود هذين البايتين من مساحة الرأس (headroom). يعيد مسار خطأ الإطار في دالة `process_input_packet()` الخاصة بـ ppp_async تعيين مساحة رأس حزمة skb المعاد استخدامها إلى الصفر، بينما يدعي استعادتها إلى حالة الحزم المخصصة حديثاً - لكن حزمة skb الطازجة القادمة من `dev_alloc_skb()` تحمل قيمة NET_SKB_PAD:

err: if (skb) {
/* جعل skb يبدو كمخصص حديثاً */ skb_trim(skb, 0); skb_reserve(skb, - skb_headroom(skb)); }

لا يزال المتغير `ap->rpkt` يشير إلى حزمة skb هذه، لذا يتم إعادة تجميع الإطار التالي فيها دون أي مساحة رأس على الإطلاق. إذا أرسل نظير (peer) إطاراً يحتوي على خطأ في FCS متبوعاً بإطار يبدأ بـ ff 03، فسيتم ترك بايت واحد فقط من مساحة الرأس بحلول الوقت الذي يُضاف فيه وسم المرشح، مما يضعه بمسافة بايت واحد أسفل `skb->head`:

skbuff: skb_under_panic: len:49 put:2 head:ffff888003c10000 data:ffff888003c0ffff tail:0x30 end:0x640 dev:<NULL> kernel BUG at net/core/skbuff.c:214! RIP: 0010:skb_panic+0x13e/0x230 Call Trace: skb_push+0xbd/0x100 ppp_receive_nonmp_frame+0x48a/0x1d10 ppp_input+0x4e9/0x2f80 ppp_async_process+0x2a/0xe0 tasklet_action_common+0x20f/0x8a0 handle_softirqs+0x18e/0x590 Kernel panic - not syncing: Fatal exception in interrupt

إن تصفير مساحة الرأس ينتهك ضمان NET_SKB_PAD الذي توفره `dev_alloc_skb()` لباقي مسار الاستلام. بالإضافة إلى حالة الفشل (panic) الخاصة بالمرشح المذكورة أعلاه، عندما يكون ضغط CCP مفعلاً، تقوم الدالة `ppp_decompress_frame()` بتسليم القيمة `skb->data - 2` إلى `->decompress()/->incomp()`، والتي تقرأ بعد ذلك خارج الحدود قبل `skb->head` لنفس السبب.

بدلاً من استعادة مساحة الرأس، يتم إسقاط الإطار الخطأ - كما تفعل ppp_synctty بالفعل في مسار الخطأ الخاص بها - وتصفير المتغير `ap->rpkt` بحيث يتم إعادة تجميع الإطار التالي في حزمة skb طازجة تحتوي على مساحة رأس سليمة. هذا النهج أبسط ويصحح كل من حالة الفشل (under-panic) الخاصة بالمرشح وقراءة البيانات خارج الحدود الخاصة بـ CCP.

كانت النسخة الأولى (V1) من هذه التصحيحية تهدف إلى توفير مساحة في `ppp_receive_nonmp_frame()` باستخدام `skb_cow_head()`؛ وقد أشار إريك (Eric) إلى أن إصلاح السبب الجذري في طبقة النقل هو النهج الصحيح.

تم اكتشاف الثغرة عن طريق الفحص العشوائي (fuzzing) لمسار استقبال PPP بنظير متحور على pty؛ وهي حالة مثيرة للاهتمام من نوع DoS (هجوم حجب الخدمة): حيث يقوم المسؤول بتكوين PPP، ويقوم النظير بإرسال إطارين يتسببان في تعطل النظام. يؤدي مكرر الثغرة (repro-ppp-skb.c، غير متغير عن النسخة V1) إلى حدوث حالة فشل (panic) خلال ثانية تقريباً، ويعود بشكل نظيف بعد تطبيق هذا التصحيح.

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

مسؤول

Linux

حجز

25/09/2026

إفشاء

25/09/2026

الاعتدال

تمت الموافقة

إدخال

VDB-409981

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Do you know our Splunk app?

Download it now for free!