Ejabberd 拒绝服务漏洞剖析:畸形消息节如何导致无限循环

本文详细分析了CVE-2011-4320漏洞,该漏洞存在于ejabberd的mod_pubsub模块中。远程认证用户通过发送一个缺乏node属性的publish标签消息节,可触发无限循环,导致服务器资源耗尽。文章涵盖了受影响的版本、修复版本及技术原理。

Ejabberd DoS via malformed stanza · CVE-2011-4320

摘要

Ejabberd是一款流行的开源即时通讯服务器,使用Erlang/OTP语言编写。CVE-2011-4320是一个存在于ejabberd mod_pubsub模块中的拒绝服务漏洞。远程认证攻击者可以通过发送一个格式畸形(缺乏node属性)的publish标签XMPP消息节(stanza),触发服务器进入无限循环,从而耗尽系统资源,导致服务不可用。

受影响版本

  • erlang / ejabberd (Erlang)
  • 受影响版本:
    • <= 2.1.8
    • >= 3.0.0-alpha-1, <= 3.0.0-alpha-3
  • 已修复版本:
    • 2.1.9
    • 3.0.0-alpha-4

漏洞详情

漏洞根源于mod_pubsub.erl模块的代码逻辑缺陷。当模块处理一个包含publish标签但缺少必需的node属性的XMPP消息节时,其解析逻辑会进入一个无法退出的循环状态。这导致Erlang虚拟机中处理该请求的进程(或整个服务器,取决于具体情况)持续占用CPU资源,无法处理其他请求,从而实现拒绝服务攻击。

漏洞利用

攻击者需要拥有一个有效的认证账户。通过向存在漏洞的ejabberd服务器发送特制的XMPP消息节(即一个<publish/>元素,其内部缺少或具有格式错误的node属性),即可触发此漏洞。

修复与缓解

  • 官方修复: 建议所有用户升级到已修复的版本(2.1.9 或 3.0.0-alpha-4)。修复代码提交可见于ejabberd的Git仓库提交d3c4eabd5b4d67
  • 临时缓解: 在网络层面限制或监控异常的XMPP流量模式,或通过防火墙策略限制对发布-订阅服务的访问。

相关链接

安全分类

  • 严重等级: Moderate(中危)
  • CWE 弱点: CWE-400 - 不受控制的资源消耗
  • EPSS 分数: 1.178% (第78百分位数,估计未来30天内被利用的概率)
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计