OpenID Connect客户端Atom耗尽漏洞解析与修复指南

本文详细分析了CVE-2024-31209漏洞,该漏洞存在于Erlang的oidcc库中,由于不当使用list_to_atom函数导致原子表可能被耗尽,进而引发拒绝服务攻击。文章涵盖漏洞影响范围、技术细节、补丁版本及缓解措施。

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/1
  • oidcc_provider_configuration_worker:get_jwks/1

由于在实际应用中,这些函数通常使用静态值作为参数,因此实际被利用的可能性较低

技术细节

漏洞位置

漏洞存在于oidcc_provider_configuration_worker:get_ets_table_name/1函数中。该函数调用了erlang:list_to_atom/1

漏洞代码示例:

1
2
3
4
5
6
7
8
{ok, Claims} =
  oidcc:retrieve_userinfo(
    Token,
    myapp_oidcc_config_provider,
    <<"client_id">>,
    <<"client_secret">>,
    #{}
  )

攻击原理

在极不可能但理论存在的情况下,如果oidcc_provider_configuration_worker:get_*/1函数的第二个参数每次都被传入不同的原子值,将导致:

  1. 每次调用都创建新的原子
  2. 原子表逐渐被填满
  3. 最终导致Erlang节点崩溃

原子在Erlang虚拟机中是不可垃圾回收的,一旦创建就会永久存在于原子表中。

修复方案

已修复版本

  • 3.0.2
  • 3.1.2
  • 3.2.0-beta.3

临时缓解措施

确保仅向相关函数传递有效的提供者配置工作器名称。

参考资源

  1. 安全编码指南:https://erlef.github.io/security-wg/secure_coding_and_deployment_hardening/atom_exhaustion.html
  2. CVE记录:https://www.cve.org/CVERecord?id=CVE-2024-31209
  3. ENISA通告:https://euvd.enisa.europa.eu/enisa/EUVD-2024-1249
  4. GitHub安全通告:GHSA-mj35-2rgf-cv8p
  5. 漏洞源码位置: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库的开发人员,建议:

  1. 立即升级到已修复版本
  2. 审查代码中对该库的调用方式
  3. 避免动态生成传递给相关函数的参数值
  4. 监控Erlang节点的原子表使用情况
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计