剖析CVE-2024-31209:OIDC客户端中的原子耗尽漏洞

本文详细分析了CVE-2024-31209漏洞,该漏洞存在于Erlang的oidcc库中,攻击者可能通过特定函数调用导致原子表耗尽,引发服务拒绝。文章涵盖了受影响版本、漏洞原理、修复版本以及缓解措施。

OpenID Connect客户端Atom耗尽漏洞(CVE-2024-31209)

漏洞概述

该漏洞存在于erlang的oidcc(OpenID Connect Client)库中,被追踪为CVE-2024-31209,严重等级为中等。它可能导致通过原子(Atom)耗尽进行的拒绝服务(DoS)攻击。

影响范围

受影响版本

  • >= 3.0.0, < 3.0.2
  • >= 3.1.0, < 3.1.2
  • >= 3.2.0-beta.1, < 3.2.0-beta.3

已修复版本

  • 3.0.2
  • 3.1.2
  • 3.2.0-beta.3

漏洞详情

影响

通过调用oidcc_provider_configuration_worker:get_provider_configuration/1oidcc_provider_configuration_worker:get_jwks/1函数,可能引发原子耗尽,从而导致拒绝服务。

由于名称通常作为静态值在使用oidcc的应用程序中提供,因此此漏洞被利用的可能性较低。

技术细节

漏洞存在于oidcc_provider_configuration_worker:get_ets_table_name/1函数中。

该函数内部调用了erlang:list_to_atom/1。 (参考代码行:https://github.com/erlef/oidcc/blob/018dbb53dd752cb1e331637d8e0e6a489ba1fae9/src/oidcc_provider_configuration_worker.erl#L385-L388)

可能存在一种情况(概率极低),即oidcc_provider_configuration_worker:get_*/1的第二个参数每次调用时都使用不同的原子(atom),这最终会导致原子表被填满,进而使节点崩溃。

漏洞示例

以下代码示例说明了漏洞存在的上下文:

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

修复与缓解

补丁

该漏洞已在版本3.0.23.1.23.2.0-beta.3中得到修复。

临时解决方案

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

参考链接

漏洞元数据

  • CWE ID: CWE-400(不受控制的资源消耗)
  • CVSS 3.1 分数: 5.3(中等)
  • CVSS 向量: CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:C/C:N/I:N/A:H
  • EPSS 分数: 0.019%(未来30天内被利用的概率估计)

致谢

此漏洞由以下人员发现和修复:

  • 发现者: mohamedalikhechine, robertfiko, SAFE-Erlang-Elixir
  • 修复开发者: maennchen
  • 修复审核者: paulswartz
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计