
مستودع بحثي لـ CVE-2026-81000 (TUNderflow)، وهو ثغرة تجاوز سفلي صحيح في مساحة الرأس (headroom) عند الاستقبال في TUN/TAP بنواة Linux تتيح تصعيد الصلاحيات محليًا، مع إثبات مفهوم (PoC)، وتحليل السبب الجذري، وإعداد مختبر.
TUNderflow
ثغرة فساد ذاكرة في نواة لينكس ضمن النظام الفرعي لشبكات TUN/TAP، ناتجة عن حدود غير كافية على مساحة الاستقبال (receive headroom) وطفح سفلي صحيح (integer underflow) في مسار تخصيص الحزم.
هذا المستودع مخصص لأبحاث الأمن المصرّح بها، وتحليل الثغرات، وبيئات CTF، وتصحيح أخطاء النواة، والاختبار الدفاعي.
لا تستخدم كود إثبات المفهوم ضد أنظمة دون تصريح صريح.
يصف إشعار CVE المشكلة بأنها طفح سفلي صحيح يمكن أن يؤدي إلى
وضع skb->data خارج رأس skb المخصص.
توجد الثغرة في مسار الاستقبال TUN/TAP في نواة لينكس.
يستخدم الكود المتأثر مساحة الاستقبال المُهيّأة لجهاز TUN كمساحة رأس للحزمة وأيضاً عند حساب مقدار بيانات الحزمة التي يجب أن تبقى خطية.
لذلك يمكن لقيمة مساحة رأس مفرطة الحجم أن تُنشئ حساباً غير صالح في:
SKB_MAX_HEAD(align)
عندما تتجاوز القيمة المُقدَّمة رأس skb القابل للاستخدام بحجم صفحة واحدة، يمكن أن يحدث طفح سفلي في الحساب.
من الناحية المفاهيمية:
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 خام، مما يؤدي إلى طفح سفلي في الحساب المتأثر.
يحدث الفساد في منطق إدارة ذاكرة الشبكات في النواة.
تشمل العواقب المحتملة:
يُبلّغ الإفصاح العام عن الثغرة كواحدة من مجموعة ثغرات الحصول على صلاحيات الجذر محلياً في لينكس، ويذكر أن إثبات المفهوم المنشور يمكنه تحقيق تنفيذ من مستخدم محلي غير مميز إلى الجذر على الأهداف المدعومة.
قابلية الاستغلال تعتمد على البيئة وتتطلب إعداد جهاز 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
يتبعه تحويل غير مُوقَّع:
negative value
↓
size_t
↓
very large unsigned value
يمكن أن يؤثر هذا في النهاية على تخصيص skb/وضع البيانات.
يشير الوصف الرسمي تحديداً إلى أن القيمة الناتجة تلتف عند إسنادها
إلى المتغير linear من نوع size_t.
الإصلاح في المنبع هو:
447c9303942c439a117d9b76ce6d6e2116c38ee7
الالتزام:
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
البنية المختبرية الموصى بها:
┌─────────────────────────────────────────┐
│ Linux VM / Host │
│ │
│ ┌─────────┐ ┌──────────────┐ │
│ │ Netkit │────▶│ VXLAN │ │
│ └─────────┘ └──────┬───────┘ │
│ │ │
│ ┌──────▼───────┐ │
│ │ Open vSwitch │ │
│ └──────┬───────┘ │
│ │ │
│ ┌──────▼───────┐ │
│ │ TUN/TAP │ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────┘
أدوات مفيدة:
uname -a
ip link
ip tuntap
bridge link
ovs-vsctl show
dmesg -w
لتصحيح أخطاء النواة:
GDB
GDB + GEF
GDB + pwndbg
crash
objdump
readelf
pahole
تحقق من النواة قيد التشغيل:
uname -r
تحقق من إعدادات النواة:
grep CONFIG_TUN /boot/config-$(uname -r)
الإعداد المتوقع:
CONFIG_TUN=y
أو:
CONFIG_TUN=m
تحقق مما إذا كانت الوحدة محمّلة:
lsmod | grep tun
يوفر الإفصاح العام مستودع إثبات مفهوم TUNderflow مخصصاً للتحقق المُتحكَّم به.
لسير عمل بحثي آمن:
1. Build vulnerable kernel
2. Boot isolated VM
3. Configure TUN/TAP
4. Reproduce oversized headroom
5. Monitor kernel messages
6. Capture crash/corruption behavior
7. Apply upstream patch
8. Repeat test
9. Compare results
راقب النواة:
sudo dmesg -w
هدف المختبر هو إظهار الفرق بين السلوك المتأثر والمُرقَّع بدلاً من مهاجمة أنظمة الإنتاج.
CVE-2026-81000-TUNderflow/
│
├── README.md
│
├── exploit/
│ ├── poc.c
│ └── Makefile
│
├── analysis/
│ ├── root-cause.md
│ ├── kernel-path.md
│ ├── integer-underflow.md
│ └── patch-analysis.md
│
├── kernel/
│ ├── vulnerable/
│ └── patched/
│
├── lab/
│ ├── setup.sh
│ ├── cleanup.sh
│ └── topology.md
│
├── screenshots/
│
├── docs/
│ └── research-notes.md
│
└── LICENSE
التخفيف الموصى به هو تثبيت نواة تحتوي على إصلاح الأمان من المنبع أو نسخة خلفية مناسبة من التوزيعة.
لـ Debian/Kali:
sudo apt update
sudo apt full-upgrade
ثم أعد التشغيل:
sudo reboot
تحقق:
uname -r
في بيئات الإنتاج، تحقق من نواة التوزيعة المثبتة مقابل إشعار الأمان الخاص بالمورّد بدلاً من الاعتماد فقط على رقم إصدار المنبع.
على سبيل المثال، نشرت Oracle Linux تحديثات أمنية تحتوي على
إصلاح net: tun: bound receive headroom.
يحدد الإفصاح العام إصدارات النواة المستقرة التالية كأول الإصدارات التي تحتوي على إصلاحات ثغرات الحصول على صلاحيات الجذر محلياً الأربع المُفصح عنها، بما في ذلك TUNderflow:
يوضح TUNderflow عدة مبادئ مهمة لأمن النواة:
يجب عدم الوثوق أبداً بقيم إعدادات الشبكة بشكل أعمى.
يمكن للطفح السفلي الصحيح أن يحوّل حساباً يبدو غير ضار إلى بدائية تتعلق بسلامة الذاكرة.
يجب أن تبقى قيمة مساحة رأس جهاز الشبكة متسقة مع ميزانية ذاكرة skb الفعلية.
يمكن لطبقات الشبكات الافتراضية نقل بيانات وصفية غير متوقعة للحزم عبر أنظمة فرعية متعددة.
غالباً ما توفر دراسة إصلاح المنبع فهماً أوضح للثغرة الأصلية من النظر إلى الانهيار فقط.
drivers/net/tun.ctun_get_user()447c9303942c439a117d9b76ce6d6e2116c38ee7net: tun: bound receive headroom0xBlackash
أبحاث الأمن السيبراني · أمن نواة لينكس · أبحاث الثغرات · CTF
CVE-2026-81000 · TUNderflow · TUN/TAP · Linux Kernel · LPE
| الحقل | التفاصيل |
|---|
| CVE | CVE-2026-81000 |
| الاسم الرمزي | TUNderflow |
| المكوّن | Linux Kernel |
| النظام الفرعي | TUN/TAP |
| الكود المتأثر | drivers/net/tun.c |
| الدالة الأساسية | tun_get_user() |
| فئة الخطأ | طفح سفلي صحيح / وصول خارج حدود الذاكرة |
| التأثير | فساد ذاكرة النواة |
| التأثير المحتمل | تصعيد الصلاحيات محلياً |
| CVSS v3.1 | 7.8 — مرتفع |
| متجه الهجوم | محلي |
| الصلاحيات المطلوبة | منخفضة |
| تفاعل المستخدم | لا يوجد |
| الحالة | تم الترقيع |
| الخاصية الأمنية | متأثر | مُرقَّع |
|---|
| مساحة الرأس محدودة | ❌ | ✅ |
| التعامل الآمن مع مساحة الرأس الكبيرة | ❌ | ✅ |
| منع حالة الطفح السفلي | ❌ | ✅ |
| حماية وضع بيانات skb | ❌ | ✅ |
| رفض إعداد الشبكة المشوّه بأمان | ❌ | ✅ |
| الفرع | الإصدار المُصلَّح |
|---|
| 5.10 | 5.10.270 |
| 5.15 | 5.15.221 |
| 6.1 | 6.1.188 |
| 6.6 | 6.6.157 |
| 6.12 | 6.12.109 |
| 6.18 | 6.18.50 |
| 7.2 | 7.2.4 |