
CVE-2026-35333: strongSwan RADIUS attribute iterator infinite loop PoC
strongSwan RADIUS attribute-iterator pre-auth infinite loop / remote DoS.
تقبل الدالة attribute_enumerate() في src/libradius/radius_message.c:247-271 سمات RADIUS التي يكون البايت length فيها أصغر من sizeof(rattr_t) (2). بالنسبة لـ length == 0:
data->len = next->length - sizeof(rattr_t) يفيض نحو الأسفل إلى (size_t)-2this->left -= next->length هي left -= 0 — العداد لا يتناقص أبدًاthis->next += next->length هي next += 0 — المؤشر لا يتقدم أبدًايُعيد العداد (enumerator) نفس السمة الزائفة في كل تكرار، مما يعلّق حلقة while (enumerate(...)) الخاصة بالمستدعي.
يستدعي رد الاتصال الخاص باستقبال DAE في eap_radius_dae.c الدالة request->verify(..., NULL, secret, ...) قبل التوزيع بناءً على رمز RADIUS. بالنسبة لـ code == Access-Request، تتخطى verify() فحص MD5 الخاص بـ Response-Authenticator وتجتاز عداد السمات للعثور على Message-Authenticator — لذا توقِع السمة ذات الطول الصفري المحلّل قبل التحقق من السر المشترك. الهجوم غير مُصادَق.
حزمة UDP واحدة تُحمّل أحد سلاسل عمليات charon بنسبة 100% من المعالج إلى الأبد. كرّر ذلك N مرة لاستنفاد جميع سلاسل العمليات N.
الإصدارات المتأثرة: strongSwan <= 5.9.13. تم الإصلاح في التزام الفرع الرئيسي upstream e067d24293 (2026-04-21).
python3 poc.py --target <charon-host> --port 3799
eap-radius وتفعيل dae.enable = yes (مستمع على UDP/3799)يُطرح هذا المشروع بموجب رخصة GNU GPLv3.
يُوفَّر لأغراض البحث الأمني الدفاعي والتعليم والاختبار المصرح به. لا تستخدم هذا الكود ضد أنظمة أو خدمات دون إذن صريح من المالك.
قد يخالف الاستخدام غير المصرح به القانون المعمول به. لا يمنح المؤلفون إذنًا لاختبار أنظمة الأطراف الثالثة وليسوا مسؤولين عن إساءة الاستخدام.
راجع ملف LICENSE للحصول على شروط الضمان والمسؤولية.