
CVE-2026-35333 : Preuve de concept de boucle infinie dans l'itérateur d'attributs RADIUS de strongSwan
Boucle infinie pré-authentification / déni de service distant dans l'itérateur d'attributs RADIUS de strongSwan.
attribute_enumerate() dans src/libradius/radius_message.c:247-271
accepte des attributs RADIUS dont l'octet length est inférieur à
sizeof(rattr_t) (2). Pour length == 0 :
data->len = next->length - sizeof(rattr_t) déborde négativement vers (size_t)-2this->left -= next->length est left -= 0 — le compteur ne décroît jamaisthis->next += next->length est next += 0 — le pointeur n'avance jamaisL'énumérateur retourne le même attribut factice à chaque itération,
bloquant la boucle while (enumerate(...)) de l'appelant.
La fonction de rappel DAE dans eap_radius_dae.c appelle
request->verify(..., NULL, secret, ...) avant de dispatcher sur le
code RADIUS. Pour code == Access-Request, verify() ignore la
vérification MD5 du Response-Authenticator et parcourt l'énumérateur
d'attributs pour trouver Message-Authenticator — l'attribut de
longueur nulle piège donc l'analyseur avant que le secret partagé
ne soit vérifié. L'attaque est non authentifiée.
Un paquet UDP consomme un thread de travail de charon à 100% CPU en permanence. Répéter N fois pour épuiser les N threads de travail.
Versions affectées : strongSwan <= 5.9.13. Corrigé dans le commit amont
e067d24293 (2026-04-21).
python3 poc.py --target <charon-host> --port 3799
eap-radius chargé et
dae.enable = yes (écouteur UDP/3799)Ce projet est publié sous la licence GNU GPLv3.
Il est fourni pour la recherche en sécurité défensive, l'éducation et les tests autorisés. N'utilisez pas ce code contre des systèmes ou services sans autorisation explicite du propriétaire.
L'utilisation non autorisée peut enfreindre la loi applicable. Les auteurs n'autorisent pas les tests sur des systèmes tiers et ne sont pas responsables des mauvais usages.
Consultez le fichier LICENSE pour les termes de garantie et de responsabilité.