
CVE-2026-35333: strongSwan RADIUS attribute iterator infinite loop PoC
strongSwan RADIUS-Attribut-Iterator: Pre-Auth-Endlosschleife / Remote-DoS.
attribute_enumerate() in src/libradius/radius_message.c:247-271 akzeptiert RADIUS-Attribute, deren length-Byte kleiner als sizeof(rattr_t) (2) ist. Für length == 0:
data->len = next->length - sizeof(rattr_t) verursacht einen Unterlauf auf (size_t)-2this->left -= next->length ist left -= 0 — der Zähler sinkt niethis->next += next->length ist next += 0 — der Zeiger rückt nie vorDer Enumerator gibt in jeder Iteration dasselbe fehlerhafte Attribut zurück und hängt dadurch die while (enumerate(...))-Schleife des Aufrufers auf.
Der DAE-Empfangs-Callback in eap_radius_dae.c ruft request->verify(..., NULL, secret, ...) auf, bevor er anhand des RADIUS-Codes verzweigt. Bei code == Access-Request überspringt verify() die Response-Authenticator-MD5-Prüfung und durchläuft den Attribut-Enumerator, um Message-Authenticator zu finden — das Null-Längen-Attribut fängt den Parser also vor der Prüfung des Shared Secrets ab. Der Angriff erfolgt ohne Authentifizierung.
Ein einziges UDP-Paket treibt einen charon-Worker-Thread dauerhaft auf 100 % CPU-Auslastung. Wiederholen Sie das N-mal, um alle N Worker-Threads auszulasten.
Betroffen: strongSwan <= 5.9.13. Behoben im Upstream-Master-Commit e067d24293 (21.04.2026).
python3 poc.py --target <charon-host> --port 3799
eap-radius-Plugin und dae.enable = yes (UDP/3799-Listener)Dieses Projekt wird unter der GNU GPLv3 veröffentlicht.
Es wird für defensive Sicherheitsforschung, Ausbildung und autorisierte Tests bereitgestellt. Verwenden Sie diesen Code nicht gegen Systeme oder Dienste ohne ausdrückliche Genehmigung des Eigentümers.
Unbefugte Nutzung kann geltendes Recht verletzen. Die Autoren erteilen keine Genehmigung, Systeme Dritter zu testen, und übernehmen keine Verantwortung für Missbrauch.
Gewährleistungs- und Haftungsbedingungen entnehmen Sie bitte der Datei LICENSE.