Внедрение SQL-кода и обход проверки прав в n8n открывают доступ к базам и чужим учётным данным

n8n

n8n хранит подключения к десяткам внешних систем, и две уязвимости высокого уровня угрозы позволяют выйти далеко за пределы самой платформы. Первая даёт выполнить произвольный SQL-код в подключённой базе через узел Microsoft SQL. Вторая позволяет редактору общего рабочего процесса запустить узлы с учётными данными, к которым у него нет доступа. CVE-идентификаторы не присвоены ни одной из проблем.

Две уязвимости n8n и версии с исправлениями

Платформа автоматизации собирает цепочки действий из готовых узлов и связывает между собой базы данных, CRM (системы управления отношениями с клиентами), мессенджеры и внутренние сервисы. Разворачивают её и в облаке, и на собственном сервере. Учётные данные ко всем подключённым системам тоже лежат внутри n8n. Поэтому ошибки в узлах доступа к данным затрагивают не только саму платформу: попав в рабочий процесс, злоумышленник получает ключи от соседних систем. Обе закрытые уязвимости относятся именно к этому классу.

Внедрение SQL-кода в узле Microsoft SQL

Первая версия узла Microsoft SQL подставляет значение выражения прямо в текст запроса и выполняет получившуюся строку. Параметризация при этом не применяется. Если в поле запроса попадают внешние данные, вызывающая сторона может выполнить собственный SQL. Запрос уйдёт в подключённую базу с правами сохранённой учётной записи.

Типичный сценарий начинается с вебхука (внешнего вызова, который запускает рабочий процесс) или обычного HTTP-запроса. Полученное значение попадает в поле запроса и превращается в часть SQL-инструкции. Атака идёт по сети, не требует учётной записи в n8n и не зависит от действий пользователя. Достаточно, чтобы рабочий процесс принимал внешние данные и передавал их в узел Microsoft SQL.

Ущерб самой платформе ограничен раскрытием информации низкого уровня. Основные последствия приходятся на базу данных: высокий риск раскрытия и изменения содержимого, а также частичная потеря доступности. Такая асимметрия делает узел Microsoft SQL удобным для атаки: ломать защиту n8n не нужно, достаточно одного неаккуратно составленного рабочего процесса.

Вложенные рабочие процессы и чужие учётные данные

Во второй уязвимости слабым местом оказалась проверка при сохранении общего рабочего процесса в ветке 1.x. Она просматривала только один тип узлов и только на один уровень вложенности. Ещё два узла принимают встроенный рабочий процесс прямо в параметрах. Такие вложенные конструкции могут наслаиваться друг на друга.

В результате пользователь с правом редактирования сохраняет рабочий процесс, внутри которого узлы ссылаются на учётные данные, недоступные ему самому. Проверка этого не замечает. При запуске узлы работают со значениями владельца, и редактор получает доступ к чужим секретам, включая подключения к внешним сервисам.

Атака идёт по сети, но требует низких привилегий и определённых условий. По классификации GitHub обе уязвимости относятся к высокому уровню угрозы.

Исправления и временные меры

Внедрение SQL-кода закрыто в версиях 2.42.1 и 2.41.4. Проблему с проверкой прав исправили в 1.123.83. Обновление до этих сборок или более новых снимает обе проблемы.

Если установка откладывается, администраторы могут ограничить доступ к n8n доверенными пользователями; проверить рабочие процессы, где внешние данные попадают в поле запроса узла Microsoft SQL; отключить процессы, запускаемые вебхуком, до установки исправления. Узел Microsoft SQL можно удалить и добавить заново, тогда он начнёт работать с параметризованными запросами, а динамические значения переедут в отдельные параметры. Для второй уязвимости полезно сузить круг людей с правом редактирования общих рабочих процессов и проверить встроенные определения в узлах работы с инструментами и извлечения данных.

Платформы автоматизации держат учётные данные от десятков систем в одном месте. Ошибка в одном узле открывает доступ сразу ко всей связке подключённых сервисов, а не к одному приложению. Обновление до 2.42.1, 2.41.4 или 1.123.83 закрывает обе описанные проблемы. Проверять рабочие процессы на передачу внешних данных в запросы придётся и дальше.

Ссылки

Комментарии: 0