
مستودع بحثي لـ CVE-2026-81000 (TUNderflow)، وهو ثغرة تجاوز سفلي صحيح في مساحة الرأس (headroom) عند الاستقبال في TUN/TAP بنواة Linux تتيح تصعيد الصلاحيات محليًا، مع إثبات مفهوم (PoC)، وتحليل السبب الجذري، وإعداد مختبر.
TUNderflow
ثغرة فساد ذاكرة في نواة لينكس ضمن النظام الفرعي لشبكات TUN/TAP، ناتجة عن حدود غير كافية على مساحة الرأس المستقبَلة (receive headroom) وعن تجاوز سفلي (integer underflow) في مسار تخصيص الحزم.
هذا المستودع مخصص للبحث الأمني المصرَّح به، وتحليل الثغرات، وبيئات CTF، وتنقيح النواة، والاختبار الدفاعي.
لا تستخدم كود إثبات المفهوم ضد أنظمة دون تصريح صريح.
| الحقل | التفاصيل |
|---|---|
| CVE | CVE-2026-81000 |
| الاسم الرمزي | TUNderflow |
| المكوّن | Linux Kernel |
| النظام الفرعي | TUN/TAP |
| الكود المتأثر | drivers/net/tun.c |
| الدالة الأساسية | tun_get_user() |
| فئة الخطأ | تجاوز سفلي صحيح / وصول خارج حدود الذاكرة |
| التأثير | فساد ذاكرة النواة |
| التأثير المحتمل | تصعيد الصلاحيات محليًا |
| CVSS v3.1 | 7.8 — High |
| متجه الهجوم | محلي |
| الصلاحيات المطلوبة | منخفضة |
| تفاعل المستخدم | لا يوجد |
| الحالة | تم الترقيع |
يصف إشعار CVE المشكلة بأنها تجاوز سفلي صحيح يمكن أن يتسبب في
وضع skb->data خارج رأس skb المخصص.
توجد الثغرة في مسار الاستقبال في TUN/TAP بنواة لينكس.
يستخدم الكود المتأثر مساحة الرأس المستقبَلة المُهيأة لجهاز TUN كمساحة رأس للحزمة وكأساس عند حساب مقدار بيانات الحزمة التي يجب أن تبقى خطية.
وبالتالي يمكن لقيمة مساحة رأس مفرطة الحجم أن تُنشئ حسابًا غير صالح في:
SKB_MAX_HEAD(align)
عندما تتجاوز القيمة المُقدَّمة رأس skb القابل للاستخدام في صفحة واحدة، فقد يحدث underflow في الحساب.
من الناحية المفاهيمية:
Oversized receive headroom
│
▼
SKB_MAX_HEAD()
│
▼
Integer underflow
│
▼
Negative value
│
▼
size_t wrap
│
▼
Invalid skb data placement
│
▼
Kernel memory corruption
التنفيذ القابل للاستغلال موجود في:
drivers/net/tun.c
مع كون tun_get_user() محوريًا في المسار القابل للاستغلال.
المشكلة الأساسية هي مساحة رأس استقبال TUN غير المقيّدة بشكل كافٍ.
يمكن للنواة استقبال طلب مساحة رأس أكبر من الحجم المسموح عبر مسارات أجهزة الشبكة التي تنقل القيمة إلى TUN/TAP.
تصبح الثغرة مثيرة للاهتمام بشكل خاص عندما يتسبب إعداد شبكة افتراضية معقد في وصول قيمة مساحة رأس كبيرة إلى جهاز TUN.
يصف الإفصاح العام سيناريو يتضمن:
Netkit
│
▼
VXLAN
│
▼
Open vSwitch
│
▼
TUN
يمكن لتهيئة نموذجية أن تنقل ما يقارب 4160 بايت من الهامش إلى منفذ TUN خام، مما يتسبب في حدوث underflow في الحسابات المعرّضة للخطر.
يحدث التلف في منطق إدارة ذاكرة الشبكات في النواة.
تشمل العواقب المحتملة ما يلي:
يصنّف الإفصاح العام الثغرة ضمن مجموعة من ثغرات الحصول على صلاحيات الجذر المحلي في Linux، ويذكر أن PoC المنشور يمكنه تحقيق تنفيذ من مستخدم محلي غير مميّز إلى الجذر على الأهداف المدعومة.
تعتمد قابلية الاستغلال على البيئة وتتطلب تهيئة جهاز TUN/الشبكة ذات الصلة والوظائف الداعمة.
ATTACKER
│
▼
Oversized network headroom
│
▼
Virtual network device
│
▼
Open vSwitch
│
▼
TUN/TAP
│
▼
tun_get_user()
│
▼
SKB_MAX_HEAD(align)
│
▼
Integer underflow
│
▼
size_t wraparound
│
▼
Invalid skb->data offset
│
▼
Kernel memory corruption
المكوّنات المهمة هي:
drivers/net/tun.c
│
├── tun_set_headroom()
│
├── tun_get_user()
│
└── tun_alloc_skb()
يمكن تبسيط العلاقة القابلة للاستغلال على النحو التالي:
tun->align
│
├── skb headroom
│
└── linear-data calculation
استخدام القيمة المفرطة الحجم نفسها في كلا الحسابين يُنشئ علاقة غير آمنة بين المساحة الإضافية المطلوبة وميزانية رأس skb الفعلية.
يمكن تمثيل الخاصية الأمنية الحرجة من الناحية المفاهيمية على النحو التالي:
usable_head < requested_headroom
وهو ما قد يؤدي إلى:
SKB_MAX_HEAD(align) < 0
followed by an unsigned conversion:
negative value
↓
size_t
↓
very large unsigned value
يمكن أن يؤثر هذا في النهاية على تخصيص skb/موضع البيانات.
يشير الوصف الرسمي تحديدًا إلى أن القيمة الناتجة تلتف (wraps) عند
تعيينها إلى المتغير size_t المسمى linear.
الإصلاح في المنبع هو:
447c9303942c439a117d9b76ce6d6e2116c38ee7
Commit:
net: tun: bound receive headroom
يعمل الإصلاح على تقييد المساحة الاحتياطية التي يخزّنها TUN مقابل ميزانية المساحة الاحتياطية المتاحة لـ skb ذات الصفحة الواحدة وأكبر إزاحة صالحة لرأس skb ذات 16 بت. كما يضمن توفّر بيانات خطية كافية لمعالجة TUN وTAP الخام.
User / network device
│
▼
Large headroom
│
▼
tun->align
│
▼
Unsafe arithmetic
│
▼
Potential OOB access
User / network device
│
▼
Large headroom
│
▼
Bounded headroom
│
▼
Safe skb calculation
│
▼
Normal packet processing
| خاصية الأمان | عرضة | مُصحّحة |
|---|---|---|
| المساحة المتاحة محدودة | ❌ | ✅ |
| المساحة المتاحة الكبيرة تُعالَج بأمان | ❌ | ✅ |
| حالة التدفق الناقص (underflow) مُمنَعة | ❌ | ✅ |
| موضع بيانات skb محمي | ❌ | ✅ |
| إعداد الشبكة المشوّه يُرفَض بأمان | ❌ | ✅ |
البنية المختبرية الموصى بها: