Типичный сценарий
Команда деплоит приложение. Кто-то говорит: «Давайте алерты в Telegram». Создают бота через @BotFather, кладут токен в CI, пишут curl к Bot API. Работает.
Через полгода токен лежит в 4 местах: GitHub Secrets, .env на staging, ноутбук DevOps-а, скрипт на сервере. Никто не помнит, какой доступ у этого токена.
Что умеет утёкший токен Telegram-бота
getUpdates возвращает историю сообщений в чатах, где бот состоит. Включая ваши ops-обсуждения, пароли, ссылки на инфраструктуру.getChatMember / getChatAdministrators — атакующий видит кто в вашей ops-группе.getFile — все файлы, отправленные в чат: скриншоты, конфиги, ключи.Проблема глубже: Telegram видит ваши данные
Даже без утечки токена — все сообщения бота проходят через серверы Telegram в открытом виде. Секретные чаты не поддерживаются для ботов. Ваши CI/CD алерты содержат:
- Названия репозиториев и веток (внутренняя структура проекта)
- Имена серверов и IP-адреса
- Сообщения об ошибках со стек-трейсами
- Названия баз данных
- Имена окружений (staging, production)
Это операционная разведка. Вы отдаёте её третьей стороне в plaintext.
«Но мы используем приватную группу»
Приватная группа ≠ шифрование. Приватность в Telegram означает, что группу нельзя найти через поиск. Но:
- Telegram (компания) видит все сообщения
- Бот API отдаёт их по токену
- Резервные копии серверов Telegram содержат ваш plaintext
Другая модель: шифрование до отправки
Nerve CLI шифрует payload на вашей машине до того, как он попадает на relay. Relay маршрутизирует зашифрованные конверты. Телефон расшифровывает локально.
Сравнение утечки
Что делать
- Проверьте токены. В скольких местах лежит ваш bot token? Кто имеет доступ к этим местам?
- Разделите отправку и чтение. Система, которая отправляет алерты, не должна уметь их читать.
- Шифруйте до отправки. Если сервис уведомлений скомпрометирован — ваши данные должны быть шифротекстом.
- Оставьте Telegram для людей. Ops-обсуждения — в Telegram. Machine-to-phone сигналы — в зашифрованный pipe.
Попробовать
go install github.com/nerve-ink/nerve-cli/cmd/nerve@latest
export NERVE_DSN="nerve://TOKEN:[email protected]"
echo "deploy failed: staging" | nerve send --severity critical
Relay никогда не увидит текст «deploy failed: staging». Ваш телефон — увидит.