
Техническое исследование уязвимости CVE-2025-68613 в n8n, охватывающее затронутые версии, сценарий лабораторного исследования, наступательный и оборонительный анализ, а также стратегии смягчения.
n8n — это платформа автоматизации рабочих процессов, используемая для интеграции систем и сервисов через визуальные потоки и выражения JavaScript.
CVE-2025-68613 — это критическая уязвимость удалённого выполнения кода (RCE) с CVSS 9.9, затрагивающая несколько версий n8n. Уязвимость возникает при обработке выражений JavaScript в рабочих процессах в уязвимых версиях, которые должным образом не изолированы. Это позволяет аутентифицированным пользователям с правами на редактирование выполнять код за пределами ожидаемого поведения приложения.
На практике данная уязвимость может быть использована для выполнения команд на сервере, где запущен n8n, с привилегиями самого приложения. Уязвимые версии охватывают диапазон от 0.211.0 до версий, предшествующих исправлениям, применённым в 1.120.4, 1.121.1 и 1.122.0.
Данный репозиторий технически документирует CVE-2025-68613, охватывая контекст уязвимости, затронутые версии, эксплуатацию и рекомендуемые меры по устранению.

| Статус | Версия n8n | Примечание |
|---|---|---|
| ❌ Уязвима | >= 0.211.0 | Появление уязвимого механизма |
| ❌ Уязвима | < 1.120.4 | Уязвима до патча в ветке 1.120 |
| ❌ Уязвима | < 1.121.1 | Уязвима до патча в ветке 1.121 |
| ❌ Уязвима | < 1.122.0 | Уязвима до патча в ветке 1.122 |
| ✅ Исправлена | 1.120.4 | Официальное исправление применено |
| ✅ Исправлена | 1.121.1 | Официальное исправление применено |
| ✅ Исправлена | >= 1.122.0 | Исправление включено по умолчанию |
Рекомендуется немедленно обновиться до версии 1.122.0 или выше.
Для демонстрации уязвимости требуются следующие условия:
Уязвимость возникает во время создания и выполнения рабочих процессов, а не до аутентификации.
Первым шагом необходимо войти в веб-интерфейс n8n с действительной учётной записью пользователя.

Этот шаг подтверждает, что атака не является анонимной. Уязвимость требует аутентифицированного пользователя.
После входа в систему убедитесь, что пользователь имеет права на создание и редактирование рабочих процессов.

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

Здесь начинается легитимное использование функциональности n8n, которая в уязвимых версиях может быть эксплуатирована.
Первым узлом, добавленным в рабочий процесс, является Manual Trigger.

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

Что делает этот узел: Этот узел позволяет создавать, изменять или перезаписывать поля данных внутри рабочего процесса. Он принимает статические значения или выражения JavaScript, вычисляемые во время выполнения.
Именно в этот момент проявляется уязвимость.
В поле значения узла Edit Fields (Set) вставьте выражение JavaScript, обёрнутое в {{ }}, — это формат, используемый n8n для вычисления динамических выражений.

Пример полезной нагрузки:
{{ (function(){
return this.process.mainModule
.require('child_process')
.execSync('id')
.toString()
})() }}
(function(){ ... })(): Определяет самовызывающуюся функцию, позволяя инкапсулировать всю логику и напрямую возвращать значение в выражение рабочего процесса.this.process: Обращается к внутреннему объекту Node.js process, который предоставляет информацию о среде выполнения и ресурсы.process.mainModule: Позволяет получить доступ к главному модулю приложения, обеспечивая загрузку других внутренних модулей Node.js.require('child_process'): Нативный модуль Node.js, позволяющий создавать новые процессы в операционной системе и выполнять внешние команды.execSync('id'): Выполняет команду непосредственно в операционной системе, где запущен n8n, с привилегиями процесса приложения..toString(): Преобразует вывод выполненной команды в текст, позволяя отобразить результат в интерфейсе n8n.Отображённый результат подтверждает, что команда была выполнена в операционной системе с привилегиями процесса n8n, что характеризует удалённое выполнение кода (RCE).