TouchEn nxKey键盘加密应用程序出现的许多漏洞很容易使其被黑化( 二 )


恶意网页是否可以注册其他网页的回调?有两个障碍:
目标网页需要有一个含有id="setcallback"的元素;
回调函数被传递到特定的选项卡;
第一个障碍意味着只有使用nxKey SDK的网站会受到攻击 。当通过浏览器扩展进行通信时,这些扩展将创建必要的元素 。通过WebSockets进行通信不会创建这个元素,这意味着使用更新nxKey SDK的网站不会受到影响 。
第二个障碍似乎意味着只有加载在当前选项卡中的页面才会被攻击,例如加载在框架中的页面 。除非nxKey应用程序在其响应中设置了错误的tabid值 。
事实验证,这非常容易 。虽然应用程序使用适当的JSON解析器来处理传入数据,但响应是通过调用sprintf_s()生成的,不执行转义 。因此,操纵一些响应属性并向其添加引号可以注入任意JSON属性 。

TouchEn nxKey键盘加密应用程序出现的许多漏洞很容易使其被黑化

文章插图
id属性将被复制到应用程序的响应中,这意味着响应会突然获得一个名为x的新JSON属性 。此漏洞允许将tabid的任何值注入到响应中 。
恶意页面如何知道银行选项卡的ID?它可以使用自己的标签ID (TouchEn扩展有助于暴露),并尝试猜测其他标签ID 。或者它可以简单地将此值留空,在这种情况下,扩展很有帮助:
TouchEn nxKey键盘加密应用程序出现的许多漏洞很容易使其被黑化

文章插图
因此,如果tabid值为空,它将向当前活动的选项卡传递消息 。
这意味着会发生如下可能的攻击:
1.在新选项卡中打开银行网站,它将成为活动选项卡;
2.等待页面加载,这样id="setcallback"的元素就出现了;
3.通过TouchEn扩展发送setcallback消息以设置对某个函数的回调,同时用"tabid":""和"reply":"malicious payload"覆盖JSON响应属性 。
第一个回调调用立即发生 。因此,将在银行网站中调用回调函数,并使用来自reply属性的恶意有效负载作为参数 。
一个可能的回调函数可以是eval,但还有最后一个障碍:TouchEn通过JSON.stringify()将reply属性传递给回调函数 。所以我们实际上得到eval(""malicious payload"" "),但这没有任何作用 。
另一方面,也许目标页面有jQuery?调用$('""')将产生预期的结果:
TouchEn nxKey键盘加密应用程序出现的许多漏洞很容易使其被黑化

文章插图
使用TouchEn nxKey的网站很可能也会使用TouchEn Transkey(一种屏幕键盘),这依赖于jQuery 。总之,所有韩国银行网站似乎都严重依赖jQuery,这及易产生攻击 。
但是update_callback (nxKey SDK的指定回调)也可以被滥用,在传递json字符串化的数据时运行任意JavaScript代码 。调用update_callback('{"FaqMove":"javascript:alert('Hi, this is JavaScript code running on '+document.domain)"}')将尝试重定向到javascript:链接,并运行任意代码进行攻击 。
TouchEn nxKey键盘加密应用程序出现的许多漏洞很容易使其被黑化

文章插图
因此,这种攻击允许恶意网站破坏任何依赖TouchEn扩展的网站 。韩国银行强制用户安装的“安全”应用程序都没有检测或防止这种攻击 。
类似TouchEn的浏览器扩展
当我开始测试时,Chrome Web Store中有两个TouchEn扩展 。目前这个不太受欢迎但基本上相同的扩展已经被删除 。
研究人员发现了三个几乎相同的扩展:INISAFE的CrossWeb EX和Smart Manager EX以及iniLINE的CrossWarpEX 。CrossWeb EX是其中最受欢迎的,目前有超过400万用户 。这些扩展同样会使网站受到攻击 。
我的第一个想法是RaonSecure和INISAFE属于同一个公司集团 。但事实似乎并非如此 。
以下是iniLINE软件开发公司的页面:
TouchEn nxKey键盘加密应用程序出现的许多漏洞很容易使其被黑化

文章插图
Initech和RaonSecure仅仅是合作伙伴,所以看起来iniLINE是这些浏览器扩展的开发者 。
通过网站使用键盘记录功能


推荐阅读