Guardio研究人员发现了Evernote Web Clipper(印象笔记·剪藏)Chrome扩展存在逻辑编码错误漏洞,攻击者利用这些漏洞可以打破隔离机制并以用户的名义执行代码,并对非Evernote域名授予用户敏感信息的访问权限。财务信息、社交媒体、个人邮件等都是攻击的目标。该XSS漏洞CVE编号为CVE-2019-12592
。
大多数互联网用户并不下载可执行文件或安装专门的软件。除了社交账号、商城和金融数据外,浏览器内直接也能提供一些扩展类的工具,来完成类似的功能。但这对app作者带来了挑战。一些工具需要额外的访问权限来更好地执行任务,比较好的解决方案就是创建一个浏览器扩展。App作者的意图是提供更好的用户体验,扩展一般拥有访问一些敏感资源的权限,也比传统的网站安全风险要更高一些。
研究人员分析发现了Evernote Web Clipper(印象笔记·剪藏)chrome扩展的漏洞。因为Evernote用户基数庞大,因此该漏洞影响的用户数预计超过470万。
与其他扩展漏洞不同的是,该漏洞直接影响第三方服务,而且并不仅限于个人的Evernote账号。
为了模拟攻击者如何利用该漏洞,Guardio研究人员设计了一个PoC来从潜在受害者处窃取隐私数据。通过将这些步骤串起来,很容易就可以进行攻击。
PoC步骤:
为了详细了解漏洞的情况,首先需要了解Evernote Web Clipper如何与网站和frame进行交互。
Evernote的代码注入链是从扩展的manifest (manifest.json)开始的,其中BrowserFrameLoader.js content脚本会被注入到所有页面和frame中。由于注入到frame的敏感性,只有这一个脚本使用了all_frames来减少攻击面。内容脚本的主要的主要目的是作为扩展的C2服务器来加载其他必需的代码到页面中。
对通信信道来说,脚本使用通过postMessage API
的Windows消息机制(Windows Messaging)。作为一个小的注入器脚本,它只对少量的消息类型提供handler,其中一个就是installAndSerializeAll命令来注入到第二阶段FrameSerializer.js
和执行序列化。该机制使用了一种弱认证方案,这种弱认证方案并不存在漏洞,但这是漏洞利用链的重要一步,因为运行在web沙箱环境中的脚本会触发命令。消息处理器(message handler)的参数作为命令请求消息的payload域。
最后,因为提供有效URL给扩展域名(chrome-extension://...
)的_getBundleUrl
函数中的逻辑检查和输入检查不当,研究人员发现URL的第一部分可以被handler的resourcePath
输入参数进行操作。
黑客利用漏洞利用可以加载黑客远程控制的脚本到其他网站环境,只需要一个交单的window.postMessage
命令即可。通过滥用Evernote的注入基础设施,恶意脚本会绕过同源策略的限制,注入到页面的所有目标frame中。
这提供了一个通用XSS注入到黑客控制的网站的所有frame的方法。
Evernote已经发布了补丁和新版本。用户可以复制chrome://extensions/?id=pioclpoplcdbaefihamjohnefbikjilc
到Chrome扩展页来检查是否是最新版本,并确保版本号大于7.1.1。