
CVE-2026-35333: strongSwan RADIUS attribute iterator infinite loop PoC
strongSwan RADIUS attribute-iterator pre-auth 無限ループ / リモートDoS
attribute_enumerate() in src/libradius/radius_message.c:247-271
は、length バイトが sizeof(rattr_t) (2) より小さいRADIUS属性を受け入れます。length == 0 の場合:
data->len = next->length - sizeof(rattr_t) は (size_t)-2 にアンダーフローしますthis->left -= next->length は left -= 0 となり、カウンタが減少しませんthis->next += next->length は next += 0 となり、ポインタが進みません列挙子は毎回同じ偽の属性を返し、呼び出し元の while (enumerate(...)) ループをハングさせます。
eap_radius_dae.c 内のDAE受信コールバックは、RADIUSコードをディスパッチする前に request->verify(..., NULL, secret, ...) を呼び出します。code == Access-Request の場合、verify() はResponse-Authenticator MD5チェックをスキップし、属性列挙子を走査して Message-Authenticator を見つけます。そのため、長さゼロの属性は、共有秘密がチェックされる前にパーサをトラップします。この攻撃は認証されていません。
1つのUDPパケットで、charonワーカースレッドが永久に100% CPUを使用します。これをN回繰り返して、N個すべてのワーカースレッドを枯渇させます。
影響を受けるバージョン: strongSwan <= 5.9.13。上流のmasterコミット e067d24293 (2026-04-21) で修正されました。
python3 poc.py --target <charon-host> --port 3799
eap-radius プラグインがロードされ、dae.enable = yes (UDP/3799リスナー) が設定されたstrongSwan charonこのプロジェクトはGNU GPLv3の下で公開されています。
これは防御的なセキュリティ研究、教育、および許可されたテストのために提供されています。所有者の明示的な許可なしに、このコードをシステムやサービスに対して使用しないでください。
無許可の使用は適用される法律に違反する可能性があります。著者はサードパーティのシステムをテストする許可を付与しておらず、誤用に対する責任を負いません。
保証と責任の条件については LICENSE ファイルを参照してください。