
CVE-2026-35333: PoC del loop infinito dell'iteratore degli attributi RADIUS di strongSwan
Ciclo infinito pre-autenticazione nell'iteratore di attributi RADIUS di strongSwan / DoS remoto.
attribute_enumerate() in src/libradius/radius_message.c:247-271
accetta attributi RADIUS il cui byte length è minore di
sizeof(rattr_t) (2). Per length == 0:
data->len = next->length - sizeof(rattr_t) va in underflow a (size_t)-2this->left -= next->length è left -= 0 — il contatore non diminuisce maithis->next += next->length è next += 0 — il puntatore non avanza maiL'enumeratore restituisce lo stesso attributo fasullo a ogni iterazione,
bloccando il ciclo while (enumerate(...)) del chiamante.
Il callback di ricezione DAE in eap_radius_dae.c chiama
request->verify(..., NULL, secret, ...) prima di fare dispatch sul
codice RADIUS. Per code == Access-Request, verify() salta il
controllo MD5 di Response-Authenticator e percorre l'enumeratore di attributi
per trovare Message-Authenticator — quindi l'attributo a lunghezza zero
intrappola il parser prima che il segreto condiviso venga verificato.
L'attacco non richiede autenticazione.
Un singolo pacchetto UDP porta un thread worker di charon al 100% di CPU per sempre. Ripeti N volte per esaurire tutti gli N thread worker.
Versioni interessate: strongSwan <= 5.9.13. Corretto nel commit upstream del master
e067d24293 (2026-04-21).
python3 poc.py --target <charon-host> --port 3799
eap-radius caricato e
dae.enable = yes (listener UDP/3799)Questo progetto è rilasciato sotto GNU GPLv3.
È fornito per ricerca di sicurezza difensiva, istruzione e test autorizzati. Non utilizzare questo codice contro sistemi o servizi senza esplicita autorizzazione del proprietario.
L'uso non autorizzato può violare la legge applicabile. Gli autori non concedono il permesso di testare sistemi di terze parti e non sono responsabili dell'uso improprio.
Consulta il file LICENSE per i termini di garanzia e responsabilità.