Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
n8n-function-vm2 — Proof-of-concept и лаборатория для побега из песочницы n8n 2.42.0: скрытые узлы Function/FunctionItem выполняют JS в основном процессе, что даёт аутентифицированным участникам RCE на хосте. | Kitploit
Инструменты/GitHubGitHub/abraxas/n8n-function-vm2
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийПост-эксплуатацияВиртуализация для безопасностиТестирование на ПроникновениеRed TeamingЛаборатории и Практика
GitHubabraxas/n8n-function-vm2

n8n-function-vm2

Proof-of-concept и лаборатория для побега из песочницы n8n 2.42.0: скрытые узлы Function/FunctionItem выполняют JS в основном процессе, что даёт аутентифицированным участникам RCE на хосте.

147 дней назадЕщё не проверено
Репозиторий

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Abraxas Labs - n8n-function-vm2

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  n8n-function-vm2

Разбор: https://abraxaslabs.tech/research/n8n-function-vm2

n8n-function-vm2

n8n 2.42.0 - n8n GmbH

GHSA-j4p8-h8mh-rh8q перенёс n8n-nodes-base.code в дочерний процесс JS task-runner. В production при запуске добавляются --disallow-code-generation-from-strings и --disable-proto=delete. Остаётся то, что они спрятали вместо переноса. Function.node.ts имеет hidden: true. То же самое у FunctionItem. То же самое у LangChain Code. Скрытие в палитре — это флаг UI. Сохранение/импорт JSON рабочего процесса по-прежнему разрешает этот тип. Значение NODES_EXCLUDE по умолчанию — только Execute Command и Local File Trigger. Путь выполнения — это внутрипроцессный vm2 NodeVM 3.12.2 в основном процессе n8n.

Участник с правами по умолчанию, который может создавать рабочий процесс, может выполнять JS в основном процессе n8n. Скрытие — это не ACL.

IDCVE пока нет
CWECWE-94, CWE-269
CVSSHigh: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Продуктn8n
Затронутовплоть до 2.42.0 (86c23326); остаток от GHSA-j4p8
Аутентификацияаутентифицированный участник с правами создания/импорта/выполнения рабочих процессов
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1

Что может сделать атакующий

Будучи участником с правами по умолчанию, импортировать или создать рабочий процесс, узел которого имеет type равный n8n-nodes-base.function (или functionItem, или @n8n/n8n-nodes-langchain.code), и выполнить его. JS выполняется в основном процессе n8n.

Это RCE на хосте под UID n8n: секреты экземпляра, зашифрованные учётные данные других пользователей на диске, БД. Захват экземпляра участником мультитенантной среды. Не OS LPE. Не без аутентификации. Code v2 на том же экземпляре не видит process таким образом.

Тот же продукт, родственный остаток: Databricks path join.

Как я это нашёл

Сначала я прочитал волну GHSA от 16 сентября 2026 года, затем провёл десять поисков на теге [email protected]. Песочница выражений, Code/Function/vm2, учётные данные, вебхуки, HTTP/SSRF, узел Git, community-пакеты, auth/SSO, инъекция узлов, публичный API. Большинство High из той волны закрыты на этой фиксации. Code не был завершён.

Правила breaking changes v3 уже помечают Function / FunctionItem как удалённые. На 2.42.0 они являются остатком, а не задуманной долгосрочной песочницей. Function также внедряет this.helpers, включая helpers, которые JS runner перечисляет как неподдерживаемые. Мне не понадобился публичный гаджет vm2, чтобы доказать границу процесса.

Я развернул стандартный n8nio/n8n:2.42.0, зарегистрировал участника (не владельца экземпляра), импортировал n8n-nodes-base.function, выполнил его. Function pid=7 — это основной PID n8n. Тот же JS в Code v2: hasProcess: false. Дочерний процесс task-runner — pid 26. Свидетель N8N-FUNCTION-VM2-WITNESS.

Уже зафиксированные ошибочные пути: тип Function отклонён как скрытый/неизвестный (тогда узел на самом деле исключён); pid Function равен дочернему процессу task-runner (тогда он уже перенесён); Code v2 видит process (тогда runner не является контролем); эксплойт-гаджет vm2, reverse shell, OS LPE. Театр. Свидетель — это основной PID против hasProcess: false.

Лаборатория

cd lab
./run.sh

Атаковать только http://127.0.0.1:18201. По умолчанию NODES_EXCLUDE. Атакующий является участником.

authenticated-as=member
function-fields pid=7 witness=N8N-FUNCTION-VM2-WITNESS
code-fields hasProcess=False pid=None
compare function_pid=7 code_pid=None main_pid=7 runner_pid=26 who=member
SUCCESS N8N-FUNCTION-VM2 who=member function_pid=7 code_pid=None main_pid=7 runner_pid=26 N8N-FUNCTION-VM2-WITNESS

Исправление

Добавьте n8n-nodes-base.function, n8n-nodes-base.functionItem и @n8n/n8n-nodes-langchain.code в NODES_EXCLUDE по умолчанию или пропустите их через JsTaskRunnerSandbox так, как это уже делает Code v2. Параметра hidden в палитре недостаточно.

Ссылки

  • github.com/n8n-io/n8n тег [email protected]
  • Function.node.ts · Code.node.ts · nodes.config.ts · task-runner-process-js.ts
  • Близкий исправленный: GHSA-j4p8-h8mh-rh8q
  • Тот же продукт: n8n-databricks-path-join
  • CWE-94 · CWE-269

Лицензия

GNU Affero GPL v3.0. См. LICENSE. Только для лабораторных испытаний через loopback. Без гарантий.

Скачать инструмент