0x01 概述

现在很多应用提供了导出电子表格的功能(不限于 Web 应用),早在 2014 年 8月 29 日国外 James Kettle 便发表了《Comma Separated Vulnerabilities》文章来讲述导出表格的功能可能会导致注入命令的风险,因为导出的表格数据有很多是来自于用户控制的,如:投票应用、邮箱导出。攻击方式类似于 XSS :所有的输入都是不可信的。

0x02 公式注入 & DDE

我们知道在 Excel 中是可以运行计算公式的:  =1+5 ,它会将以 = 开头的单元格内容解释成公式并运行,单纯的运行计算公式可能没什么用,但这里可以用到 DDE 。Dynamic Data Exchange(DDE)是一款来自微软的古老技术,它是 Windows 下的一种跨进程通信的协议,支持 Microsoft Excel, LibreOffice 和 Apache OpenOffice。

执行 cmd 弹出计算器:

CSV1

当然也可以使用 -cmd ,+cmd 来执行 DDE ,这个问题在2014年进行了修复(CVE-2014-3524),所以我们现在注入命令执行时软件会有如下的提示:

csv2

csv3

这也就是现在这个漏洞类型的特殊性,虽然软件有着这样的安全风险提醒但仍有大量的厂商承认并修复潜在的漏洞威胁:

其中很大的一方面是由于信任域的原因导致用户仍可能受到攻击,用户在 security.com 域下导出自己的Guestbook.csv ,但由于恶意用户偷偷的在留言板中插入了恶意代码:

这样就导致当用户在导出报表后倘若点击了某个单元格则会导致 A2,A3 的单元格内容泄露:

csv4

所以说这个漏洞是要看背景的,由于它的特殊性(当然也可以配合社工),也就会出现厂商在审核此类漏洞时明明是一个 CSV Injection 漏洞但不会确认修复的情况。

0x03 实例

之前报告给腾讯的《CSV Injection on wj.qq.com》漏洞(已经修复):

csv5

用户发起投票后,攻击者可以注入CSV 公式/DDE代码,之后管理员进入投票结果页面导出 EXCEL :

可以看到在用户留言的字段,成功的注入:=cmd|'/k ipconfig'!A0 ,当然也可以通过不触发安全警告的前提下窃取管理员导出的 CSV 数据,也就是前面提到的 =HYPERLINK

0x04 关于全文信息泄露

之前使用 &A1&A2&A3&A4 窃取表单数据的方式看起来有点笨重,我找到了一种新的方法来更方便的窃取全文信息:https://support.office.com/en-us/article/CONCAT-function-9b1a9a3f-94ff-41af-9736-694cbd6b4ca2?ui=en-US&rs=en-US&ad=US

APPLIES TO: Excel 2016, Excel Online, Excel for Android tablets, Excel Mobile, Excel for Android phones, Less.

2016 之前的 excel 和其他的版本的连接字符串的函数 concatenate 不支持 cell range 的语法,也不能自定义函数,这样的话就没有办法简写,只能生成比较长的url,但 2016 之后的 excel 我们可以使用 concat 函数,支持传入一个 range,比如 concat(A1:A10) ,这样便能直接读取整个表格中的数据。

0x05 修复方案

过滤公式所用到的特殊字符(不应盲目过滤),因为个别情况下可能会影响产品的正常功能使用:

0x06 参考

 

【原文:CSV Injection Vulnerability   Author: Evi1m0 (知道创宇404安全实验室)   安全脉搏整理编辑发布】

源链接

Hacking more

...