将目标转到我们的Ruby on Rails后端,我们收到了两份关于双因素身份验证的漏洞报告。首先,我们收到的一份报告显示攻击者可以通过暴力攻击的手段,获取对非授权帐户的访问权限。
形成原因我们选择使用了Authy作为我们的2FA合作伙伴,但他们的rails gem并未对验证速率做任何限制。
修复我们在程序中添加了相应的速率限制,一旦输入频率超过我们的限制,我们就会对账户进行锁定。
6. 2FA绕过另外份报告显示攻击者可以绕过我们的2FA,使我们的第二个认证因素完全失效。攻击者只需忽略2FA页面,直接在浏览器地址栏输入需要导航的到页面地址即可成功绕过2FA。
形成原因这是本文所提及的漏洞中,最难以被追踪的一个漏洞。Authy rails gem hook至Devise,并在登录后使用以下代码要求2FA:
def check_request_and_redirect_to_verify_token ... id = warden.session(resource_name)[:id] warden.logout warden.reset_session! session["#{resource_name}_id"] = id ... redirect_to verify_authy_path_for(resource_name) end从理论上讲,这串代码在成功登录后会将用户重定向到第二个因素身份验证页面。然而事实并非如此,而是直接将用户重定向到了其导航的页面。
def authenticate?(*args) result = !!authenticate(*args) # Try to log the user in yield if result && block_given? result end 修复将warden.logout行更改为sign_out即可。我们在本地修复了这个问题,并向Authy发起了一个pull request希望为更多的人修复这个问题。
吸取的教训对于一个企业而言即使安全做的再好,也难免会出现一些疏忽。而解决这个问题的最好方法,就是与类似于HackerOne这类的漏洞众测平台建立合作,借助大家的力量来共同维护我们的企业安全。