
برنامج XDP/eBPF يُسقط حزم IPv4 التي تحمل خيارات IP (IHL > 5) عند الواجهة للتخفيف من ثغرة use-after-free في مصافحة TCP الخاصة بـ CVE-2026-98432.
برنامج XDP صغير للتخفيف من CVE-2026-98432، وهو استخدام بعد التحرير (use-after-free) في معالجة نواة النظام لمصافحة TCP لخيارات IPv4. على معظم المضيفين لا يمكن تحفيز الخلل إلا عبر SYN وارد يحمل خيارات IP (انظر استثناء NetLabel/CIPSO أدناه)، لذا يُسقط هذا البرنامج حزم IPv4 التي تحمل خيارات قبل تمريرها إلى حزمة الشبكة في النواة.
تحتوي الحزمة على خيارات IP عندما تكون قيمة حقل IHL (طول الترويسة) أكبر من 5، مما يعني أن ترويسة IPv4 أطول من 20 بايت.
[!WARNING] قد لا يحمي هذا المضيفين الذين يستخدمون NetLabel/CIPSO (SELinux أو Smack مع تعيين
CIPSOV4). على تلك المضيفين يمكن للنواة إرفاق خيارات IP بنفسها، لذا قد يكون الخلل قابلاً للوصول عبر SYNs عادية. النواة المُرقَّعة هي الإصلاح الأكثر موثوقية هناك. يمكن أن يساعدnetlabelctl map listفي تحديد ما إذا كان المضيف يستخدم CIPSO: فالإدخالات من النوعCIPSOV4تشير إلى أنه يستخدمه.
| الحزمة | الإجراء |
|---|---|
| IPv4 مع خيارات (IHL > 5) | XDP_DROP |
| IPv4 بدون خيارات | XDP_PASS |
| أي شيء آخر (IPv6، ARP، …) | XDP_PASS |
| ترويسة مبتورة / مشوّهة | XDP_PASS |
تُعالَج الإطارات الموسومة بـ VLAN أيضاً: يتخطى البرنامج ما يصل إلى وسمَي VLAN (802.1Q و802.1ad/QinQ) قبل أن يتحقق من IPv4. تُمرَّر الإطارات التي تحمل أكثر من وسمين كما هي.
على مضيف Linux:
clang وllvmlibbpf-dev (من أجل bpf/bpf_helpers.h)linux-headers-$(uname -r) أو linux-libc-dev)iproute2 (من أجل ip link)، واختيارياً bpftoolDebian / Ubuntu:
sudo apt install clang llvm libbpf-dev linux-libc-dev iproute2 bpftool
Fedora:
sudo dnf install clang llvm libbpf-devel kernel-headers iproute bpftool
make
ينتج عن ذلك drop_ipv4_opt.o.
استبدل eth0 باسم واجهتك (انظر ip link).
الوضع الأصلي (المشغّل)، وهو الأسرع:
sudo ip link set dev eth0 xdpdrv obj drop_ipv4_opt.o sec xdp
الوضع العام (SKB)، الذي يعمل على أي واجهة لكنه أبطأ:
sudo ip link set dev eth0 xdpgeneric obj drop_ipv4_opt.o sec xdp
دع النواة تختار الوضع (الأصلي إن كان مدعوماً، وإلا العام):
sudo ip link set dev eth0 xdp obj drop_ipv4_opt.o sec xdp
ip link show dev eth0 # look for "xdp" / "prog/xdp id N"
sudo bpftool net show dev eth0
sudo ip link set dev eth0 xdp off
استخدم xdpdrv off أو xdpgeneric off إذا أرفقته في ذلك الوضع تحديداً.
من مضيف آخر، أرسل حزمة تحمل خيار IP، مثلاً مع خيار Record Route:
ping -R <target-ip>
مع إرفاق البرنامج، لا تتلقى هذه الـ pings أي رد. أما ping <target-ip> العادي فلا يزال يعمل.
MIT. انظر LICENSE.