
CVE-2026-35333: PoC de bucle infinito del iterador de atributos RADIUS de strongSwan
strongSwan RADIUS attribute-iterator bucle infinito pre-autenticación / DoS remoto.
attribute_enumerate() en src/libradius/radius_message.c:247-271 acepta atributos RADIUS cuyo byte length es menor que sizeof(rattr_t) (2). Para length == 0:
data->len = next->length - sizeof(rattr_t) subdesborda a (size_t)-2this->left -= next->length es left -= 0 — el contador nunca disminuyethis->next += next->length es next += 0 — el puntero nunca avanzaEl iterador devuelve el mismo atributo inválido en cada iteración, bloqueando el bucle while (enumerate(...)) del llamante.
La función de callback de recepción DAE en eap_radius_dae.c llama a request->verify(..., NULL, secret, ...) antes de despachar según el código RADIUS. Para code == Access-Request, verify() omite la comprobación MD5 de Response-Authenticator y recorre el enumerador de atributos para encontrar Message-Authenticator — por lo que el atributo de longitud cero atrapa al analizador antes de que se verifique el secreto compartido. El ataque no está autenticado.
Un solo paquete UDP mantiene un hilo de trabajo de charon al 100% de CPU de forma permanente. Repita N veces para agotar todos los N hilos de trabajo.
Afectado: strongSwan <= 5.9.13. Corregido en el commit e067d24293 de upstream master (2026-04-21).
python3 poc.py --target <charon-host> --port 3799
eap-radius cargado y dae.enable = yes (oyente UDP/3799)Este proyecto se publica bajo la GNU GPLv3.
Se proporciona para investigación defensiva de seguridad, educación y pruebas autorizadas. No utilice este código contra sistemas o servicios sin permiso explícito del propietario.
El uso no autorizado puede violar la ley aplicable. Los autores no otorgan permiso para probar sistemas de terceros y no son responsables del mal uso.
Consulte el archivo LICENSE para conocer los términos de garantía y responsabilidad.