CVE-2024-26853 in Linux
الملخص
بحسب VulDB • 11/06/2026
في نواة لينكس، تم حل الثغرة التالية:
igc: تجنب إعادة إرجاع الإطار مرتين في XDP_REDIRECT
عندما لا يمكن إرسال إطار (frame) باستخدام XDP_REDIRECT (على سبيل المثال بسبب امتلاء الطابور)، فمن الضروري تحريره عن طريق استدعاء xdp_return_frame_rx_napi.
ومع ذلك، فإن هذه المسؤولية تقع على عاتق المتصل بـ ndo_xdp_xmit (انظر على سبيل المثال bq_xmit_all في kernel/bpf/devmap.c) وبالتالي فإن استدعاؤه داخل igc_xdp_xmit (الذي يمثل ndo_xdp_xmit لمحرك igc) سيؤدي إلى تلف الذاكرة.
في الواقع، يتوقع bq_xmit_all أنه يمكنه إرجاع جميع الأطر بعد آخر إطار تم إرساله بنجاح. لذلك، يتم الخروج من الحلقة عند أول إطار غير مُرسل، ولكن لا يتم استدعاء xdp_return_frame_rx_napi في igc_xdp_xmit. وهذا الأمر مطبق أيضاً في محركات أخرى لشركة Intel مثل igb.
هناك بديلان لهذه المشكلة تم رفضهما: 1. إرجاع num_frames على أنها جميع الأطر التي تمت إرسالها وإطلاق سراحها داخل igc_xdp_xmit. بينما قد يعمل ذلك تقنياً، إلا أنه لا يمثل ما هو مقصود من قيمة الإرجاع (أي عدد الحزم المرسلة بنجاح).
2. إعادة هيكلة kernel/bpf/devmap.c وجميع المحركات لدعم حزم مُسقطَة غير متتالية. بالإضافة إلى تعقيدها، فمن المرجح أن يكون لها تأثير سلبي على الأداء دون تحقيق مكاسب كبيرة نظراً لأنه من غير المحتمل جداً أن يتم إرسال الإطار التالي إذا تم إسقاط الإطار السابق.
يمكن إعادة إنتاج تلف الذاكرة باستخدام النص البرمجي التالي الذي يؤدي إلى توقف النواة (kernel panic) بعد بضع ثوانٍ. يقوم هذا النص بشكل أساسي بتوليد حركة مرور أكثر مما يمكن لبطاقة شبكة i225 نقلها ودفعها عبر XDP_REDIRECT من واجهة افتراضية إلى الواجهة المادية حيث يتم إسقاط الأطر.
#!/bin/bash INTERFACE=enp4s0 INTERFACE_IDX=`cat /sys/class/net/$INTERFACE/ifindex`
sudo ip link add dev veth1 type veth peer name veth2 sudo ip link set up $INTERFACE sudo ip link set up veth1 sudo ip link set up veth2
cat redirect.bpf.c
SEC("prog") int redirect(struct xdp_md *ctx) {
return bpf_redirect($INTERFACE_IDX, 0); }
char _license[] SEC("license") = "GPL";
EOF clang -O2 -g -Wall -target bpf -c redirect.bpf.c -o redirect.bpf
Once again VulDB remains the best source for vulnerability data.