据报道,Ruby on Rails 中的摘要认证代码存在安全问题。此漏洞可能允许用户绕过您的密码保护机制。此漏洞已在多个网站上公开,建议用户立即采取下列缓解措施。
问题源于对 authenticate_or_request_with_http_digest 传入块的处理。此块必须返回明文形式的用户密码或用户的 sha1 哈希密码。遗憾的是,文档对此说法不够明确,并且在引用的示例中,如果找不到用户,则会返回 nil。如果用户不存在,正确的行为应该是返回 false。
如果返回值为 nil,则 rails 会针对提供的密码对该值进行验证。基于此,攻击者可以提供一个无效的用户名且不提供密码,并且可以成功验证。
我们已更改相关代码的行为,将 nil 设置为验证失败。此修复程序已推送到 2-3-stable 中,并且会在未来几天发布的 2.3.3 中提供。在提交 1ad57cfe2fbda58439e4b7f84008ad23bc68e8b0 之后的 edge rails 的所有版本都包含此修复程序。
用户无需升级即可保护自己,只需确保他们的身份验证块从不返回 nil 即可。举个文档中的例子
authenticate_or_request_with_http_digest(REALM) do |username| USERS[username] end
应该改为类似于以下形式
authenticate_or_request_with_http_digest(REALM) do |username| USERS[username] || false end
由于沟通困难以及报告者和安全团队之间的误解。此漏洞已在多个网站上公开披露,建议用户立即更新其应用程序。我们正采取措施,确保今后安全电子邮件的可靠性会更高。我们对此披露的性质表示遗憾,并会努力确保今后不再发生此类事件。