Bouncy Castle支持大量的密码术算法,是比较常用的密码术包。近日,新思科技(Synopsys)发现其存在漏洞,攻击者可以利用该漏洞,以合法用户的身份执行一系列操作,获取或者篡改信息。
CVE-2020-28052披露在Bouncy Castle轻量级密码术包的OpenBSDBcrypt类中发现绕过身份验证的漏洞,攻击者可以避开密码检查。
概述
新思科技网络安全研究中心(CyRC)研究人员发现了CVE-2020-28052漏洞,即广泛使用的Java密码库Bouncy Castle中的OpenBSDBcrypt类的绕过身份验证的漏洞。该类实现了用于密码哈希的Bcrypt算法。攻击者可以在使用Bouncy Castle的OpenBSDBcrypt类的应用程序中绕过密码检查。
在提交(00dfe74aeb4f6300dd56b34b5e6986ce6658617e)中引入了OpenBSDBcrypt.doCheckPassword方法中的该漏洞。
doCheckPassword方法的验证程序实现是有缺陷的。该代码检查值为0到59(包括0和59)字符在字符串中的索引,而不是检查在字符串中0到59之间位置的字符值是否匹配。这意味着一系列密码,其生成的哈希(例如,哈希值不包含介于0x00和0x3B之间的字节)会与其它不包含这些字节的密码哈希匹配。通过此检查意味着攻击者不需要与存储的哈希值逐字节匹配。
在使用Bcrypt.doCheckPassword()检查密码的大多数情况下,成功地利用漏洞将绕过身份验证。
漏洞利用
攻击者必须尝试暴力破解密码,直到触发绕过身份验证。我们的实验表明,20%的测试密码在1,000次内尝试中被成功绕过。某些密码哈希需要进行更多尝试,具体取决于字符值在0到60之间(1到59)的字节数。此外,我们的调查表明,通过足够的尝试可以绕过所有密码哈希。在极少数情况下,任何输入都可以绕过一些密码哈希。
受影响的软件
CVE-2020-28052漏洞影响了Bouncy Castle 1.65(发布于2020年3月31日)和Bouncy Castle 1.66(发布于7/4/2020)。
Bouncy Castle 1.67(发布于2020年11月1日)修复了此漏洞。 1.65之前的版本不受CVE-2020-28052漏洞的影响。
注:基于漏洞披露,新思科技研究了其产品,发现在该披露发布之时没有产品使用过Bouncy Castle版本1.65或1.66。
影响
基于哈希的Bcrypt身份验证可应用在身份验证检查,如在Web应用程序和API中身份验证检查。
CVSS 3.1 评分
Bouncy Castle是一个软件库。在确定通用漏洞评分系统(CVSS)分数时,假定了以下最坏情况(遵循FIRST CVSS软件库评分准则):
Bcrypt哈希用于检查用户提供的密码。一旦触发了绕过身份验证,攻击者就可以执行与合法用户相同的操作(例如,获得SSO,即single-sign-on,单次登录系统,管理员级别的访问权限)。
Vector: AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H/E:P/RL:O/RC:C
评分: 8.1
漏洞可利用性指标:
攻击途径Attack Vector (AV): N = Network 网络
攻击复杂程度Attack Complexity (AC): H = High 高
所需权限Privileges Required (PR): N = None 无
用户交互User Interaction (UI): N = None 无
范围Scope (S): C = Changed scope 范围变更
影响指标
机密性影响Confidentiality Impact (C): H = High impact 影响大
完整性影响Integrity Impact (I): H = High impact 影响大
可用性影响Availability Impact (A): H = High impact 影响大
修复
强烈建议该库的软件供应商和用户升级到Bouncy Castle Java版本1.67或更高版本。
漏洞发现者
一组位于芬兰奥卢的新思科技网络安全研究中心的研究人员发现了此漏洞:
Matti Varanka
Tero Rontti
新思科技感谢Bouncy Castle团队及时地响应并修复此漏洞。
时间线
2020年10月20日:发现该Bouncy Castle漏洞
2020年10月22日:新思科技确认没有产品使用此漏洞影响的版本
2020年10月27日:新思科技揭露Bouncy Castle的漏洞
2020年10月28日:Bouncy Castle确认存在漏洞
2020年11月2日: 新思科技验证Bouncy Castle修复漏洞
2020年12月17日:发布修复建议