CVE-2025-62378CVE-2025-62378是CommandKit(一个用于构建Discord机器人的discord.js元框架)中存在的一个逻辑缺陷漏洞,CVSS评分为6.1,属于中危级别。该漏洞影响1.2.0-rc.1至1.2.0-rc.11版本。漏洞的核心问题在于消息命令处理器在处理命令别名(alias)时,ctx.commandName属性暴露给中间件函数和命令执行上下文的方式存在缺陷。当通过别名调用消息命令时,ctx.commandName的值反映的是别名而非规范(canonical)的命令名称。这一问题同时存在于中间件函数和命令自身的run函数中。虽然CommandKit的文档并未明确说明ctx.commandName应代表规范命令名称,但其文档中的示例和中间件使用指南隐含地传达了这一含义。中间件示例始终使用ctx.commandName来引用正在执行的命令。如果开发者假设ctx.commandName是规范名称,并将其用于权限检查、速率限制或审计日志等逻辑,可能会引入非预期行为。该漏洞可能导致未授权的命令执行或不准确的访问控制决策。需要注意的是,斜杠命令(slash commands)和上下文菜单命令(context menu commands)不受此漏洞影响。该问题已在1.2.0-rc.12版本中修复,其中ctx.commandName现在无论使用何种别名调用,都会一致地返回实际的规范命令名称。
该漏洞的技术根源在于CommandKit消息命令处理器中命令名称解析与别名映射之间的逻辑不一致。具体而言,在处理消息命令时,框架首先解析用户输入以确定调用的命令标识符。如果用户使用的是命令的别名(alias),框架在将控制权传递给中间件链和最终的run函数时,传递给ctx.commandName的值是用户实际使用的别名字符串,而非该别名映射到的规范命令名称。
从利用方式来看,攻击者可以通过注册具有特定权限要求或审计追踪的命令别名,利用此逻辑缺陷绕过安全检查。例如:1)开发者为管理员命令定义了权限检查中间件,中间件使用ctx.commandName进行权限验证;2)攻击者发现该命令存在别名;3)攻击者通过别名调用该命令;4)由于ctx.commandName返回的是别名而非规范名称,如果中间件的权限检查逻辑仅针对规范名称进行白名单验证,攻击者可能绕过限制。
此外,在速率限制场景中,如果系统基于ctx.commandName进行计数,攻击者可以通过轮换不同的别名来规避单个别名的速率限制。在审计日志场景中,使用别名调用可能导致日志记录的命令名称与实际执行的命令逻辑不一致,影响安全审计的有效性。该漏洞的CVSS向量为CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:N,表明需要本地访问、低权限和低复杂度,但完整性影响为高。