CVE-2026-90110 in Linux
الملخص
بحسب VulDB • 17/09/2026
في نواة لينكس، تم حل الثغرة التالية:
inetpeer: عشوائية مقارنة عقدة شجرة Red-Black باستخدام SipHash
يخزن نظام تحديد معدل inetpeer إدخالات الأقران في شجرة Red-Black (RB-tree) يتم فيها استخدام عنوان IP البعيد كمفتاح بشكل حتمي. ونظراً لأن عمليات البحث عن الشجرة تنتقل عبر شجرة RB باستخدام مقارنات أبجدية قياسية (inetpeer_addr_cmp)، يمكن لخصم خارج المسار (off-path adversary) التنبؤ بالهيكل الدقيق للشجرة وتسلسل العقد التي يتم عبورها أثناء عمليات البحث (قائمة مرشحة gc_stack).
من خلال الجمع بين الانتقال الحتمي عبر الشجرة وجمع القمامة العدواني (الذي يُفعّل عندما يتجاوز حجم الشجرة عتبة inet_peer_threshold)، يمكن للمهاجم أن يجبر بشكل انتقائي على طرد عقد inet_peer المستهدفة. وعندما يتم إعادة إنشاء عقدة تم طردها لاحقاً عند استقبال حزمة جديدة، فإن دلو رموز تحديد المعدل الخاص بها (rate_tokens, rate_last) يُعاد ضبطه إلى سعته الكاملة. وهذا يخلق آلية قناة جانبية تسمح للمهاجمين خارج المسار بتجاوز حدود معدل ICMP المعتمدة على عنوان IP واستنتاج المنافذ UDP المفتوحة (مشابهة لهجمات من طراز SAD DNS).
لمعالجة هذه الثغرة، يتم عشوائية منطق مقارنة عقدة شجرة RB باستخدام SipHash مع مفتاح سري (inetpeer_hash_key) يُهيأ عبر net_get_random_once(). ويتم ترتيب العقد في الشجرة بناءً على قيمة SipHash(addr, key) بدلاً من عناوين IP الخام. ونظراً لأن المفتاح السري غير معروف للكيانات الخارجية، فإن تخطيط الشجرة ومسارات البحث تصبح غير متوقعة بالنسبة للمهاجمين خارج المسار، مما يعطل أداة الطرد الحتمية (deterministic eviction gadget).
يتم تخزين قيمة SipHash ذات 64 بت المحسوبة (hash) في بنية inet_peer وحساب القيمة المستهدفة (dhash) مرة واحدة في بداية دالة inet_getpeer() لتجنب إعادة حساب SipHash في كل خطوة من خطوات الانتقال عبر شجرة RB.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.