
تخفيف مؤقت عبر nftables لثغرة CVE-2026-98432 في نواة Linux (استخدام بعد التحرير في خيارات IPv4 داخل tcp_v4_syn_recv_sock) على شكل مهارة وكيل قابلة لإعادة الإنتاج
مهارة وكيل تُطبّق وتتحقق وتُثبّت ثم تزيل لاحقًا التخفيف المؤقت للمضيف
لثغرة نواة Linux CVE-2026-98432 (CVSS 9.8): قاعدة nftables واحدة تُسقط حزم TCP
التي تحمل خيارات IPv4 — وهي المدخل الوحيد الذي يصل إلى ثغرة الاستخدام بعد التحرير
(use-after-free) في inet_opt/ireq_opt داخل tcp_v4_syn_recv_sock().
سياق يجدر معرفته: وصف فريق Anthropic's Frontier Red Team علنًا إثبات مفهوم (PoC) عامل
ينتقل من غير مصادَق إلى root ضد خوادم تُعرّض مستمع MPTCP (أكتوبر 2026)؛ ولم
يُبلَّغ عن استغلال في البرية. وكالة CNA الخاصة بالنواة تمنح 9.8؛ بينما يمنح كلٌّ من
upstream وRed Hat درجة 8.1 (تعقيد الهجوم مرتفع). إصلاح المورّد هو backports من فئة
نواة Ubuntu 6.8.0-149 — وإلى أن تحمل النواة قيد التشغيل الإصلاح، تبقى هذه القاعدة
حلًّا مؤقتًا. وهي محصورة في حقل واحد من ترويسة واحدة من بروتوكول واحد، لذا تبقى حركة
المرور العادية دون مساس.
هذه القاعدة ليست جديدة — تعامل معها كأعمال سابقة مُحزَّمة. راجع "الأعمال السابقة" أدناه؛ فمساهمة هذا المستودع هي الصيغة القابلة لإعادة الإنتاج على شكل مهارة وكيل إضافةً إلى مزالق بيئة الإنتاج.
| المسار | الوصف |
|---|---|
SKILL.md | المهارة — محفّزات frontmatter، ومجموعة القواعد، والفحوصات، والاستمرارية، والمزالق، والإزالة |
files/cve98432.nft | مجموعة قواعد nftables جاهزة للنسخ (prerouting، الأولوية −300) |
files/nft-cve98432.service | وحدة systemd جاهزة للنسخ (الاستمرارية) |
cp -R cve-2026-98432-nft-mitigation ~/.claude/skills/ # Claude Code
cp -R cve-2026-98432-nft-mitigation ~/.agents/skills/ # agents-style runtimes
description في frontmatter هو سطح الاكتشاف: تختار الوكلاء هذه المهارة عند الطلب
لتخفيف CVE-2026-98432، أو "إصلاح TCP/IP"، أو UAF في خيارات IPv4 في النواة، أو لإزالة
التخفيف بعد إصدار نواة المورّد.
zgrep -c CVE-2026-98432 /usr/share/doc/linux-modules-$(uname -r)/changelog.Debian.gz # Debian/Ubuntu
rpm -q --changelog kernel-core-$(uname -r) | grep -c CVE-2026-98432 # RHEL/Rocky/Alma
> 0 = ثابت، تخطَّ التخفيف. (تحقق أيضًا من متتبع الجهة المصنّعة لديك؛ و
apt-cache policy linux-image-generic للتحقق من نواة أحدث مثبّتة ولكن غير مُقلعة.)ss -lnMp): يستهدفهم PoC المنشور، ويستمع Go ≥ 1.24
عبر MPTCP افتراضيًا على النوى التي تسمح بذلك. يؤثر sysctl net.mptcp.enabled=0 فقط على
المقابس الجديدة — أما المستمعون المفتوحون بالفعل فيحتفظون بـ MPTCP حتى تُعاد خدمتهم
(GODEBUG=multipathtcp=0 وفقًا لفريق Go).cat /sys/kernel/security/lsm كلاً من SELinux أو Smack و
كنت تستخدم تعيين NetLabel CIPSOV4، فإن خيارات IPv4 مشروعة هناك — وستكسر هذه القاعدة
ذلك المسار. لا تطبّقها على الشبكات الموسومة بـ CIPSO (تناقش RFC 7126 هذه المقايضة).files/cve98432.nft وfiles/nft-cve98432.service.nft -c -f /usr/local/sbin/cve98432.nft — فحص التحليل النحوي؛ يتطلب صلاحيات الجذر (يفشل
المستخدم غير الجذر عند netlink: cache initialization failed).systemctl daemon-reload && systemctl enable --now nft-cve98432.servicedestroy table … هو
السطر الأول من الملف: فعند إضافته في النهاية يُنشئ الجدول ثم يدمّره،
تاركًا مجموعة قواعد فارغة بينما تظل الخدمة تنتهي بالرمز 0.nft list table inet cve98432
meta l4proto tcp ip hdrlength > 5 counter drop على سلسلة ذات priority -300
(قبل conntrack، مطابقةً للقاعدة المنشورة).table inet … المخصص ليس مملوكًا لـ iptables، لذا فإن أدوات iptables-restore /
ufw / firewalld تتركه سليمًا (شغّل الاستعادة مرة واحدة ثم أعد السرد للتأكد).الإزالة بعد تثبيت النواة المُصلحة وإعادة الإقلاع: القسم 7 من SKILL.md.
حالة nftables لكل فضاء أسماء شبكة (network namespace). قواعد المضيف ترى حركة مرور الحاوية فقط حيث
تعبر المضيف (مثلًا الحاوية → الخارج)؛ أما الحركة التي تبقى داخل فضاء أسماء الحاوية
نفسها (الحاوية → loopback/IP الخاص بها) فلا تعبر أبدًا prerouting الخاص بالمضيف —
ومع ذلك فالنواة مشتركة، لذا يمكن للشيفرة داخل الحاوية الوصول إلى UAF محليًا. احقن
مجموعة القواعد نفسها في كل حاوية قيد التشغيل:
# Docker (host-side nsenter keeps the needed capabilities)
for c in $(docker ps -q); do
pid=$(docker inspect -f '{{.State.Pid}}' "$c")
nsenter -t "$pid" -n /usr/sbin/nft -f /usr/local/sbin/cve98432.nft
done
# LXC (privileged CLI as root)
for c in $(lxc-ls -1 2>/dev/null); do lxc-attach -n "$c" -- nft -f /usr/local/sbin/cve98432.nft; done
مساحات أسماء الحاويات لا تحتفظ بقواعد nft — أعد التشغيل عند كل إعادة تشغيل للحاوية (اربطه بخطوة ما بعد البدء في منسّقك). أعمال سابقة لهذه الفجوة تحديدًا، مع سكربتات:
typhoon1217/cve-2026-98432-mitigation (inject-netns.sh).
تكفي المقابس القياسية — لا حاجة لصياغة حزم على الخادم: يقوم العميل بتعيين خيار IPv4 Record
Route عبر setsockopt(IP_OPTIONS) ثم يتصل؛ الاتصال العادي ينجح، بينما يجب أن ينتهي الاتصال
بالخيارات بمهلة بينما يزداد عدّاد القاعدة. عملاء جاهزون:
check-blocked.py / verify-synack.sh في typhoon1217/cve-2026-98432-mitigation.
تحذير من ذلك المشروع: العميل الذي يشغّل التخفيف بنفسه سيقوم أيضًا بإسقاط
صدى SYN-ACK الخاص بالهدف — اختبر من عميل غير مخفَّف للحصول على حكم نظيف.
prerouting عند priority -300: قبل conntrack، حتى لا تُنشئ الحزم المُسقطة حالة conntrack — وعلى عكس input،
فإنه يغطي أيضًا حركة المرور المُمرَّرة إلى الحاويات/الأجهزة الافتراضية التي تعبر المضيف.@nh,4,4 > 5 الخام إلى
ip hdrlength > 5 — حقل IHL، مؤكَّد من الأداة نفسها.typhoon1217/cve-2026-98432-mitigation — نفس قاعدة الإسقاط + حقن شبكة الحاويات (container-netns)،
تحذير CIPSO، عملاء التحقق (EN/KO)مستخلص من نشر إنتاجي، بما في ذلك الإخفاقات التي واجهناها هناك: nft -c بصلاحيات غير جذر،
خطأ ترتيب destroy في النهاية، heredoc غير مُقتبس يبتلع \$ بصمت، ودلالات التطبيق المزدوج.
مستودع توثيق فقط — تبعيات وقت التشغيل: nft ≥ 1.0 + systemd؛ لا توجد مجموعة اختبارات
(غير منطبق).