CSV Injection with the CSV Export Feature

发现CSV Injection漏洞

一边测试一边看手头上这个项目的源码,发现后端对某个REST请求的Request Body没有完整的校验,可以传入任意字符。

1
{"op": "replace", "name": "+-=!|"}

这个问题原本影响不大,但是结合另外一个导出csv报表的功能,导致了csv injection。

1
2
3
// payload
{"op": "replace", "name": "=cmd|'/C calc'!A0"}
{"op": "replace", "name": "-2+3+cmd|'/C calc'!A0"}

用户下载后用Microsoft Excel打开csv文件时,虽然会有安全警告,但是从可信站点下载的文件,用户很容易忽略这些警告,导致命令注入。

CSV Injection

如何解决

  • 后端与前端都需要校验输入的参数是否有危害性
  • 导出csv需要对首位的特殊符号转义。针对Excel的话,如果首位是=,+,和-,需要加一位’来转义。比如:’-2+2+cmd|’ /C calc’!A0