Golang 加密库中发现了一个严重安全漏洞,编号为 CVE-2024-45337(CVSS 9.1)。此漏洞源于对ServerConfig.PublicKeyCallback 函数的滥用,可能导致应用程序和库中的授权绕过。
问题的根源:
PublicKeyCallback函数 旨在允许服务器验证客户端在 SSH 连接期间提供的公钥的真实性。但是,文档明确指出,此回调不能保证用于身份验证的实际密钥。
当应用程序错误地依赖提供给PublicKeyCallback的密钥的顺序或内容来做出授权决策时,就会出现此漏洞。攻击者可以通过以下方式利用此漏洞:
提供多个公钥:攻击者可以发送一系列公钥,意图误导服务器。
使用不同的密钥进行身份验证:即使服务器验证了特定的公钥,攻击者也可以使用完全不同的方法进行身份验证(例如密码、键盘交互)。
所呈现的密钥与实际的身份验证方法之间的不一致可能会欺骗易受攻击的应用程序授予未经授权的访问。
减轻:
升级到 golang.org/x/crypto v0.31.0或更高版本:此版本包含一个关键修复,强制在成功的公钥认证期间使用传递给PublicKeyCallback的最后一个密钥。
正确使用权限:应用程序应利用身份验证回调中的权限字段来存储和检索与身份验证尝试相关的数据。避免根据外部状态或向PublicKeyCallback提供的密钥顺序做出授权决策。
审查第三方库:如果使用与golang.org/x/crypto交互的第三方库,请仔细审查其文档和实施,以防PublicKeyCallback和Permissions字段被滥用。
感谢您抽出
.
.
来阅读本文
点它,分享点赞在看都在这里