CSV 注入是什么
CSV 注入(表格公式注入)指系统导出 CSV/Excel 时,把用户可控字段原样写进单元格;当内容以等号、加号、减号、@ 或制表符、回车开头时,Excel、WPS、LibreOffice 打开文件会按公式求值。攻击者可在昵称、备注、收货地址等字段预埋公式,等运营人员导出对账表打开时才触发。它危害的不是被测服务器,而是导出文件在办公终端上反过来执行,可能外带本地数据或弹出调用外部程序的确认框。CWE-1236 将其归类为公式注入,属于导出链路的下游风险。
基本信息
| 触发字符 | 等号、加号、减号、@ 开头,以及制表符 0x09、回车 0x0D 前缀 |
|---|---|
| 必要条件 | 用户可控字段未经清洗进入导出,且文件被表格软件打开 |
| 受影响方 | 打开文件的办公终端,不是被评估的服务器 |
| 判定依据 | 导出文件中单元格原样保留公式形态 |
| 修复方向 | 导出统一转义或前置单引号,并限制危险前缀 |
典型使用场景
- 导出对账:财务与运营导出订单流水,昵称、备注列来自用户输入
- 工单与问卷汇总:管理员导出反馈表做线下分析,自由文本列不可控
- 客户名单导出:公司名、收货地址由外部注册者自行填写
- 日志与审计导出:把含用户输入的管理日志导成表格交给审计方
- 第三方对接:把数据导成 CSV 交给合作方,对方在自己办公软件里打开
验证步骤
验证步骤
1. 用测试账号在可控字段写入标记串(以等号或加号开头的无害字符串)
2. 触发导出功能,下载 CSV/Excel 文件
3. 用文本编辑器查看单元格原始内容,判断公式形态是否保留 # 不要直接双击打开
4. 记录字段名、导出方式、文件格式与预览结果
5. 仅在隔离环境用副本文件复现求值,不在真实办公终端打开导出现象观察点
| 导出场景 | 可控字段 | 观察点 |
|---|---|---|
| 用户列表导出 | 昵称、个性签名 | 单元格是否原样以等号加号减号开头 |
| 订单导出 | 备注、收货地址 | 是否被前置单引号或空格转义 |
| 工单导出 | 标题、详情正文 | 换行与制表符是否保留并形成新行 |
| 导入模板回显 | 用户回填后的回显值 | 回显值再次导出时是否进入公式上下文 |
修复视角:导出收口到公共工具函数,对所有文本列统一转义,限制危险前缀;同时提供纯数据导出格式,并提醒运营人员先看内容再打开文件。
验证时禁止使用真实可执行公式,一旦文件在被控终端打开可能造成数据外带;用无害标记串观察单元格形态即可定性。