JohannesLks/CVE-2026-35333
GitHub: JohannesLks/CVE-2026-35333
针对 strongSwan RADIUS 属性解析器零长度字段导致的预认证无限循环漏洞的概念验证工具,可远程触发拒绝服务。
Stars: 0 | Forks: 0
# CVE-2026-35333
strongSwan RADIUS 属性迭代器预认证无限循环 / 远程 DoS。
## 漏洞描述
`src/libradius/radius_message.c:247-271` 中的 `attribute_enumerate()`
接受的 RADIUS 属性的 `length` 字节小于
`sizeof(rattr_t)` (2)。当 `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` —— 因此零长度属性会将
解析器困住,这发生在检查共享密钥**之前**。该攻击无需认证。
一个 UDP 数据包即可将一个 charon 工作线程永久占满至 100% CPU。
重复 N 次即可耗尽所有 N 个工作线程。
受影响版本:strongSwan <= 5.9.13。已在上游 master 提交
`e067d24293` (2026-04-21) 中修复。
## 用法
```
python3 poc.py --target --port 3799
```
## 环境要求
- 目标:加载了 `eap-radius` 插件且
`dae.enable = yes`(监听 UDP/3799)的 strongSwan charon
- 攻击者:可访问 UDP/3799 网络连接,Python 3(仅限标准库)
## 参考文献
- https://github.com/strongswan/strongswan/commit/e067d24293
- https://nvd.nist.gov/vuln/detail/CVE-2026-35333
## 法律声明
本项目基于 GNU GPLv3 发布。
其旨在用于防御性安全研究、教育和授权
测试。未经所有者明确许可,请勿将此代码用于攻击系统或服务。
未经授权的使用可能违反适用法律。作者不授予测试
第三方系统的权限,并且对滥用行为不承担责任。
有关保证和责任条款,请参阅 LICENSE 文件。
标签:charon, CVE-2026-35333, DoS, eap-radius, IPsec, PoC, Python, RADIUS, strongSwan, UDP协议, VPN, 内核驱动, 拒绝服务, 整数下溢, 无后门, 无限循环, 暴力破解, 未授权攻击, 漏洞复现, 网络协议, 网络安全, 远程漏洞, 隐私保护, 预认证