Как стать автором
Обновить
58.27
Swordfish Security
Информационная безопасность, DevSecOps, SSDL

Персональные AI-ассистенты или как открыть любому человеку свою почту и календарь

Время на прочтение8 мин
Количество просмотров1.8K

Всем привет! На связи Юрий Шабалин, директор продукта Стингрей. И сегодня у нас тема не про мобильные приложения, а, пожалуй, самая трендовая — про AI-ассистентов.

Я не так давно увлекся темой современных AI-инструментов и способов их применения в рутинных задачах. Но все-таки не получается отделаться от ИБ-составляющей во взгляде на обычные, казалось бы, вещи. Я уже писал о том, как получить данные пользователей через покупку доступа к Gemini, а сегодня хочу рассказать об одной ошибке в разработке AI-агентов, которая может стать фатальной и дать доступ любому человеку к вашей почте, календарю, контактам и всему, к чему подключен такой ассистент. Интересно? Тогда давайте начинать!

Введение

В эпоху стремительного развития технологий и широкого распространения больших языковых моделей (LLM) автоматизация рутинных задач становится ключевым фактором повышения продуктивности. В этом контексте особую популярность приобретают инструменты для создания no-code-workflow — например, n8n. Это открытый конструктор, позволяющий интегрировать различные веб-сервисы и автоматизировать выполнение множества операций.

В изучении возможности создания подобных агентов просто нельзя пройти мимо такого интересного инструмента, который обещает очень много возможностей и интеграций прямо из коробки. Для первого знакомства с n8n я решил собрать простой Telegram-бот, который автоматически публикует свежие посты в канал без моего участия — пример можно посмотреть здесь.

Затем мне захотелось попробовать нечто более амбициозное, и в поисках идей для более сложных сценариев я обратился к популярным обучающим материалам на YouTube. Оказалось, что одним из наиболее востребованных жанров видео являются туториалы по созданию личного AI-ассистента, подобного «Джарвису». Такие боты умеют принимать голосовые сообщения, создавать встречи, отправлять электронные письма и напоминать о дедлайнах — фактически, берут на себя множество рутинных задач. Однако при попытке воссоздать подобного «ассистента» я обнаружил важный нюанс, который легко упустить из виду, если не смотреть на процесс через призму информационной безопасности. Об этом нюансе, его причинах и способах устранения мы поговорим подробнее позже. А сначала разберемся, что из себя представляет n8n, чем хороши (и чем опасны) популярные туториалы и где именно скрывается потенциальная уязвимость.

Почему связка n8n + Telegram так популярна

Связка n8n и Telegram завоевала популярность как среди новичков, так и среди опытных пользователей, стремящихся к быстрой и удобной автоматизации. На это есть несколько ключевых причин:

  • n8n — открытый «конструктор» интеграций. Он предоставляет интуитивно понятный интерфейс, в котором пользователи могут "перетаскивать" узлы (nodes), определять их входы и выходы, таким образом подключая практически любую веб-службу. Это позволяет создавать сложные автоматизации без необходимости писать код.

  • Telegram Bot API — стабильный и доступный. Он предлагает стабильный механизм вебхуков, не требует платы за использование и не нуждается в отдельном хостинге. Достаточно получить токен от @BotFather, вставить его в узел Telegram-Trigger в n8n — и бот готов к работе.

  • Простота интеграции для начинающих. Новичкам не нужно разбираться в сложных процессах OAuth-авторизации — достаточно включить событие "Message" в Telegram-Trigger и добавить узлы для Gmail, Google Calendar или OpenAI/LLM. Таким образом всего за несколько минут можно создать «Джарвиса», который отвечает на письма и ставит встречи. Простота настройки и скорость получения результата — основные двигатели популярности этой связки.

Типовой workflow из популярных роликов

Большинство популярных видеоуроков по созданию AI-ассистента в n8n демонстрируют типовой workflow, который выглядит примерно так:

При получении сообщения в Telegram мы сначала определяем его тип. Если голосовое, то транскрибируем его, а текст сразу передаем в «Агента AI», к которому подключен API от OpenAI. В качестве инструментов, к которым может обращаться AI-ассистент подключим наш почтовый ящик, календарь и сервис с контактами. Появляется возможность совершать любые действия с календарем и почтой пользователя, проводить поиск в интернете и отправлять ответ в Telegram. Идеально и просто! Всё, что нужно — проставить нужные токены в соответствующих узлах, чтобы платформа получила доступ к почте, календарю и прочим вещам.

