漏洞概述 CVE-2026-56812 Phoenix JavaScript presence client 在 和 中,当 presence keys 与 成员(如 、 、 、 )发生冲突时,会导致客户端崩溃。 CVSS 4.0 Score: 6.3 (MEDIUM) 漏洞描述: 该漏洞源于对异常条件的检查不当。Phoenix JavaScript presence client 使用简单的真值测试( )来检查 presence 是否已存在,而不是使用自有属性检查。由于应用程序使用由客户端提供的用户名或 ID 跟踪 presence,攻击者可以控制 presence keys。当用户加入一个通道并选择一个作为 成员键时,查找会返回 JavaScript 内置的 而不是 。因为原型是 truthy 的,代码将其视为现有的 presence 并读取 ,从而抛出一个未捕获的 。 异常从 presence 消息处理程序中传播出来,因此本地状态从未更新, 也从未触发。由于恶意 key 在服务器上被跟踪,它会在每次 presence 更新时重新推送并重新抛出,导致 presence sync 在攻击者离开后仍然损坏。 影响范围: 模块: Presence 源文件: 受影响的版本: - 1.2.0-rc.0 到 1.5.15 - 1.6.0-rc.0 到 1.6.17 - 1.7.0-rc.0 到 1.7.24 - 1.8.0-rc.0 到 1.8.9 修复方案: 服务器端: - 1.2.0-rc.0 到 1.5.15:修复于 < 1.5.15 - 1.6.0-rc.0 到 1.6.17:修复于 < 1.6.17 - 1.7.0-rc.0 到 1.7.24:修复于 < 1.7.24 - 1.8.0-rc.0 到 1.8.9:修复于 < 1.8.9 Git 提交: - 未修复于 - 未修复于 - 未修复于 - 未修复于 配置建议: 应用程序必须使用 Phoenix.Presence(或以其他方式驱动 Phoenix JavaScript presence client)并在受信任的客户端输入(例如用户名或 ID)下跟踪 presence。从服务器控制的、经过验证的值派生的 presence keys 不受影响。 变通方法: 拒绝或清理与 JavaScript 成员名称(例如 、 、 、 、 )冲突的 presence keys,或者在调用 之前为每个 presence key 添加固定前缀,以确保没有 key 可以等于 prototype 成员名称。或者,从服务器控制的、经过验证的值派生 presence keys,而不是使用原始用户输入。 参考链接: GitHub Advisory OSV.dev GitHub Commits GitHub Commits GitHub Commits GitHub Commits 贡献者: Finder: Peter Ullrich Analyst: Jonatan Männchen Analyst: Jose Valim Remediation developer: Steffen Deusch