Another strongSwan vulnerability, another pre-auth headache. CVE-2026-35333 affects strongSwan 5.9.13 when the eap-radius plugin is built with DAE (Dynamic Authorization Extensions) enabled. A single malformed RADIUS packet can trap a charon worker thread in an infinite loop, pegging it at 100% CPU until someone manually intervenes.
The root cause is in attribute_enumerate() inside radius_message.c. The function walks a RADIUS message’s attribute list but doesn’t reject attributes with a length byte of zero. When it hits one, the iterator never advances — the pointer stays put, the length computation underflows, and the loop spins forever.
What makes this pre-auth is subtle but important. The verify() function uses the same broken iterator to find the Message-Authenticator attribute before the Response-Authenticator MD5 check runs. For Access-Request packets (RADIUS code 1), the MD5 check is skipped entirely. So an attacker who sends a packet with a single zero-length attribute as the first entry can lock up a worker thread without knowing any shared secret.
Send N packets, exhaust N threads. Full denial of service, no authentication required. The fix landed in commit e067d24293. If you can’t upgrade yet, consider restricting UDP/3799 access to trusted RADIUS peers only.
