
CVE-2026-35333: strongSwan RADIUS विशेषता पुनरावर्तक अनंत लूप PoC
strongSwan RADIUS एट्रिब्यूट-इटरेटर प्री-ऑथ अनंत लूप / रिमोट 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)-2 हो जाता हैthis->left -= next->length का अर्थ है left -= 0 — काउंटर कभी घटता नहींthis->next += next->length का अर्थ है next += 0 — पॉइंटर कभी आगे नहीं बढ़ताएन्युमरेटर हर बार एक ही नकली एट्रिब्यूट लौटाता है, जिससे कॉलर का while (enumerate(...)) लूप हैंग हो जाता है।
eap_radius_dae.c में DAE रिसीव कॉलबैक, RADIUS कोड पर डिस्पैच करने से पहले request->verify(..., NULL, secret, ...) को कॉल करता है। code == Access-Request के लिए, verify() Response-Authenticator MD5 चेक को छोड़ देता है और Message-Authenticator खोजने के लिए एट्रिब्यूट एन्युमरेटर पर चलता है — इस प्रकार शून्य-लंबाई वाला एट्रिब्यूट पार्सर को शेयर्ड सीक्रेट चेक होने से पहले ही फँसा देता है। यह हमला अप्रमाणित (unauthenticated) है।
एक UDP पैकेट एक charon वर्कर थ्रेड को हमेशा के लिए 100% CPU पर पिन कर देता है। N बार दोहराने पर सभी N वर्कर थ्रेड खत्म हो जाते हैं।
प्रभावित: strongSwan <= 5.9.13। अपस्ट्रीम मास्टर कमिट e067d24293 (2026-04-21) में ठीक किया गया।
python3 poc.py --target <charon-host> --port 3799
eap-radius प्लगइन लोड हो और dae.enable = yes (UDP/3799 सुनने वाला)यह प्रोजेक्ट GNU GPLv3 के अंतर्गत जारी किया गया है।
यह रक्षात्मक सुरक्षा अनुसंधान, शिक्षा और अधिकृत परीक्षण के लिए प्रदान किया गया है। इस कोड का उपयोग उन प्रणालियों या सेवाओं के विरुद्ध न करें जिनके मालिक से स्पष्ट अनुमति न हो।
अनधिकृत उपयोग लागू कानून का उल्लंघन कर सकता है। लेखक तीसरे पक्ष की प्रणालियों का परीक्षण करने की अनुमति नहीं देते और दुरुपयोग के लिए जिम्मेदार नहीं हैं।
वारंटी और दायित्व की शर्तों के लिए LICENSE फ़ाइल देखें।