Этот типовой workflow (с разными несущественными отклонениями) представлен в большинстве YouTube-туториалов по знакомству с n8n. И это не удивительно: такие процесс и ассистент создают тот самый «вау-эффект» — как технологии могут упростить нашу жизнь и до чего они дошли, если просто голосовым сообщением можно отправить письмо, поставить встречу в календаре, определить свое расписание дня и еще много всего! И это помогает дальше продвигать и продавать другие шаблоны. Однако при внимательном просмотре всех этих уроков с «вау-эффектом» упускается один очень-очень важный момент.

Где именно ломается безопасность

Основная проблема безопасности кроется в конфигурации узла Telegram Trigger. Типичная конфигурация выглядит так:

На скриншоте видно, что «Additional Fields» всегда остаются пустыми. Ну конечно, это же дополнительные поля, которые не обязательно заполнять. Кому они вообще нужны? Но давайте ради интереса заглянем внутрь этого блока и посмотрим, что же это за параметры.

А интересуют нас критерии Restrict to Chat IDs и Restrict to User IDs. Они определяют, из какого чата или от какого пользователя наш бот может получать сообщения. Если параметры не указаны, он будет отвечать любому юзеру, не проверяя, кто же именно ему пишет. В реальности это значит, что любой человек, нашедший бота, сможет отправить ему сообщение и получить доступ к таким функциям:

  • Прочитать все наши входящие и отправленные письма;

  • Отправить от нашего имени сообщение любому человеку из контактов;

  • Получить информацию обо всех событиях в календаре;

  • Управлять встречами: отменять или убирать из расписания, добавлять новых участников и т.д.

Но как кто-то может найти нашего бота? Это уже отдельный вопрос, конечно. Можно пробовать через поиск, подбирая характерные или частичные совпадения, вроде PersonalAssistant или AIAssistant. К тому же, некоторые люди с энтузиазмом делятся своим крутым помощником, как только они его сделают. Так что, если кто-то вам показывает своего личного «Джарвиса», попробуйте написать ему — вдруг он станет и вашим помощником тоже!

Мини-демо

Чтобы продемонстрировать, насколько легко и быстро можно воспользоваться этой уязвимостью, давайте рассмотрим простой сценарий, который описан в любом туториале:

  1. Создать бота в @BotFather, скопировать токен. Это стандартный первый шаг при работе с Telegram-ботами.

  2. В n8n добавить Telegram-Trigger (event: Message) без ограничений. Оставить настройки как в видео (restrictToChatIds и restrictToUserIds не заполняем).

  3. Настроить AI-агента. Он будет определять, что же от него хочет пользователь.

  4. Прикрутить все указанные в туториалах ноды: Gmail-почту, календарь, контакты и т.д.

  5. Отправить результат в SendMessage({{$json.chat_id}}). Бот будет отправлять полученные данные обратно в чат, откуда пришел запрос.

  6. Проверить работу. Нужно написать боту со своего аккаунта и попросить, например, поставить встречу.

  7. Написать боту с чужого аккаунта и проверить, что же ответит наш умный помощник.

Этот пример наглядно показывает, что утечка конфиденциальных данных может произойти за считанные секунды из-за одной неявной и пропущенной настройки.

Но так ли это распространено?

Я не пожалел своего времени и нашел 10 наиболее популярных роликов на русском языке, которые рассказывают, как создать своего персонального AI-ассистента на платформе n8n. Не хотелось бы их раскрывать, потому что, скорее всего, авторы подобных видео просто не задумывались о безопасности и фокусировались именно на настройке и функциональности. Впрочем, как всегда.

Суммарное количество просмотров этих роликов на момент написания статьи — 607 500. То есть, их увидело более полумиллиона человек. И ни в одном из этих видео не упоминается про настройку ограничения. Никто даже не задумался о том, что нашему ассистенту может написать кто-то кроме нас. Ни в одном видео нет упоминания о том, что нужно настраивать параметры.

Давайте попробуем прикинуть. n8n — это платформа с бесплатным доступом на 14 дней, которая не требует навыков программирования и умеет связывать Telegram и популярные AI-агенты. Также, если следовать тем же туториалам, ее можно развернуть локально и пользоваться бесплатно. Туториалы по n8n предлагают нам быстро сделать персонального AI-ассистента, который может помочь в жизни или работе и позволит похвастаться перед друзьями, коллегами и знакомыми офигенным функционалом.

Предположим, что 10% зрителей таких роликов решат повторить увиденное. Это около 61 000 человек. Из них явно не все готовы оплачивать подписки на инструменты и на платформу (или не могут ее развернуть On-Premise бесплатно). Если хотя бы 1% закрепится на длительной основе, то получим почти 6,1 тыс. постоянных пользователей. И это число день ото дня будет только расти! Обязательно будет, так как эта тема сейчас на огромном подъеме и после просмотра хотя бы одного ролика алгоритмы рекомендаций будут подкидывать подобные снова и снова.

