Песочница выражений и OAuth-регистрация в n8n позволяют выполнить код и вызвать отказ в обслуживании

n8n

В платформе автоматизации n8n обнаружено несколько уязвимостей, затрагивающих версии до 1.123.76, 2.35.4, 2.36.2, 2.37.7 и 2.38.2. Две из них позволяют выполнить произвольный код в процессе приложения, ещё две - вызвать отказ в обслуживании даже без учётной записи. Разработчики устранили проблемы в версиях 1.123.76, 2.37.7 и 2.38.2, пользователям следует как можно скорее обновиться.

Детали уязвимостей

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

В одном случае поле класса с именем, совпадающим с внутренним методом очистки, подменяло функцию-санитайзер. В другом - выражение могло переопределить глобальную функцию JSON.stringify, которую компилятор вызывает при генерации кода. Оба приёма вели к тому, что подготовленные данные превращались в исполняемый код. На практике это означает, что любой пользователь, которому разрешено создавать или редактировать workflow, способен выполнить команды в операционной системе от имени процесса n8n.

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

Отдельная проблема - механизм динамической регистрации OAuth-клиентов. Этот протокол обычно применяется, когда внешним приложениям нужно получить доступ к защищённым ресурсам n8n. Регистрация клиента происходит через специальную конечную точку, которая не требует аутентификации. Выяснилось, что эта конечная точка проверяет длину только поля redirect_uris, тогда как поля client_name и grant_types ограничены лишь проверкой наличия. Анонимный отправитель может передать в них строки произвольной длины, которые попадут в базу данных. Повторяя такие запросы, злоумышленник неограниченно увеличивает хранилище, что со временем приводит к отказу в обслуживании.

Высокий уровень опасности (High) по шкале CVSS v4 присвоен уязвимостям песочницы и OAuth-регистрации. При этом OAuth-проблема интересна тем, что для атаки не нужно иметь учётную запись на инстансе. Достаточно, чтобы n8n был доступен по сети.

Вместе с этими проблемами разработчики закрыли ещё несколько уязвимостей средней степени. Среди них обход узла одобрения через WebSocket: анонимный пользователь мог предъявить сохранённый токен возобновления и пройти этап ручного подтверждения, который автор workflow намеренно поставил перед важным действием. Исправлена также утечка данных о workflow: конечная точка возвращала любому участнику идентификаторы всех активных процессов, а push-уведомления об активации и деактивации получали все подключённые клиенты. Кроме того, устранена возможность перехвата чужих учётных данных в модуле Log Streaming, проблема с чтением локальных git-репозиториев через узел Git, а также обход ограничения доменов в узле OpenAI Chat Model. По каждой из этих уязвимостей выпущены исправления в тех же версиях.

Обновление до 1.123.76, 2.37.7 или 2.38.2 закрывает все перечисленные бреши. Для тех, кто не может обновиться немедленно, существуют временные меры: ограничение доступа к инстансу, отключение неиспользуемых узлов и модулей, ручной аудит workflow и баз данных. Однако эти меры лишь снижают риск и не устраняют первопричину.

Эта серия уязвимостей напоминает о том, что изолированные среды выполнения кода в low-code платформах остаются слабым местом. Кажущийся безопасным интерфейс для выражений может скрывать сложные механизмы, которые легко нарушить неожиданным способом. Разработчикам платформ автоматизации стоит уделять особое внимание тестированию песочниц и ограничению привилегий при генерации кода.

Ссылки

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