
إثبات مفهوم للمحاكاة فقط لـ CVE-2026-99999، وهو خلل في التحقق من صحة csum_start في virtio-net IPv4 ضمن نواة Linux يتيح الكشف عن ذاكرة الكومة من الضيف إلى المضيف.
تسريب معلومات من نواة لينكس عبر بيانات تعريف المجموع الاختباري المشوّهة في virtio-net.
CVSS 9.3 حرج | CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
اكتُشف بواسطة Paulos | CNA: kernel.org | تاريخ النشر: 2026-10-15
⚠️ هذا إثبات مفهوم تعليمي / للتحقق. يعمل في وضع --simulate فقط
(لا يوجد إدخال/إخراج شبكي، ولا حاجة لصلاحيات الجذر). يوضّح سلسلة الهجوم محليًا
دون استغلال أي نظام حي.
يمكن لجهاز افتراضي ضيف إرسال إطار virtio-net يحمل فيه virtio_net_hdr
القيمة csum_start == 0 — أي يشير إلى ترويسة IPv4 بدلًا من ترويسة
النقل. أثناء تقسيم GSO على المضيف، تعيد skb_checksum_help() حساب
المجموع الاختباري الذي يغطي [csum_start, csum_start + csum_offset + 2) وتكتب
النتيجة مرة أخرى إلى csum_start + csum_offset.
عندما يكون csum_start = 0 وcsum_offset = 0، تهبط الكتابة على بايت IHL
(إزاحة IP 0)، فتُفسده من 0x45 (IHL 5 → 20 بايت) إلى 0x4F
(IHL 15 → 60 بايت). عندها تقرأ ip_do_fragment() في النواة 60 بايت من
ترويسة IP بينما لا يوجد سوى 20 بايت — فتسحب ~32–64 بايت من ذاكرة الكومة
المجاورة في نواة المضيف إلى كل قطعة صادرة.
التأثير: تسريب مستمر لذاكرة كومة نواة المضيف من الضيف إلى المضيف.
سطح الهجوم: مضيفات KVM/QEMU المزوّدة ببطاقات شبكة virtio-net مع تفعيل جسر TAP، أو أي مسار اتصال من الجهاز الافتراضي إلى المضيف حيث يعالج المضيف إطارات virtio-net عبر GSO.
| الإزاحة | الحقل | csum_offset=0 يُفسد | csum_offset=6 يُفسد |
|---|---|---|---|
| 0 | الإصدار + IHL | ✅ بايت IHL | |
| 1 | TOS | ||
| 2–3 | الطول الإجمالي | ||
| 4–5 | المعرّف | ||
| 6–7 | الأعلام / إزاحة القطعة | ✅ الأعلام/إزاحة القطعة (الأدنى) | |
| 8 | TTL | ||
| 9 | البروتوكول | ||
| 10–11 | المجموع الاختباري للترويسة | ||
| 12–15 | عنوان IP المصدر | ||
| 16–19 | عنوان IP الوجهة |
Guest VM
→ constructs virtio_net_hdr with csum_start=0 (pointing at IP header)
→ sends frame through virtio-net to host
Host kernel (GSO segmentation path)
→ skb_checksum_help() called
→ writes checksum result to csum_start + csum_offset
→ if csum_offset=0: writes IHL byte (0x45 → 0x4F)
→ ip_do_fragment() reads 60B header when only 20B exist
→ ~32–64B heap memory included in each outbound fragment
| csum_offset | الحقل المتلف | النتيجة | متجه CVSS |
|---|---|---|---|
0 (افتراضي) | بايت IHL (الإزاحة 0) | قراءة خارج حدود الكومة → تسريب ذاكرة | الكشف عن المعلومات |
6 | Flags/FragOffset (الإزاحة 6) | تعطيل إعادة تجميع الأجزاء | التوافر |
جميع إصدارات نواة Linux قبل التزامات الإصلاح.
غير متأثرة (مُرقَّعة): 5.10.272+، 5.15.223+، 6.1.190+، 6.12.113+، 6.18.57+، 7.2.11+
تحقق من إصدار نواتك:
uname -r
cat /proc/version
المتطلبات: Python 3.6+ فقط. لا حزم pip، لا شبكة، لا صلاحيات جذر.
# Clone
git clone https://github.com/01luyicheng/CVE-2026-99999.git
cd CVE-2026-99999
# Run — IHL corruption / heap-leak simulation (CVSS 9.3 path, default)
python3 CVE-2026-99999_pwnescape.py --simulate
# Simulate with 5 datagrams and 8 fragments each
python3 CVE-2026-99999_pwnescape.py --simulate -n 5 -f 8
# Flags/FragOffset corruption path (fragment reassembly disruption)
python3 CVE-2026-99999_pwnescape.py --simulate -c 6
بدون --simulate، يطبع السكربت وصف الثغرة الكامل ثم يخرج:
python3 CVE-2026-99999_pwnescape.py
| العلامة | الوصف | الافتراضي |
|---|---|---|
--simulate | تشغيل محاكاة سلسلة الاستغلال (مطلوب) | — |
-c, --csum-offset | 0 = بايت IHL (قراءة خارج الحدود، الافتراضي)؛ 6 = Flags/FragOffset | 0 |
-n, --num-packets | عدد مخططات البيانات المراد محاكاتها | 3 |
-f, --fragments | عدد الأجزاء لكل مخطط بيانات (الحد الأدنى 2) | 4 |
تعمل المحاكاة في 5 خطوات (لا حاجة إلى شبكة):
virtio_net_hdr مع
csum_start=0 (يشير إلى بايت IHL الخاص بـ IPv4) وcsum_offset
قابل للتكوين.csum_start + csum_offset، موضحًا أي بايت من ترويسة IP
يُكتب فوقه وإلى أي قيمة.csum_offset=0)، يلاحظ تسرب ذاكرة الكومة بحجم ~32–64B.python3 CVE-2026-99999_pwnescape.py --simulate -n 1 -c 0
csum_start=0, csum_offset=0 → يقع الكتابة على بايت IHL → IHL من 5 إلى 15 →
يقرأ ip_do_fragment() 60 بايت بينما لا يوجد سوى 20 بايت → تسريب ~32–64 بايت من
ذاكرة الكومة لكل جزء (fragment).
python3 CVE-2026-99999_pwnescape.py --simulate -n 1 -c 6
csum_start=0, csum_offset=6 ← يقع الكتابة على بايت Flags/FragOffset ←
تلف بيانات إعادة تجميع الأجزاء الوصفية ← فشل إعادة تجميع الأجزاء.
تمت مراجعة هذا PoC بشكل مستقل. النتائج الرئيسية:
تُحفظ تقارير المراجعة التقنية الكاملة في المستودع الداخلي
(CVE-2026-99999-internal) لأسباب أمنية.
تحقق من حالة التصحيح:
# Check if your kernel has the fix (look for commit 6785011f8b16abf40b1e9d8b2)
cat /proc/config.gz 2>/dev/null | zcat | grep CONFIG_IPV4
# Or check dmesg for related errors after heavy network activity from a VM
6785011f8b16abf40b1e9d8b2 (stable trees), f43798c27684 (mainline)<[email protected]> patch seriesهذه الأداة مخصصة حصريًا للبحث الأمني المصرّح به والتعليم في بيئات معزولة وخاضعة للتحكم المخبري.