Утечка секрета в n8n: runbook для revoke и rotate ¶
Обновлено: 2026-05-29
Intent: runbook secret leak: найденный токен/API key/OAuth secret, containment, revoke, rotate, audit, replay и профилактика утечек
H1: Утечка секрета в n8n: как быстро отозвать ключ, заменить credential и проверить последствия
Schema: TechArticle, HowTo, FAQPage, BreadcrumbList
Old word count: 664
New word count: 901
Короткий ответ ¶
Если в n8n утёк API key, OAuth secret, webhook token или пароль, первым делом остановите affected workflow и отзовите секрет у провайдера. Не ограничивайтесь заменой значения в n8n: старый ключ должен стать недействительным во внешнем сервисе, иначе злоумышленник сможет использовать его вне вашей инфраструктуры. После revoke создайте новый credential, проверьте executions за период утечки, зафиксируйте affected systems и уберите причину: логирование payload, тестовый репозиторий, скриншот, общий чат или export workflow.
Когда применять этот runbook ¶
Используйте этот runbook, если секрет попал туда, где его не должно быть: в Git, лог, execution data, Slack/Telegram, email, скриншот, публичный issue, документацию, экспорт workflow, CSV, backup без защиты или prompt для AI-модели. Для n8n это особенно важно, потому что workflow часто соединяет CRM, платежи, таблицы, Telegram, email, LLM API и внутренние HTTP endpoint-ы.
Типичные сигналы:
- в логе виден
Authorization: Bearer ...; - workflow отправил credential в Telegram/Slack;
- разработчик вставил token прямо в HTTP Request node;
- export workflow попал в общий репозиторий;
- AI node получил секрет в prompt/context;
- API provider прислал alert о подозрительном использовании;
- после теста в execution data остался полный request body.
Цель runbook — не просто “заменить пароль”, а доказать, что старый секрет больше не работает, понять период риска и убрать путь повторной утечки.
1. Остановить распространение ¶
Первые 10 минут важнее идеального расследования. Сначала ограничьте дальнейшее использование секрета.
| Что обнаружено | Первое действие |
|---|---|
| Token в публичном Git/документе | сделать ресурс приватным, но всё равно считать секрет скомпрометированным |
| Token в execution/log | остановить affected workflow, ограничить доступ к истории |
| OAuth refresh token | revoke у provider, затем re-auth через новый credential |
| Webhook secret | заменить secret и включить проверку нового значения |
| LLM API key | отозвать key, проверить usage и spending |
| CRM/payment key | отключить workflow, сверить операции за период риска |
Не пытайтесь “просто удалить строку из чата” как единственную меру. Если секрет был виден людям, ботам, индексаторам или внешним системам, он уже считается раскрытым.
2. Отозвать старый секрет у провайдера ¶
Порядок безопасной ротации:
- Найти provider и credential owner.
- Создать incident ticket с временем обнаружения.
- Остановить workflow, которые используют секрет.
- Отозвать старый token/key/password у provider.
- Создать новый секрет с минимальными правами.
- Обновить credential в n8n.
- Запустить smoke test.
- Вернуть workflow в работу.
- Проверить usage/audit log у provider.
Важно: если секрет используется в нескольких workflow, не меняйте его “на лету” без списка зависимостей. Иначе часть workflow продолжит падать, а команда может начать создавать обходные ключи.
3. Найти affected workflows и executions ¶
Соберите карту использования секрета:
- имя credential в n8n;
- workflow, где credential подключён;
- node, где есть inline token или header;
- executions за период риска;
- внешние объекты, которые могли измениться;
- пользователи, у которых был доступ к workflow/export/log;
- места, куда workflow отправлял payload.
Если утечка произошла через execution data, проверьте не только failed executions. Успешный workflow тоже мог сохранить request, response, headers или body с секретом.
4. Проверить последствия ¶
Для разных секретов последствия разные:
| Тип секрета | Что проверить |
|---|---|
| CRM token | новые/изменённые лиды, массовый экспорт, лишние webhook-и |
| Payment API key | платежи, возвраты, webhooks, payout/settlement операции |
| Telegram bot token | сообщения, команды, webhook URL, администраторы бота |
| LLM API key | usage, spend, модели, необычные запросы |
| Database password | подключения, новые пользователи, дампы, query log |
| OAuth client secret | новые refresh tokens, consent screen, redirect URI |
Если provider поддерживает audit log, выгрузите события за период: от последнего известного безопасного времени до момента revoke. Если audit log недоступен, используйте косвенные признаки: created/updated records, API usage, billing, IP, timestamps.
5. Убрать источник утечки ¶
Ротация секрета бесполезна, если новый ключ снова попадёт в тот же канал.
Проверьте:
- нет ли token в Set node, Code node, HTTP headers как plain text;
- не пишется ли полный request/response в журнал;
- не отправляется ли payload целиком в чат;
- не попадает ли credential в prompt AI-модели;
- не экспортируются ли workflow с реальными значениями;
- есть ли masking для чувствительных полей;
- кто может открывать executions;
- включён ли внешний secrets vault, если он доступен в вашей редакции/инфраструктуре.
Хорошее правило: секрет должен жить в credential/secrets layer, а workflow должен получать только результат авторизованного действия.
6. Вернуть процесс в production ¶
Перед включением workflow:
- smoke test проходит с новым credential;
- старый секрет не работает;
- affected executions помечены;
- replay не создаёт дубли;
- владелец процесса уведомлён;
- incident ticket содержит root cause;
- добавлена профилактика: masking, checklist, code review или запрет inline-secret.
Если были платежи, CRM или персональные данные, replay делайте только после сверки внешнего состояния. Не повторяйте side-effect, пока не понятно, была ли операция выполнена старым секретом.
FAQ ¶
Можно ли просто удалить execution с секретом?
Нет. Удаление истории не отзывает token. Сначала revoke/rotate у provider, затем уже чистка следов и ограничение доступа.
Что считать утечкой: token был виден только внутри команды?
Если секрет оказался вне intended storage, лучше считать его раскрытым. Особенно если это общий чат, экспорт, скриншот или лог.
Нужно ли менять все credentials в n8n?
Нет. Меняйте affected secrets и связанные credentials. Но если утёк master-доступ, backup, database password или admin account, scope расследования расширяется.
Как предотвратить повторение?
Запретить inline keys, маскировать payload, ограничить доступ к executions, проверять exports, добавить credential review и использовать secrets manager там, где это возможно.
Как применять playbook в команде ¶
Playbook «Утечка секрета в n8n» должен быть понятен человеку, который не писал workflow. Поэтому в нём нужны входной сигнал, частота запуска, критерий тревоги, ответственный и ожидаемое действие после срабатывания.
Используйте этот материал как операционную инструкцию: что проверить, где посмотреть логи, как понять масштаб проблемы и когда эскалировать.
| Слой | Что зафиксировать | Зачем |
|---|---|---|
| Вход | входной item по теме «Утечка секрета в n8n»: источник события, внешний ID, время получения и нормализованные поля | позволяет повторить проблему без доступа к production-секретам |
| Контроль | successful_executions, skipped_items, retry_count, error_branch_usage, manual_override_count | показывает деградацию раньше, чем пользователи начинают писать в поддержку |
| Безопасность | случайно расширить права credentials, сохранить секреты в логах или отдать действие без approval | снижает риск скрытых дублей, утечки данных и неконтролируемых write-действий |
| Готовность | есть тест на happy path, пустой вход, повтор и сбой внешнего сервиса для «Утечка секрета в n8n» | делает статью пригодной для runbook, а не только для чтения |
Пример безопасного входного контракта ¶
{
"source": "manual|webhook|schedule|api",
"external_id": "stable-id-from-source",
"received_at": "2026-05-29T10:00:00Z",
"payload_version": "v1",
"dry_run": true,
"audit": {"workflow_id": "...", "execution_id": "..."}
}
Критерий готовности ¶
- есть понятный вход, выход и владелец процесса
- проверены пустой input, повтор события и ошибка внешнего сервиса
- результат логируется без секретов и персональных данных
- страница связана с соседними рецептами, ошибками или playbook по теме