
أسقِط حزم TCP الواردة من IPv4 التي يحتوي ترويسة IP الخاصة بها على خيارات.
إسقاط حزم IPv4 TCP الواردة التي يحتوي ترويسة IP الخاصة بها على خيارات.
إجراء مؤقت صغير وقابل للعكس باستخدام iptables للثغرة CVE-2026-98432.
يُسقط حزم IPv4 TCP التي تحتوي على خيارات IP في مساحة الشبكة الحالية. يتضمن مخرجات حالة واضحة، وأوامر تطبيق/إزالة قابلة للتكرار، وجردًا للقراءة فقط، وخدمة systemd اختيارية، وفحص اتصال منفصل.
الإصدار: 1.0.0 · تاريخ المراجعة: 30 أكتوبر 2026 · المتطلبات: Linux + Bash + iptables
هذا تصفية مجتمعية، وليس إصلاحًا للنواة أو حلًا بديلًا كاملًا معتمدًا من البائع. وجود القاعدة لا يُثبت مقاومة الاستغلال. ثبّت نواة مُصلحة من البائع وأقلع منها، أو استخدم livepatch مدعومًا يغطي هذه الثغرة صراحةً.
استخرج ملف ZIP، وافتح طرفية في هذا الدليل، ثم:
# Read-only inventory; no root required, although visibility may be limited.
bash paranoid-cve98432.sh audit
# Preview the firewall commands; no changes, no root required.
bash paranoid-cve98432.sh apply --dry-run
# Apply the two runtime rules.
sudo bash paranoid-cve98432.sh apply
# Check exact rules and packet counters.
sudo bash paranoid-cve98432.sh status
أبقِ جلسة SSH الخاصة بك مفتوحة وتأكد من أن اتصال SSH ثانٍ وخدماتك العادية لا تزال تعمل. قد تتأثر العملاء التي تتطلب خيارات IP الخاصة بـ IPv4.
للتراجع:
sudo bash paranoid-cve98432.sh remove
تُزال فقط قواعد هذا الأداة المميّزة بالوسم بدقة. تُحفظ قواعد جدار الحماية الأخرى وجميع إعدادات sysctl. القواعد التي ثبّتها يدويًا في وقت سابق، بما في ذلك القاعدة غير الموسومة من محادثتنا، لا تُزال ولا تُتبنّى.
| التبعية | الغرض |
|---|---|
| Bash | بيئة تشغيل السكربت |
iptables مع جدول IPv4 raw، ومطابقات u32 وcomment | تصفية الحزم |
صلاحيات الجذر وCAP_NET_ADMIN | التطبيق والحالة والإزالة |
flock وstat وmkdir | تسلسل التغييرات باستخدام دليل خاص تحت /run |
iproute2 (ss) | جرد اختياري للمنافذ المستمعة |
| Python 3.8+ | مساعد تحقق اختياري |
| Python 3.9+ | مجموعة اختبارات دون اتصال |
| systemd | استمرارية اختيارية عند الإقلاع فقط |
الحزم المعتادة على Ubuntu/Debian:
sudo apt install iptables util-linux iproute2 python3
في أنظمة عائلة RHEL، تختلف الحزمة التي توفّر الأمر iptables حسب الإصدار. تحقّق من dnf provides '*/iptables'. لا تقوم هذه الأداة بتثبيت الحزم أو تغيير الواجهة الخلفية المحددة لـ iptables.
بعض تثبيتات iptables-nft لا تدعم u32 في إعدادها الحالي. إذا فشل الإدراج، تُبلّغ الأداة عن خطأ وتتراجع عن قواعدها الجديدة. لا تُبدّل الواجهات الخلفية لجدار الحماية بشكل أعمى على خادم قيد التشغيل؛ استخدم بديلاً أصلياً لـ nftables مدمجاً مع جدار الحماية الحالي لديك بدلاً من ذلك.
هذه القواعد بالضبط، مع تعليق يُستخدم لتحديدها:
iptables -w 10 -t raw -I PREROUTING 1 -p tcp \
-m u32 --u32 '0>>24&0x0F=6:15' \
-m comment --comment 'cve98432-guard:v1' -j DROP
iptables -w 10 -t raw -I OUTPUT 1 -p tcp \
-m u32 --u32 '0>>24&0x0F=6:15' \
-m comment --comment 'cve98432-guard:v1' -j DROP
يحتوي البايت الأول من ترويسة IPv4 على رقم الإصدار وطول ترويسة الإنترنت
(Internet Header Length، IHL). خمس كلمات 32-بت هي ترويسة عادية بطول 20 بايت. تعني قيمة IHL من 6 إلى 15
وجود خيارات IP. يقرأ u32 ذلك الحقل مباشرةً.
PREROUTING حركة TCP الواردة عبر IPv4 قبل تسليمها إلى المستمعين.OUTPUT أيضًا الحركة المولَّدة محليًا، بما في ذلك المحاولات للوصول
إلى المستمعين المحليين. وقد تُسقِط أيضًا الردود الصادرة التي تحمل خيارات IP.هذه خيارات IP الخاصة بـ IPv4، وهي حقل ترويسة مختلف عن خيارات TCP. حركة SSH وHTTPS وغيرها من الحركة العادية التي لا تحمل خيارات IP خارج نطاق المطابقة.
تطبيقها مرتين لا يضيف نسخًا إضافية. إذا فشل الإدراج الثاني، فلن تُتراجَع سوى
القواعد التي حاول ذلك الاستدعاء إدراجها؛ أما القواعد المطابقة الموجودة مسبقًا
فتُحتفَظ بها. كما ينظِّف remove النسخ المكررة من القواعد المطابقة لهذه الأداة.
تُنفَّذ الاستدعاءات المتزامنة لهذه الأداة بشكل متسلسل. ومع ذلك، قد يُغيِّر مدير جدار حماية
غير مرتبط القواعد في الوقت نفسه.
تصف النشرة الأمنية الأصلية ثغرة use-after-free في خيارات طلب/مقبس IPv4 أثناء بناء SYN-ACK أو أثناء ترحيل طلب. يُغيِّر الإصلاح مُدمِّرَين (destructors) لتأجيل التحرير عبر RCU.
يمنع ترشيح الحزم الواردة التي تحمل خيارات IP وصول الخيارات المعتادة المزوَّدة من الحزم إلى TCP على المسارات التي تغطيها هذه الخطافات. وهذا هو أساس هذا الحل المؤقت. فهو تخفيف قائم على التحليل، وليس إعادة إنتاج لاستغلال كامل، ولا ضمانًا ضد كل مسار يؤدي إلى الشيفرة المعرَّضة للثغرة.
تحقَّق من هذه القيود:
| الحالة | القيد / الإجراء |
|---|---|
| الحاويات، ومساحات أسماء الشبكة، ومساحات أسماء VPN | القواعد لكل مساحة أسماء. لا تغطي قواعد المضيف الحركة المحصورة في مساحة أسماء أخرى. افحص وطبِّق داخل كل مساحة أسماء ذات صلة. تتشارك الحاويات نواة المضيف. |
| جسور Linux / التمرير من الطبقة الثانية | قواعد IPv4 هذه ليست سياسة جسر كاملة. تأكَّد من تغطية مساحات الأسماء الوجهة؛ واستخدم قواعد عائلة الجسور إذا احتاج مسار التمرير هذا إلى ترشيح. |
| الأنفاق | تأكَّد من الترشيح على مسار IPv4 الداخلي بعد فك التغليف. الحزمة الخارجية المشفَّرة لا تُظهر خيارات IP الداخلية للمُرشِّح الخارجي. |
| NetLabel / CIPSO مع SELinux أو Smack | يمكن لـ CIPSO تعبئة خيارات الطلب عبر مسار وسم في النواة. لا تعتبر ترشيح ترويسة الدخول تغطية لذلك المسار. مجرد تفعيل SELinux لا يُثبت أن CIPSO مُهيَّأ. |
| المقابس الموجودة أو الطلبات المعلَّقة | إضافة مُرشِّح ليست تنظيفًا أو ترقيعًا لكائنات نواة أُنشئت بالفعل. |
| إعادة تحميل جدار الحماية | قد تُزيل إعادة التحميل أو الاستعادة أو منسِّق الحاويات أو المسؤول القواعد أو تُعيد ترتيبها. أعد فحص الحالة وأعد التطبيق. |
| قواعد الإنهاء السابقة في جدول raw | تُوضَع القواعد الجديدة في الموضع 1، لكن تغييرات القواعد اللاحقة قد تضع قاعدة إنهاء قبلها. افحص الترتيب. |
| عميل يتطلب خيارات IP | قد تتوقف اتصالاته عن العمل. يشمل ذلك عمليات نشر متخصصة لوسم الأمان. |
| IPv6 | لا تُرشِّح هذه القواعد IPv6 ولا تعالج مشكلات ترحيل IPv6/CALIPSO المتتبَّعة بشكل منفصل. |
لا يوجد ادعاء تلقائي بأن النواة مُرقَّعة استنادًا إلى سلسلة إصدار، أو ذكر في سجل التغييرات، أو مخرجات مستمع فارغة، أو عدّاد حزم صفري. تُعيد نوى المورِّدين ترقيع الإصلاحات ولديها أنواع منفصلة من generic وcloud وHWE وغيرها. النواة الجديدة المثبَّتة ليست بالضرورة النواة قيد التشغيل.
يصف تقرير Anthropic المؤرخ 27 أكتوبر استغلالًا لجذر عن بُعد ضد خادم لديه مستمع MPTCP. وتصف النشرة الأمنية الأساسية سباقًا في TCP عبر IPv4 لا يقتصر على MPTCP. كلتا الحقيقتين مهمتان.
إذا لم تكن تطبيقاتك بحاجة إلى MPTCP، فيمكنك تعطيل مقابس MPTCP الجديدة بشكل منفصل:
# Record the current value before changing it.
sysctl net.mptcp.enabled
sudo sysctl -w net.mptcp.enabled=0
يُعد هذا الإعداد خاصًا بمساحة أسماء الشبكة (network namespace) ويتحكم في إنشاء مقابس (sockets) جديدة. لا يقوم هذا الأمر بتحويل مستمعي MPTCP الحاليين إلى TCP عادي. حدد الخدمات التابعة وأعد تشغيلها/إعادة تهيئتها بشكل متعمد إذا لزم الأمر؛ لا تعيد هذه الأداة تشغيل الخدمات. قد تفشل بعض التطبيقات بدلًا من الرجوع إلى TCP العادي.
لجعل التغيير دائمًا، إذا اخترت ذلك، أضف السطر
net.mptcp.enabled = 0 عبر إعدادات sysctl المعتادة لديك. سجّل الملف
وقيمة وقت التشغيل السابقة لاستعادتها لاحقًا. لا يقوم أمر remove الخاص بالحارس
بإرجاع تغييرات sysctl التي أُجريت بشكل منفصل.
وبالمثل، يحد net.ipv4.tcp_migrate_req=0 من آلية ترحيل واحدة فقط. يُعد
برنامج ترحيل BPF الخاص بـ reuseport آلية أخرى، ويبقى السباق الأساسي قائمًا.
لا يُعد أي من إعدادي sysctl بديلًا عن الترقيع.
على الخادم:
sudo bash paranoid-cve98432.sh status
PRESENT تعني أن القاعدة الموسومة الدقيقة مثبّتة. يُظهر pkts وbytes
عدد المطابقات منذ الإدراج. يعني العدد صفر أنه لم تُحسب أي مطابقات؛
وهو لا يُثبت الحماية ولا غياب الهجوم.
من عميل Linux منفصل دون تصفية خيارات IP، مقابل منفذ مفتوح معروف على خادمك:
python3 verify-filter.py SERVER_IPV4 22