
CVE-2026-35333: Prova de conceito de loop infinito no iterador de atributos RADIUS do strongSwan
Loop infinito pré-autenticação no iterador de atributos RADIUS do strongSwan / DoS remoto.
attribute_enumerate() em src/libradius/radius_message.c:247-271 aceita atributos RADIUS cujo byte length é menor que sizeof(rattr_t) (2). Para length == 0:
data->len = next->length - sizeof(rattr_t) causa underflow para (size_t)-2this->left -= next->length é left -= 0 — o contador nunca diminuithis->next += next->length é next += 0 — o ponteiro nunca avançaO enumerador retorna o mesmo atributo inválido a cada iteração, travando o loop while (enumerate(...)) do chamador.
O callback de recebimento DAE em eap_radius_dae.c chama request->verify(..., NULL, secret, ...) antes de despachar no código RADIUS. Para code == Access-Request, verify() pula a verificação MD5 do Response-Authenticator e percorre o enumerador de atributos para encontrar Message-Authenticator — então o atributo de comprimento zero prende o parser antes que o segredo compartilhado seja verificado. O ataque não é autenticado.
Um único pacote UDP fixa uma thread de trabalho charon em 100% de CPU para sempre. Repita N vezes para exaurir todas as N threads de trabalho.
Afetados: strongSwan <= 5.9.13. Corrigido no commit e067d24293 do upstream master (2026-04-21).
python3 poc.py --target <charon-host> --port 3799
eap-radius carregado e dae.enable = yes (ouvinte UDP/3799)Este projeto é distribuído sob a GNU GPLv3.
É fornecido para pesquisa de segurança defensiva, educação e testes autorizados. Não use este código contra sistemas ou serviços sem permissão explícita do proprietário.
O uso não autorizado pode violar a lei aplicável. Os autores não concedem permissão para testar sistemas de terceiros e não são responsáveis pelo uso indevido.
Veja o arquivo LICENSE para termos de garantia e responsabilidade.