
CVE-2026-35333: strongSwan RADIUS attribute iterator infinite loop PoC
strongSwan RADIUS attribute-iterator pre-auth бесконечный цикл / удаленный 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 — указатель никогда не сдвигаетсяПеречислитель возвращает один и тот же поддельный атрибут на каждой итерации, зависая цикл while (enumerate(...)) вызывающего.
DAE receive callback в eap_radius_dae.c вызывает request->verify(..., NULL, secret, ...) перед диспетчеризацией по коду RADIUS. Для code == Access-Request, verify() пропускает проверку Response-Authenticator MD5 и обходит перечислитель атрибутов, чтобы найти Message-Authenticator — таким образом, атрибут нулевой длины ловит парсер до проверки общего секрета. Атака не требует аутентификации.
Один UDP-пакет нагружает рабочий поток charon на 100% ЦП навсегда. Повторите N раз, чтобы исчерпать все N рабочих потоков.
Затронуто: strongSwan <= 5.9.13. Исправлено в upstream master commit e067d24293 (2026-04-21).
python3 poc.py --target <charon-host> --port 3799
eap-radius и dae.enable = yes (прослушиватель UDP/3799)Этот проект выпущен под лицензией GNU GPLv3.
Он предоставляется для оборонительного исследования безопасности, обучения и авторизованного тестирования. Не используйте этот код против систем или сервисов без явного разрешения владельца.
Несанкционированное использование может нарушить применимое законодательство. Авторы не дают разрешения на тестирование сторонних систем и не несут ответственности за неправомерное использование.
Смотрите файл LICENSE для условий гарантии и ответственности.