Интересно, сколько людей после просмотра видеоуроков советуют их другим или начинают продавать свои услуги по созданию интеллектуальных помощников… А мы уже выяснили, что, начав поиск таких «ассистентов», можно случайно (или намеренно) получить доступ к чувствительной информации. Причем не только прочитать, но и управлять элементами чужой цифровой жизни. Учитывая, что многие сервисы высылают код подтверждения о смене пароля на почту, мы можем получить доступ и к другим сервисам, а не только к ящику. Возможности открываются на самом деле практически безграничные. И от этого становится немного страшно.

Почему «копипаст-культура» — это плохо?

Проблема повсеместна из-за нескольких факторов, присущих "копипаст-культуре":

  • UI-ловушка. Поле «Restrict to…» спрятано за дополнительным «кликом». Интерфейс n8n не делает настройку ограничений очевидной. Поле "Restrict to…" скрыто изначально, из-чего пользователь его пропускает или вообще не знает о нем.

  • Фокус на «вау-эффекте». Большинство туториалов сосредоточены на демонстрации функциональности и «волшебства» автоматизации. Детали, связанные с безопасностью, кажутся лишними и вырезаются, чтобы ускорить процесс создания бота и показать быстрый «вау-эффект». А, может быть, создатели контента просто не задумываются об этом.

  • Низкий порог входа. Простота использования n8n привлекает много новичков, которые могут быть не знакомы с фундаментальными принципами информационной безопасности, такими как минимальные привилегии или банальная авторизация.

  • Нет «красной ленточки». В документации n8n не уделяется достаточно внимания этой конкретной настройке. Да и кого мы обманываем — кто сейчас читает документацию?

Как обезопасить себя?

К счастью, устранить эту уязвимость относительно просто. Нужно проделать эти шаги:

  1. Мини-фикс в триггере. Самый быстрый и правильный способ — это явно указать разрешенные Chat ID и/или User ID в конфигурации Telegram Trigger.

    Это гарантирует, что бот будет принимать сообщения только от указанных чатов или пользователей.
    Это гарантирует, что бот будет принимать сообщения только от указанных чатов или пользователей.
  2. Guard-нода. В дополнение к настройкам триггера можно добавить программную "guard-ноду" (нода «Code») в начале вашего workflow. Она будет проверять ID отправителя и, если он не совпадает с разрешенными, прерывать работу.

const allowed = ['123456789','987654321'];
if (!allowed.includes($json.from.id.toString())) {
  return []; // Прерываем выполнение, если отправитель не разрешен
}
return items;

Итоги

Друзья, пожалуйста, не копируйте слепо всё, что преподносится нам из YouTube и других туториалов. Старайтесь понять, что именно и как работает и какие еще настройки есть у каждого элемента системы — даже если инструмент кажется простым и интуитивным, как n8n. Как говорится, дьявол кроется в деталях. Ведь кажущаяся простота и удобство решений no-code не должны приводить к появлению уязвимостей.

Если вы уже используете n8n, настоятельно рекомендую:

  • Проверьте все Telegram-Triggers на наличие ограничений.

  • Ограничьте входящие по ID. Убедитесь, что в ваших триггерах явно указаны разрешенные Chat ID и User ID.

  • Минимизируйте доступ. Проверьте, какие права даны интеграциям, и уберите всё лишнее —следуйте принципу минимальных привилегий.

  • Поделитесь этой статьей. Распространите этот материал среди своих коллег и знакомых, которые используют n8n или планируют это делать. Коллективное знание и внимание к безопасности помогут предотвратить потенциальные утечки данных.

Безопасность систем автоматизации — это необходимость. У нас уже есть всевозможные чек-листы по защите мобильных и Web-приложений, конфигурации Docker Compose и Kubernetes (K8s) и многие другие. А в скором времени должен появиться и чек-лист по платформам автоматизации и AI-агентам (если уже его нет).

Если вы создаете собственного AI-агента, не важно на какой платформе — не забудьте проверить его на типичные уязвимости, особенно связанные с LLM. В этом может помочь наш инструмент AppSec.GenAI. Проявите бдительность, и ваши «Джарвисы» будут служить именно вам, а не посторонним.

На сегодня у меня всё. Надеюсь, вам было интересно и полезно узнать про мисконфигурацию в n8n, которая потенциально может привести к серьезным проблемам. Если вам, как и мне, интересны AI-инструменты, их безопасность и практические инструкции — подписывайтесь на мой Telegram-канал и на канал нашей компании, там много очень полезных статей и выступлений от меня и моих коллег, в том числе по безопасности LLM. Давайте разбираться и исследовать вместе!

Спасибо за внимание и хорошего дня!

Теги:
Хабы:
+4
Комментарии0

Публикации

Информация

Сайт
swordfish-security.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия