OpenID Connect客户端Atom Exhaustion漏洞分析(CVE-2024-31209)
漏洞概述
CVE-2024-31209是一个存在于Erlang的OpenID Connect客户端库(oidcc)中的中度严重性安全漏洞。该漏洞可能导致原子表耗尽(Atom Exhaustion),从而引发拒绝服务(DOS)攻击。
受影响版本
- 版本 >= 3.0.0, < 3.0.2
- 版本 >= 3.1.0, < 3.1.2
- 版本 >= 3.2.0-beta.1, < 3.2.0-beta.3
漏洞影响
通过调用以下函数可能触发DOS攻击:
oidcc_provider_configuration_worker:get_provider_configuration/1oidcc_provider_configuration_worker:get_jwks/1
由于在实际应用中,这些函数通常使用静态值作为参数,因此实际被利用的可能性较低。
技术细节
漏洞位置
漏洞存在于oidcc_provider_configuration_worker:get_ets_table_name/1函数中。该函数调用了erlang:list_to_atom/1。
漏洞代码示例:
|
|
攻击原理
在极不可能但理论存在的情况下,如果oidcc_provider_configuration_worker:get_*/1函数的第二个参数每次都被传入不同的原子值,将导致:
- 每次调用都创建新的原子
- 原子表逐渐被填满
- 最终导致Erlang节点崩溃
原子在Erlang虚拟机中是不可垃圾回收的,一旦创建就会永久存在于原子表中。
修复方案
已修复版本
- 3.0.2
- 3.1.2
- 3.2.0-beta.3
临时缓解措施
确保仅向相关函数传递有效的提供者配置工作器名称。
参考资源
- 安全编码指南:https://erlef.github.io/security-wg/secure_coding_and_deployment_hardening/atom_exhaustion.html
- CVE记录:https://www.cve.org/CVERecord?id=CVE-2024-31209
- ENISA通告:https://euvd.enisa.europa.eu/enisa/EUVD-2024-1249
- GitHub安全通告:GHSA-mj35-2rgf-cv8p
- 漏洞源码位置:https://github.com/erlef/oidcc/blob/018dbb53dd752cb1e331637d8e0e6a489ba1fae9/src/oidcc_provider_configuration_worker.erl#L385-L388
CVSS评分详情
总体评分:5.3(中度)
CVSS v3.1基准指标
- 攻击向量:本地(AV:L)
- 攻击复杂度:高(AC:H)
- 所需权限:高(PR:H)
- 用户交互:无(UI:N)
- 影响范围:改变(S:C)
- 机密性影响:无(C:N)
- 完整性影响:无(I:N)
- 可用性影响:高(A:H)
相关弱点
CWE-400:不受控制的资源消耗 产品未能正确控制有限资源的分配和维护。
致谢
- 发现者:mohamedalikhechine, robertfiko
- 修复开发者:maennchen
- 修复审核者:paulswartz
- 发现组织:SAFE-Erlang-Elixir
安全建议
对于使用oidcc库的开发人员,建议:
- 立即升级到已修复版本
- 审查代码中对该库的调用方式
- 避免动态生成传递给相关函数的参数值
- 监控Erlang节点的原子表使用情况