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 закрывает обе описанные проблемы. Проверять рабочие процессы на передачу внешних данных в запросы придётся и дальше.
Ссылки
- https://github.com/n8n-io/n8n/security/advisories/GHSA-5qpp-pqww-h7fp
- https://github.com/n8n-io/n8n/security/advisories/GHSA-r6g9-5cpp-ppwr