
مستودع بحثي لـ CVE-2026-68121، وهو ثغرة use-after-free في نواة Linux ضمن PPPoE في الدالة pppoe_sendmsg() تتيح تصعيد الصلاحيات محليًا، مع PoC وتحليل السبب الجذري وإعداد مختبر.
PPPoEject
ثغرة إفساد الذاكرة في نواة Linux ضمن مسار إرسال PPPoE،
ناتجة عن مؤشر قديم إلى ترويسة sk_buff بعد أن يعيد استدعاء ترويسة الجهاز
تخصيص رأس skb.
هذا المستودع مخصص للبحث الأمني المصرح به، وتحليل ثغرات النواة، وبيئات CTF، والاختبار الدفاعي فقط.
لا تنفذ كود إثبات المفهوم ضد أنظمة دون تصريح صريح.
| الحقل | التفاصيل |
|---|---|
| CVE | CVE-2026-68121 |
| الاسم الرمزي | PPPoEject |
| المكوّن | Linux Kernel |
| النظام الفرعي | PPPoE / Networking |
| الملف المتأثر | drivers/net/ppp/pppoe.c |
| الدالة الأساسية | pppoe_sendmsg() |
| فئة الخطأ | Use-After-Free |
| التأثير | إفساد ذاكرة النواة |
| التأثير المحتمل | تصعيد الصلاحيات المحلية |
| CVSS v3.1 | 7.8 — High |
| متجه الهجوم | محلي |
| تعقيد الهجوم | منخفض |
| الصلاحيات المطلوبة | منخفضة |
| تفاعل المستخدم | لا شيء |
| الحالة | تم الترقيع |
يحدد سجل CVE الثغرة على أنها مؤشر ترويسة PPPoE قديم قد
يصبح غير صالح عندما يعيد dev_hard_header() تخصيص رأس skb.
توجد الثغرة في:
drivers/net/ppp/pppoe.c
داخل:
pppoe_sendmsg()
التسلسل القابل للاستغلال من الناحية المفاهيمية هو:
pppoe_sendmsg()
│
▼
Save PPPoE header pointer
│
▼
dev_hard_header()
│
▼
skb head may be reallocated
│
▼
Old pointer becomes stale
│
▼
PPPoE writes through stale pointer
│
▼
Use-After-Free
│
▼
Kernel memory corruption
يسمح كود الشبكات في Linux لعمليات استدعاء رأس الجهاز (device header callbacks) بإعادة تخصيص رأس sk_buff. لذلك لا يمكن إعادة استخدام مؤشر إلى الرأس القديم بأمان بعد عودة dev_hard_header().
المشكلة الأساسية هي انتهاك عمر الكائن (lifetime violation).
يحصل pppoe_sendmsg() على مؤشر إلى رأس PPPoE قبل استدعاء:
dev_hard_header()
ومع ذلك، فإن دالة الاستدعاء تلك يمكن أن تتسبب في تحرك رأس skb.
من الناحية المفاهيمية:
Before callback:
skb
┌──────────────────────────────┐
│ Ethernet │ PPPoE │ Payload │
└──────────┴───────┴───────────┘
▲
│
stale pointer
After skb expansion:
old skb head ──X──► freed
new skb head
┌────────────────────────────────────┐
│ Ethernet │ PPPoE │ Payload │
└──────────┴───────┴─────────────────┘
▲
│
valid location
المؤشر القديم لا يزال يشير إلى التخصيص المحرَّر.
عندما يكتب PPPoE لاحقًا الترويسة عبر ذلك المؤشر، يُجري النواة عملية كتابة بعد الاستخدام (use-after-free write).
يتضمن التفعيل الموثَّق حالة تسابق (race) حول copy_from_user() وتغييرات
في عمليات ترويسة جهاز team.
أحد التسلسلات الموصوفة هو:
PPPoE sendmsg()
│
▼
copy_from_user() blocks
│
│
├───────────────┐
│ │
▼ ▼
Team device changes First non-Ethernet
header operations port is added
│
▼
Delegated GRE callback
│
▼
skb head expansion
│ │
└───────────────┘
│
▼
stale PPPoE pointer
│
▼
use-after-free write
يشير سجل CVE إلى أن هذا يمكن أن يحدث عندما تتم إضافة أول منفذ غير إيثرنت إلى جهاز team فارغ ويقوم callback رأس GRE المفوَّض بتوسيع رأس skb.
يمكن أن تؤدي الثغرة إلى:
متجه CVSS المنشور الخاص بـ CVE هو:
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
بدرجة أساسية 7.8 عالية.
المكوّنات ذات الصلة هي:
PF_PPPOX / PPPoE socket
│
▼
pppoe_sendmsg()
│
▼
sk_buff (skb)
│
▼
dev_hard_header()
│
▼
Network device header callback
│
▼
Potential skb head expansion
│
▼
PPPoE stale header pointer
│
▼
UAF write
الكود القابل للاستغلال ليس مجرد محلل حزم PPPoE عام؛ الشرط الحرج هو التفاعل بين إرسال مقبس PPPoE وإعادة تخصيص رأس skb الديناميكي.
عنوان الإصلاح في المنبع هو:
pppoe: reload header pointer after dev_hard_header()
يُعيد الإصلاح تحميل ترويسة PPPoE عبر إزاحة ترويسة الشبكة الخاصة بـ skb بعد إنشاء ترويسة الجهاز.
الخاصية المهمة هي:
Before:
header pointer
│
▼
dev_hard_header()
│
▼
skb moves
│
▼
pointer = stale ❌
After:
dev_hard_header()
│
▼
skb may move
│
▼
reload header using skb offset
│
▼
pointer = valid ✅
pskb_expand_head() يحدّث إزاحة skb ذات الصلة عند نقل رأس skb، مما يجعل البحث المعتمد على الإزاحة آمنًا بعد إعادة التخصيص.
| خاصية الأمان | معرّضة للثغرة | مُرقّعة |
|---|---|---|
| مؤشر الرأس محفوظ قبل الاستدعاء الراجع | ✅ | — |
| يمكن أن يتحرك رأس skb | ✅ | ✅ |
| تحديث المؤشر بعد الاستدعاء الراجع | ❌ | ✅ |
| إلغاء الإشارة إلى مؤشر قديم | محتمل | مُمنع |
| كتابة بعد التحرير (use-after-free) | محتمل | مُخفف |
| إفساد ذاكرة النواة | محتمل | مُخفف |
يمكن هيكلة مختبر مُتحكَّم فيه على النحو التالي: