请注意:厂商已经成功修复了这个问题,并将有关信息告知了Lastpass的用户。
漏洞状态:已修复
修复时限:90天
漏洞等级:严重
厂商:LastPass
产品:LastPass
报告日期:2016年7月26日
漏洞概述
仅仅通过访问一个网页,别人就可以窃取你所有的密码。这听起来虽然有些骇人听闻,但这确实是真的。
我一开始也不相信这种说法,于是我便决定对LastPass浏览器插件进行安全分析。在得到了最终的分析结果之后,我才不得不承认这确实是事实。
可能有的读者并不了解LastPass是什么。LastPass是目前世界上最为流行的密码管理器。LastPass采用了强大的加密算法,并且支持目前主流的网页浏览器。除此之外,它还可以使用户的网页浏览更加轻松和安全。LastPass将会对用户存储在本机的密码进行加密处理。在LastPass的帮助下,用户可以将密码存储在PC,Mac,或者移动设备上,只有LastPass密码管理器才能解锁这些密码。所以,即使当用户更换了计算机或者登录终端,也无需过多的担心。因为用户的加密数据将会备份在LastPass的官方账号中,用户只需要登录LastPass官方主页,并安装LastPass,就可以直接恢复出用户的密码。根据官方介绍,LastPass采用了256位AES加密算法来对本地和网站上的密码数据库进行加密,并在数据传输时使用了SSL加密连接等措施来确保数据的安全。
LastPass公司的首席执行官 Joe Siegrist曾表示:“LastPass所采用的加密保护措施足以保护绝大多数用户的安全,LastPass对认证哈希加强了防护,采用了随机因子,并在客户端外的PBKDF2-SHA256服务器端实施了10万次循环处理。”
漏洞分析
为此,我对Windows操作系统下的LastPass 4.1.20a版本进行了分析,并发现了一些问题。我在分析的过程中发现,LastPass插件会在我所访问的每一个网页页面中添加某些HTML代码(HTML元素和事件处理器),所以我决定对LastPass插件进行更加深入地分析,以了解其具体的工作机制。在几杯咖啡下肚之后,我发现了一些非常糟糕的东西。没错,真的非常糟糕。
LastPass插件会利用css代码来修改HTML中的<input>标签,并添加了一个点击事件处理器来为插件生成一个专用的iframe。这样一来,网页页面就可以利用Javascript代码来创建一个鼠标点击事件(MouseEvent()),并利用正确的X:Y坐标来“模拟点击”LastPass程序图标。通常情况下,网页是不能够直接定向到某一url地址资源的,但是它可以让LastPass插件来替它完成这部分操作。
相关代码如下图所示:
插件可以通过推送窗口信息来与iframe进行通信,事件处理器会对交互信息进行进一步的验证处理。但是这并没有什么意义,因为操作窗口完全是由攻击者控制的,攻击者可以直接插入他们自己的事件处理器来覆盖浏览器本身的事件处理器,并修改合法信息。
这部分代码如下图所示:
这样一来,攻击者就可以让LastPass来处理并执行一个openURL命令。攻击者可以创建或删除文件,执行任意脚本,并窃取所有的密码。除此之外,攻击者还可以让目标用户登录他们自己的LastPass账号,这样就可以窃取到所有新添加进去的账号密码数据了。
问题描述
这个漏洞将允许我直接从插件的自动填写功能中提取出用户的密码。首先,代码会对URL地址进行解析,以获取到当前浏览器正在访问的域名。然后,插件便会利用存储在系统中的用户凭证来填写网页给出的登录表单。但是,负责解析URL地址的这部分代码中存在严重的安全漏洞。
负责解析URL地址的功能代码如下图所示:
将URL地址:http://avlidienbrunn.se/@twitter.com/@hehe.php输入到浏览器的地址栏中之后,浏览器将会认为用户需要访问的域名是avlidienbrunn.se,但是LastPass插件却会认为目标域名是twitter.com。由于这部分代码只对最后一个“@”符号之后的内容进行了URL编码,所以URL中实际的域名将会被视作用户名来处理。
这个问题非常的严重,严重得有些令人难以置信
从下面的图片中可以看到,LastPass插件会使用我存储在数据库中的登录凭证来填写twitter.com的登录表单。填写完成之后,我可以直接访问另一个常用的网站,并提取出这些登录凭证信息。情况如下图所示:
在我将报告提交给了LastPass公司之后,公司的技术人员当时表示,我所提交的漏洞代码只能在他们的火狐浏览器插件中生效。所以他们认为只有火狐浏览器的LastPass插件存在这个漏洞。
LastPass公司回复的完整邮件内容如下:
非常感谢你负责任地将有关该漏洞的详细信息报告给我们。
公司的安全技术人员已经证实,攻击者的确可以利用你所提供的方法来截获LastPass的密码数据,所以这确实是一个安全漏洞。除此之外我们还证实了,这个问题只会影响火狐浏览器的LastPass插件。
公司的技术人员目前正在处理抓紧处理这一漏洞,我们会在这周周末之前向用户推送更新补丁。
这个漏洞的条件符合我们漏洞奖励计划的要求,所以我们很高兴能够给你提供漏洞奖励,以奖励你为我们的产品安全所做出的贡献。
我通过LastPass的漏洞提交页面将该漏洞的信息报告给了LastPass,LastPass的工作人员非常负责任地处理了我所提交的报告。他们真的非常的专业,仅在一天不到的时间里就开发出了针对这一漏洞的安全补丁。除此之外,他们还给我提供了一千美金的漏洞奖励。但是我决定将这笔漏洞奖金捐赠给慈善机构和国际特赦组织,
难道使用密码管理器是一个错误的选择吗?
我们是不是应该停止使用密码管理器?答案肯定是否定的,使用密码管理器仍然要比密码重用好得多。所谓密码重用就是指在多个网站或账户上重复使用相同的密码。当这样的密码一旦暴露,再加上姓名,登录名,电子信箱地址等其它可识别信息,就会为用户带来信息安全风险。而LastPass这样的密码管理器可以帮助用户保存多个网站的密码,随后自动登录这些网站,因此用户将没有必要再记忆多个单独的密码。
所以我建议用户暂时先禁用该插件的表单自动填写功能,因为这种问题非常的常见,该漏洞并不是第一个自动填写漏洞,而且我认为它也不会是最后一个。除此之外,如果有条件的话,我建议你用户开启“多因素身份验证功能”,这种方式也可以提升用户数据的安全性。