CVE-2024-45337
Misuse of connection.serverAuthenticate 可能导致 golang.org/x/crypto 中的授权绕过
- 已发布
- 2024年12月11日
- 已更新
- 2025年2月18日
- 分配 CNA
- Go
- 观察到的证据
- 2026年8月8日
初级CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N低 · 未来 30 天
- 百分位
- 87.5%
- 型号日期
- 2026年9月21日
EPSS 是统计估计,而不是确定性或影响衡量标准。将其与 CVSS、KEV 状态、暴露程度和您的环境相结合。
总结
应用程序和库若误用 `connection.serverAuthenticate`(通过回调字段 `ServerConfig.PublicKeyCallback`),可能容易遭受授权绕过。`ServerConfig.PublicKeyCallback` 的文档说明:“调用此函数并不保证所提供的密钥确实用于身份验证。”具体而言,SSH 协议允许客户端在证明控制相应私钥之前,先询问公钥是否可接受。`PublicKeyCallback` 可能会被多次调用并传入多个密钥,而密钥提供的顺序无法用于推断客户端最终成功使用哪个密钥进行身份验证(如果有的话)。某些应用程序会存储传递给 `PublicKeyCallback` 的密钥(或派生信息),并在连接建立后基于这些信息做出与安全相关的决策,此类应用可能会做出错误的假设。例如,攻击者可能先发送公钥 A 和 B,然后使用 A 进行身份验证。`PublicKeyCallback` 只会被调用两次,第一次传入 A,第二次传入 B。易受攻击的应用程序随后可能会基于密钥 B 做出授权决策,而攻击者实际上并不控制 B 对应的私钥。由于此 API 被广泛误用,作为部分缓解措施,`golang.org/x/[email protected]` 强制执行以下属性:当通过公钥成功进行身份验证时,最后一次传递给 `ServerConfig.PublicKeyCallback` 的密钥将是用于验证连接的密钥。如有必要,`PublicKeyCallback` 现在可能会使用同一密钥被多次调用。请注意,如果连接随后通过其他方法(如 `PasswordCallback`、`KeyboardInteractiveCallback` 或 `NoClientAuth`)进行身份验证,客户端仍可能不控制最后一次传递给 `PublicKeyCallback` 的密钥。用户应使用各种身份验证回调返回的 `Permissions` 值中的 `Extensions` 字段来记录与身份验证尝试关联的数据,而不是引用外部状态。连接建立后,可通过 `ServerConn.Permissions` 字段检索与成功身份验证尝试对应的状态。请注意,某些第三方库会在多次身份验证尝试之间共享 `Permissions` 类型,从而误用该类型;使用第三方库的用户应参考相关项目获取指导。
来源
3针对 Gitea 和 Forgejo 的 CVE-2024-45337 概念验证
CVE-2024-45337 的概念验证(POC)
负责任的使用
仅在您拥有或有权测试的系统上使用漏洞信息。 Kitploit 链接到公共研究元数据,并且不存储漏洞代码或恶意负载。