Разработчики платформы автоматизации рабочих процессов n8n выпустили обновления версий 1.123.61, 2.27.4, 2.28.0 и 2.28.1, которые устраняют девять уязвимостей безопасности. Исследователь под псевдонимом Jubke сообщил о проблемах через GitHub Security Advisories. Среди закрытых недостатков - критические ошибки, позволяющие злоумышленнику перехватить управление аутентификацией, получить доступ к учётным данным и выполнить произвольные SQL-запросы.
Детали уязвимостей
Наиболее опасной стала уязвимость CVE-2026-59206 (CVSS 7.1, уровень "высокий"), связанная с загрязнением прототипа объекта (prototype pollution). Аутентифицированный пользователь с правом workflow:create может через специально созданный рабочий процесс внести изменения в глобальный прототип Object.prototype. Это позволяет обрабатывать неаутентифицированные запросы как запросы привилегированного пользователя, что открывает доступ к конечным точкам вывода списка пользователей и проектов. В результате неавторизованный вызывающий может получить личные данные каждого аккаунта - адрес электронной почты, роль, статус многофакторной аутентификации - а также список всех проектов в экземпляре. Кроме того, загрязнение прототипа способно повредить глобальное состояние системы, сделав часть функций нерабочей до перезапуска. Патчи вышли для версий 1.123.61, 2.27.4 и 2.28.1.
CVE-2026-59257 (CVSS 6.9) касается SQL-инъекции в legacy MySQL v1 node. Операция executeQuery в этом узле подставляет вычисленные значения выражений в непараметризованном виде. Если рабочий процесс использует этот узел с данными из выражений и подключён к внешнему триггеру (например, Webhook-узлу), атакующий может направить подконтрольные данные в выражения и выполнить произвольные SQL-запросы. Под угрозой оказываются базы данных, к которым у MySQL-учётной записи есть доступ. Версия узла MySQL v2 не уязвима, а уязвимая версия будет удалена в будущих релизах. Проблема закрыта в тех же версиях: 1.123.61, 2.27.4 и 2.28.1.
Ещё одна высокая угроза - CVE-2026-59207 (CVSS 7.1) - обход ограничения "Allowed HTTP Request Domains" через AI Agents MCP Connector. Функциональность AI Agents не проверяла эти ограничения, настроенные для учётных данных. Пользователь с правами member, получивший доступ на использование shared credential, мог заставить MCP-инструмент отправить секрет на внешний сервер, указав произвольный URL. Для эксплуатации необходимо, чтобы модуль AI Agents был включён (N8N_ENABLED_MODULES=agents) и имелось хотя бы одно shared credential с ограничением доменов. Патчи - версии 2.27.4 и 2.28.1.
Уязвимость CVE-2026-59208 (CVSS 7.6) затрагивает функцию обмена токенами (token exchange). Если в экземпляре настроено более одного доверенного выпускающего токены сервера, внешние идентификаторы привязываются к локальным учётным записям только по значению sub в JWT, игнорируя поле issuer (iss). Это позволяет атакующему, получившему действительный токен от одного выпускающего сервера с sub, совпадающим с жертвой от другого сервера, аутентифицироваться под учётной записью жертвы. Исключив лишних выпускающих серверов или отключив функцию обмена токенов можно снизить риск до установки обновления (2.27.4 и 2.28.1).
Утечка учётных данных с shared credential возможна через выражение пагинации в HTTP Request node (CVE-2026-59209, CVSS 7.1). Пользователь с правами editor, имеющий доступ "только на использование" к shared credential, может прочитать секрет, который появляется в объекте $request.headers при оценке выражения пагинации. Затем эти данные могут быть скопированы в item-данные и выведены через другой HTTP-запрос, обходя ограничения доменов. Проблема характерна для экземпляров с установленным N8N_EXPRESSION_ENGINE=vm.
Остальные уязвимости имеют средний уровень опасности. Среди них:
- Проблема авторизации: аутентифицированный пользователь может при создании рабочего процесса назначить его папке из другого проекта, нарушая целостность структуры папок (без доступа к данным). Исправлено в версии 2.28.0.
- Две уязвимости, связанные с внешними секретами. Первая: секреты разрешались в выражениях узлов рабочих процессов, где они не должны быть доступны. Пользователь с правами project editor мог прочитать значение внешнего секрета, используя его в выражении. Вторая: из-за несоответствия между статической проверкой и runtime-двигателем выражений пользователь с правами на создание или обновление учётных данных, но без scope externalSecret:list, мог внедрить ссылки на внешние секреты в учётные данные, и они разрешались при выполнении рабочего процесса.
- Уязвимость, позволяющая аутентифицированному пользователю исчерпать временное дисковое пространство через многократную загрузку файлов в конечную точку data-table upload, обходя квоту на количество запросов (исправлено в 2.28.0 и 1.123.58).
Разработчики n8n настоятельно рекомендуют администраторам как можно скорее обновиться до последних патчей. В качестве временных мер при невозможности немедленного обновления советуют ограничить доступ к рабочим процессам и учётным данным только проверенными пользователями, отключить функциональность AI Agents, снизить лимит загрузки файлов и настроить мониторинг дискового пространства. Однако эти меры не полностью устраняют риски и должны рассматриваться только как краткосрочное решение. Полный список устранённых недостатков и детали по каждому CVE доступны в бюллетене безопасности на GitHub.
Ссылки
- https://github.com/n8n-io/n8n/security/advisories/GHSA-2434-3x6q-8r99
- https://github.com/n8n-io/n8n/security/advisories/GHSA-2xgm-wc4g-5jvg
- https://github.com/n8n-io/n8n/security/advisories/GHSA-75qm-gp28-rcq9
- https://github.com/n8n-io/n8n/security/advisories/GHSA-h44j-f5r5-ph73
- https://github.com/n8n-io/n8n/security/advisories/GHSA-hwmj-qg4v-cvg9
- https://github.com/n8n-io/n8n/security/advisories/GHSA-jp7m-xcgx-57qm
- https://github.com/n8n-io/n8n/security/advisories/GHSA-mq3m-f8x3-579w
- https://github.com/n8n-io/n8n/security/advisories/GHSA-q3j5-8vrg-4p9q
- https://github.com/n8n-io/n8n/security/advisories/GHSA-w867-jm58-p9pv