
إثبات مفهوم مُتحقَّق منه بواسطة KASAN يعيد إنتاج CVE-2026-98432، وهو ثغرة use-after-free في نواة Linux ضمن IPv4 TCP في inet_opt/ireq_opt، مع أداة اختبار سباق عبر وحدات المعالجة المركزية (cross-CPU) وضابط نواة مُصحَّحة.
استخدام بعد التحرير في Linux kernel IPv4 TCP inet_opt/ireq_opt (CVSS 9.8).
يتم حفظ خيارات رأس IPv4 في حزمة SYN على مقبس الطلب.
عند اكتمال المصافحة، يمرر tcp_v4_syn_recv_sock() نفس المخزن المؤقت
إلى المقبس الابن عبر المؤشر، دون نسخ. حزمة SYN المعاد إرسالها على وحدة معالجة مركزية أخرى
تقرأه في tcp_v4_send_synack()/inet_csk_route_req() بينما يكون الابن
قد اختفى بالفعل (inet_sock_destruct() حرره باستخدام kfree() العادي، والمقابس الابنة
لا تملك SOCK_RCU_FREE). الإصلاح هو استدعاءا kfree_rcu()، وقد أُدرج في
6.6.159 وما شابهها. قابل للاستغلال منذ 4.4.
يقوم المختبر بإقلاع نواة ضيف بحيث لا تكون نواة المضيف المُرقَّعة هي الهدف أبدًا:
make image
make kernel-amp kernel-fixed-amp
make rootfs
make test-det-vuln # KASAN: slab-use-after-free in inet_csk_route_req
make test-det-fixed # same attack, clean
phase-det هو مُعيد الإنتاج عبر وحدات المعالجة المركزية: مُغرِق dup-SYN مثبَّت على CPU1 (إنشاء مقبس
الطلب + مؤقته)، وACKs النهائية على CPU0 (إنشاء الابن)، وقبول+إغلاق الخادم على CPU3 (تدمير الابن). RPS مُعطَّل، وnetns المهاجم/الهدف
عبر زوج veth، وتخرج الحزم كإطارات Ethernet خام بحيث لا تقوم نواة المهاجم
نفسها بإرسال RST للمصافحة وإفشالها. تُضيف نوى -amp تأخيرًا قدره 5ms
داخل inet_csk_route_req بين أخذ ireq_opt وإلغاء الإشارة إليه
(حقن تأخير على نمط KCSAN، يُستخدم لأغراض إعادة الإنتاج في نوى إعادة الإنتاج هذه
فقط، ومُعلَّم بوضوح في المصدر).
يحتوي poc/poc.c أيضًا على متغيرات timerace وrace وmigrate وmptcp.
evidence/REPRODUCED-UAF-first-splat.txt — 12 splat في تشغيل واحد، الأول:
[ 9.076253] BUG: KASAN: slab-use-after-free in inet_csk_route_req+0x94/0x370
[ 9.076586] Read of size 1 at addr ffff888002ddaa41 by task poc/85
...
tcp_v4_send_synack+0x212/0x240
tcp_rtx_synack+0xd5/0x280
inet_rtx_syn_ack+0x38/0x60
tcp_check_req+0xb8e/0xde0
tcp_v4_rcv+0x1131/0x15e0
...
Allocated by task 79: tcp_v4_route_req+0x116/0x1b0 (options saved on the SYN)
Freed by task 80: inet_sock_destruct+0x2cd/0x380 (child close(), plain kfree)
evidence/VERIFIED-fixed-kernel-clean.log — نفس الهجوم على النواة مع
تطبيق استدعاءي kfree_rcu(): صفر تقارير.
إذا لم تتمكن من الترقيع بعد، فأسقط حزم TCP التي تحمل خيارات IPv4 عند prerouting
(ip protocol tcp ip hdrlength > 5 drop)، واضبط
net.ipv4.tcp_migrate_req=0 للمتغير الخاص بالترحيل. الإصلاح الحقيقي هو
تحديث النواة.