🚨 n8n: ЕСЛИ ТЫ МОЖЕШЬ РЕДАКТИРОВАТЬ WORKFLOW — ТЫ ПОЧТИ МОЖЕШЬ ДЕЛАТЬ RCE
🧨 JFrog показали 2 уязвимости, которые превращают "песочницу" n8n в декорацию — и приводят к Remote Code Execution (RCE = удалённое выполнение кода, когда атакующий запускает свои команды на твоём сервере).
⚠️ Что нашли 🟥 CVE-2026-1470 (CVSS 9.9, критический): обход sandbox'а в Expression engine (это механизм, который выполняет выражения типа {{ переменная }} внутри автоматизаций) → выполнение произвольного кода на сервере с n8n. 🟧 CVE-2026-0863 (CVSS 8.5, высокий): обход ограничений Python Code node (блок для запуска Python-скриптов) в режиме Internal → выполнение кода на операционной системе.
🧠 Как это работает 🪤 Песочница (sandbox) — это защитный механизм: код выполняется в изолированной среде, чтобы не мог влезть в систему. 🕳 Но: в n8n выражения {{ }} по сути превращаются в JavaScript-код, который проходит через AST-валидацию (проверку структуры кода на "опасные команды"). 🔓 Исследователи нашли способ обмануть эту проверку: используя устаревший оператор JavaScript with (который почти никто не использует, поэтому защита его не учла), можно "протащить" доступ к запрещённым функциям (типа constructor, который даёт доступ к выполнению любого кода).
🐍 В Python-части:
Internal-режим = Python-скрипт запускается прямо на сервере рядом с главным процессом n8n (без контейнерной изоляции).
External-режим = Python работает в отдельном Docker-контейнере (есть барьер, хоть и не абсолютный).
Атака строится через особенности обработки ошибок в Python 3.10+: можно "вытащить" реальные объекты из исключений и добраться до запрещённых функций.
✅ В КАКИХ ВЕРСИЯХ ЕСТЬ УЯЗВИМОСТЬ 🔧 CVE-2026-1470 (JavaScript): уязвимо всё раньше 1.123.17, а также версии 2.x раньше 2.4.5 и 2.5.1. 🔧 CVE-2026-0863 (Python): уязвимо всё раньше 1.123.14, а также версии 2.x раньше 2.3.5 и 2.4.2.
🛡 Что делать 👥 Проверь права доступа: кто в вашей команде может создавать и менять workflow (автоматизации). На уязвимых версиях это фактически "ключи от сервера". ⬆️ Обнови до фикс-версий: 1.123.17+ для первой уязвимости или 1.123.14+ для второй (лучше взять самую свежую стабильную). ⚠️ Проверь свои workflow после обновления: патч ужесточил валидацию {{ }}, так что некоторые легитимные выражения могут перестать работать (как у меня с промптером в Перплексити). Придётся переписать. 🐳 Если используешь Python Code node — переключись на режим External (запуск в контейнере), если нет критичной причины сидеть на Internal. 📊 Аудит: проверь логи на подозрительные выражения в {{ }} или странные Python-скрипты в workflow за последние недели.
💬 Кто у вас имеет право "править автоматизации" — и как вы это контролируете: ролями, code review, отдельным тестовым инстансом?